多表查询

左连接和右连接的区别

  • 左连接(LEFT JOIN):保留左表全部行,如果右表没有匹配,就补 NULL。

  • 右连接(RIGHT JOIN):保留右表全部行,如果左表没有匹配,就补 NULL。

  • 内连接(INNER JOIN):只保留两边都能匹配上的行。

  • 所以本质区别就在于:有没有保留没匹配上的记录

  • 一对多

image1

  • 多对多: 利用中间表来维护两表之间的关系

image2

例子
image3

-
image4

image5
如果直接select * from emp , dept ; —->会将他们所有可能情况进行组合

所以要加约束条件 select * from emp , dept where emp.dept = dept.id;

多表查询的分类
image6

  • 内连接 (集合的交集部分)

image7

演示
image8

  • 外连接 (两集合的相异部分)

左外连接 : 展示时会完全包含左表的所有数据
image9

右外连接 : 展示时会完全包含右表的所有数据
image10

  • 自连接 可内可外
    image11

一个公司 , 就总体而言都是员工 , 但是细分到部门 , 就有领导之分并且可能各有不同
因此就有自连接的存在. 统一看成 员工表和领导表 即可
需要注意的是自连接一定要注意from时要启用别名, 不然混乱

image12

联合查询
image13
union会进行去重!!!

子查询 说白了就是嵌套查询, 前者的输出是后者的输入
image14

  • 标量子查询 —>返回单行单列的结果
    image15

  • 列子查询 —>返回一列的结果
    image16

image17

  • 行子查询
    image18

image19

  • 表子查询 —>多行多列
    image20

多表查询的练习
内连接就是两个表交集的部分,
外连接就是一个表是全部信息(即使有的字段值为空,也会显示出来)和这两张表的交集部分.

image21

image22

image23

多表查询的总结
image24