MySQL表联合查询 理论基础:外键、操作关联表(一)
前言
什么是外键?
外键是指引用另一个表的一列或多列,被引用的列应该具有主键约束或唯一性约束。外键用于建立和加强两个表数据之间的连接
先创建一张班级表t_class
不会创建外键的看 https://jingyan.baidu.com/article/eae0782751728e1fed548577.html
查看表结构
再创建一张班级表t_student
查看表结构
当前表的Key 除了其自身主键外还多了一个外键MUL(stu_classid)
我们插入学生表中的外键值是与班级表(t_class)中主键对应的,两个表之间的数据就具有关联性,如果班级表中不存在这样一个ID值,则在学生表中无法进行插入操作。因为外键列只能插入参照列已存在的值。
删除同样如此,参照列被参照的值是不能被删除的,因此在t_class表中删除"大数据1班"时,一定要现在t_student表中删除该班级的所有学生,然后再删除班级。一句话总结:在两个具有关联关系的表中删除数据时,一定要先删除从表的数据,然后再删除主表中的数据,否则会报错。
修改数据时,当参照列被参照的值不存在时,从表不能被修改,即班级表中已经存在id=1、大数据1班,id=2、大数据2班,id=3、大数据3班,当修改学生表中小四班级外键为4是不可以的,因为依赖表中没有这列值,只能从1、2、3中任选一个值修改。
一、内连接查询
内连接查询的关键字是inner join 或者 join(不建议省略inner)。返回的是表中存在至少一个匹配的数据,那么不匹配的数据肯定就不返回了,如果都不匹配,就是空。
查询全部字段
SELECT * FROM t_student INNER JOIN t_class ON t_student.stu_classid=t_class.class_id
筛选查询所需要的字段
SELECT s.stu_name,c.class_name FROM t_student s INNER JOIN t_class c ON s.stu_classid=c.class_id;
//从表的外键stu_classid
二、左连接查询
外连接之左外连接(也称左连接)
左外连接关键字是LEFT OUTER JOIN 或LEFT JOIN(还是不建议省略outer,可读性不强)。左外连接查询是以左边的表为基准,去匹配要连接的表,不管是否匹配条件都会以基准表的条数返回结果(这里明显不同于内连接),匹配到的数据就显示匹配到的数据,没有匹配条件的数据就显示为null。
查询全部字段
SELECT * FROM t_student LEFT JOIN t_class ON t_student.stu_classid=t_class.class_id
筛选查询所需要的字段
SELECT s.stu_name,c.class_name FROM t_student s LEFT OUTER JOIN t_class c ON s.stu_classid=c.class_id
三、右连接查询
外连接之右外连接(也称右连接)
右连接和左连接的理论是一样的,只是基准表发生了变化,以右边被关联表为基准(将左连接的基准表和被关联表交换位置就等价于右连接)。右连接的关键字是RIGHT OUTER JOIN或RIGHT JOIN(还是不建议省略OUTER )。
查询全部字段
SELECT * FROM t_student RIGHT JOIN t_class ON t_student.stu_classid=t_class.class_id
筛选查询所需要的字段
SELECT s.stu_name,c.class_name FROM t_student s RIGHT OUTER JOIN t_class c ON s.stu_classid=c.class_id
MySQL表联合查询 理论基础:外键、操作关联表(一)相关推荐
- mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作
1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...
- mysql中多表联合查询语句_mysql中的多表联合查询语句是什么
mysql中的多表联合查询语句是:[select 语句1 union [union 选项] select 语句2 union [union 选项] select 语句n].多表联合查询结果是将多个se ...
- mysql教程详解之多表联合查询_详解数据库多表连接查询的实现方法
详解数据库多表连接查询的实现方法 通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 在关系数据库管理系统中,表建立时各数据之间的关系不必 ...
- mysql之多表联合查询并输入数据来自哪张表
比如联合查询3个表,表名分别叫a,b,c select 'a' tbname,a.* from a union all select 'b' tbname,b.* from b union all s ...
- MySQL中如何删除有外键约束的表数据?
介绍表关系: 目的:删除以orders为中心的4表信息-->orders.member.product.order_traveller 注意:对于订单,不能因为删订单就把产品删掉.不能因为删订单 ...
- postgres sql 多表联合查询_从零学会SQL-多表查询
之前学习的内容几乎针对单个表进行简单操作,实际工作中可没有这么简单,复杂的表结构和多表数据关联进行分析,这时候需要我们掌握多表查询方法,一如既往,我们先看一下这篇的主要内容: 表的加法 表的联结 联结 ...
- mysql多表联合查询 去重_mysql中的多表联合并且去重排序
同一数据库中au_log_开头的表,表中ipsrc和ipdst.portsrc和portdst字段将这些4元组去重后显示出来,并按照某个字段排序 $result = $db->query(&qu ...
- MySQL学习笔记-03高级查询、多表联合查询、聚合函数、子查询、视图、存储过程、权限、
关于作者 金山老师:从事Java.大数据.Python职业化培训6年,项目管理.软件开发14年.欢迎添加我的微信号[jshand],最近建了一些微信交流群,扫描下方二维码添加公众号,回复:进群 文章目 ...
- MySQL 多表联合查询有何讲究?
今天我们来聊聊微信中的多表联合查询,应该是小表驱动大表还是大表驱动小表? 1. in VS exists 在正式分析之前,我们先来看两个关键字 in 和 exists. 假设我现在有两张表:员工表和部 ...
最新文章
- 算法学习的链接(持续更新)
- grid布局合并单元格
- 2021年中国大学生程序设计竞赛 女生专场 - 热身赛 Problem C. 口算训练(质因子分解)
- Zabbix 5.0 配置简单WEB网页监测和触发器
- 恶意混时间你不敢管,却要吓唬全体员工?
- 使用windows 7有感
- 远程连接软件TeamViewer
- 手机wap网站制作教程
- Hibernate4.3.8Final环境搭建
- 手把手教你c语言队列实现代码,通俗易懂超详细!
- 产业区块链一周动态丨数字货币发展写入十四五规划,湖南印发区块链发展规划...
- Win10好用吗?简单几步改造让Windows 10更好用
- 知乎页面的html代码,Web前端
- 微信公众号 隐藏菜单
- 人体自身的神奇补肾法 ——你在外面花多少钱都学不到的
- 儿童节,来一波回忆杀!
- [项目]用C++实现的壳(扩展版)
- 一个5M免费JSP空间
- 天翼物联获2022年移动物联网“先进企业”
- docker push 到私服问题 : Retrying in 5 seconds