一、为什么要学习
因为不合理的使用连接会导致慢查询
二、什么是连接
参与连接的表叫做 连接表, 连接就是把 各个连接表 进行的组合 (笛卡儿积)加入结果集并返回
三、连接查询
如何只是对表进行大量的连接,笛卡儿积作用得到的结果量是巨大的 (乘法)。所有我们需要给连接表进行合理的过滤,选出我们需要的数据 。根据过滤方式,将连接表可划分为:
- 驱动表
- 被驱动表
拿着从驱动表中过滤得到的数据结果去与被驱动表匹配 (划分驱动表和被驱动表的方式)
四、外连接
1. 为什么需要
驱动表中的记录在被驱动表中不存在,但是要求我们也要显示出来,这时我们使用普通的连接(内连接)就不行了, 所以需要外连接 。
例子: 我们需要选出所有学生的线代成绩给线代老师看,要求包含所有学生,缺考的路人乙的成绩显示为 null 。
这时,我们使用普通的内连接(如下图)就不能完成了,需要使用外连接 。
2. 外连接分类
2.1 左外连接
示例 : 选出所有学生的线代成绩给线代老师看,要求包含所有学生,缺考的路人乙的成绩显示为 null 。
select Student.number, name, scores
from Student left join Score
on
Student.number = Score.number and Score.subject = "线代";
2.2 右外连接
和左外连接唯一的区别就是,驱动表在右面
3 ON 和 Where 过滤的区别
ON 是专门为外连接场景提出的, 内连接中的 ON 和 Where 是等价的 。正常情况下,我们的外连接会把驱动表中的所有记录留下, 但是啊啊啊啊 , 有时候我们也不想全部留下鸭,我们也想选择一些有用的留下,这时就可以使用 ON 语句对驱动表中的数据进行过滤 —— ON 的过滤条件叫做连接条件。
注: 当使用外连接时用 where 过滤会报错