前言

什么是外键?

外键是指引用另一个表的一列或多列,被引用的列应该具有主键约束或唯一性约束。外键用于建立和加强两个表数据之间的连接

先创建一张班级表t_class

不会创建外键的看 https://jingyan.baidu.com/article/eae0782751728e1fed548577.html


查看表结构


再创建一张班级表t_student


查看表结构


当前表的Key 除了其自身主键外还多了一个外键MUL(stu_classid)
  1. 我们插入学生表中的外键值是与班级表(t_class)中主键对应的,两个表之间的数据就具有关联性,如果班级表中不存在这样一个ID值,则在学生表中无法进行插入操作。因为外键列只能插入参照列已存在的值。

  2. 删除同样如此,参照列被参照的值是不能被删除的,因此在t_class表中删除"大数据1班"时,一定要现在t_student表中删除该班级的所有学生,然后再删除班级。一句话总结:在两个具有关联关系的表中删除数据时,一定要先删除从表的数据,然后再删除主表中的数据,否则会报错。

  3. 修改数据时,当参照列被参照的值不存在时,从表不能被修改,即班级表中已经存在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表联合查询 理论基础:外键、操作关联表(一)相关推荐

  1. mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作

    1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...

  2. mysql中多表联合查询语句_mysql中的多表联合查询语句是什么

    mysql中的多表联合查询语句是:[select 语句1 union [union 选项] select 语句2 union [union 选项] select 语句n].多表联合查询结果是将多个se ...

  3. mysql教程详解之多表联合查询_详解数据库多表连接查询的实现方法

    详解数据库多表连接查询的实现方法 通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 在关系数据库管理系统中,表建立时各数据之间的关系不必 ...

  4. mysql之多表联合查询并输入数据来自哪张表

    比如联合查询3个表,表名分别叫a,b,c select 'a' tbname,a.* from a union all select 'b' tbname,b.* from b union all s ...

  5. MySQL中如何删除有外键约束的表数据?

    介绍表关系: 目的:删除以orders为中心的4表信息-->orders.member.product.order_traveller 注意:对于订单,不能因为删订单就把产品删掉.不能因为删订单 ...

  6. postgres sql 多表联合查询_从零学会SQL-多表查询

    之前学习的内容几乎针对单个表进行简单操作,实际工作中可没有这么简单,复杂的表结构和多表数据关联进行分析,这时候需要我们掌握多表查询方法,一如既往,我们先看一下这篇的主要内容: 表的加法 表的联结 联结 ...

  7. mysql多表联合查询 去重_mysql中的多表联合并且去重排序

    同一数据库中au_log_开头的表,表中ipsrc和ipdst.portsrc和portdst字段将这些4元组去重后显示出来,并按照某个字段排序 $result = $db->query(&qu ...

  8. MySQL学习笔记-03高级查询、多表联合查询、聚合函数、子查询、视图、存储过程、权限、

    关于作者 金山老师:从事Java.大数据.Python职业化培训6年,项目管理.软件开发14年.欢迎添加我的微信号[jshand],最近建了一些微信交流群,扫描下方二维码添加公众号,回复:进群 文章目 ...

  9. MySQL 多表联合查询有何讲究?

    今天我们来聊聊微信中的多表联合查询,应该是小表驱动大表还是大表驱动小表? 1. in VS exists 在正式分析之前,我们先来看两个关键字 in 和 exists. 假设我现在有两张表:员工表和部 ...

最新文章

  1. 算法学习的链接(持续更新)
  2. grid布局合并单元格
  3. 2021年中国大学生程序设计竞赛 女生专场 - 热身赛 Problem C. 口算训练(质因子分解)
  4. Zabbix 5.0 配置简单WEB网页监测和触发器
  5. 恶意混时间你不敢管,却要吓唬全体员工?
  6. 使用windows 7有感
  7. 远程连接软件TeamViewer
  8. 手机wap网站制作教程
  9. Hibernate4.3.8Final环境搭建
  10. 手把手教你c语言队列实现代码,通俗易懂超详细!
  11. 产业区块链一周动态丨数字货币发展写入十四五规划,湖南印发区块链发展规划...
  12. Win10好用吗?简单几步改造让Windows 10更好用
  13. 知乎页面的html代码,Web前端
  14. 微信公众号 隐藏菜单
  15. 人体自身的神奇补肾法 ——你在外面花多少钱都学不到的
  16. 儿童节,来一波回忆杀!
  17. [项目]用C++实现的壳(扩展版)
  18. 一个5M免费JSP空间
  19. 天翼物联获2022年移动物联网“先进企业”
  20. docker push 到私服问题 : Retrying in 5 seconds

热门文章

  1. 信息学奥赛一本通(2067:【例2.5】圆)
  2. 常用技巧 —— 桶排
  3. 数列极差(信息学奥赛一本通-T1427)
  4. 信使(信息学奥赛一本通-T1376)
  5. 信息学奥赛C++语言: 单词的长度
  6. 合唱团算法(DP问题)
  7. 21 MM配置-采购-定义采购组
  8. 48 CO配置-控制-获利能力分析-创建经营组织
  9. python图像库_Python常用图像处理库整理
  10. 为什么安装了cmpp没法拖到工具栏_软件SU:简介、安装以及设置