数据库原理与应用 第 6 章 · 第四节
课程第 6 章第四节 两种连法五种连接内连接三张表连接加分组主表从表左外连接谁没选课交叉连接自连接同专业 版式
第 6 章 数据表中的数据查询 · 第四节

多关系数据查询

两种连接写法,内连接、外连接、交叉连接与自连接。
本 节 知 识 点
  1. 35把几张表接在一起查
  2. 36JOIN 有五种
  3. 37只留两边都配上的行
  4. 38两张能连,三张也能连
  5. 39连接之后照样能分组
  6. 40外连接分主从
  7. 41把没授课的教师也列出来
  8. 42同一件事左右都能写
  9. 43不带条件的全配对
  10. 44一张表当两张用
  11. 45自连接也能做等值比较
35
第 6 章 · 第四节

把几张表接在一起查

一种把表名并列写在 FROM 后面,一种用 JOIN 关键字。

第 35 页课件

分清楚两种写法

写法连接条件写在
表名用逗号并列WHERE 子句里
用 JOIN 连ON 子句里

重 点

两张表都有同名字段时,字段前面必须加表名前缀,否则报字段有歧义。

36
第 6 章 · 第四节

JOIN 有五种

内连接留公共部分,外连接保一边全员,交叉连接全配对。

第 36 页课件

试一试换一种连接看行数

写成
把两张表各缩到 3 行的示意,连接条件是 t.tno = tc.tno。

重 点

FULL JOIN 是标准 SQL 里的写法,MySQL 不支持,敲了会报语法错。

37
第 6 章 · 第四节

只留两边都配上的行

最常用的一种,等值连接加上一个筛选条件。

第 37 页课件

重 点

内连接的结果里不会出现 NULL 补位,配不上的行直接被丢掉。

知道更多两种写法等价

逗号写法和 INNER JOIN 写法生成的执行计划完全一样,选顺手的。

上机做

上机三第 2 题 同一件事两种写法

38
第 6 章 · 第四节

两张能连,三张也能连

连接条件有几个,取决于表之间靠什么对上号。

第 38 页课件

重 点

连接 N 张表要写 N 减一个连接条件,少写一个就变成了交叉连接。

打个比方

教师和课程之间隔着授课表,得先从教师连到授课,再从授课连到课程。

想一想

少写一个连接条件,结果会多出多少行?

39
第 6 章 · 第四节

连接之后照样能分组

先把表连起来,再按课程分组数人头。

第 39 页课件

重 点

分组字段里写了课程号还要再写课程名,因为它也出现在 SELECT 后面。

知道更多别名能拿来筛组

HAVING 里可以直接写 SELECT 起的别名,也可以把聚合函数再写一遍。

上机做

上机三第 4 题 连接之后再分组

40
第 6 章 · 第四节

外连接分主从

主表的行一个不少,从表配不上就补 NULL。

第 40 页课件

记牢它分清左右

  1. 主表在左是左连接
  2. 主表在右是右连接
  3. 配不上的补空值

重 点

内连接看不见的那些落单的行,正是外连接要找出来的。

想一想

要查谁没有选过课,该用内连接还是外连接?

41
第 6 章 · 第四节

把没授课的教师也列出来

左边的教师表全员保留,右边配不上就是 NULL。

第 41 页课件

重 点

结果里课程名为 NULL 的那一行,说明这位教师一门课都没排。

知道更多接连写两个

两个左连接可以接着写,前一个的结果继续当左表往下连。

上机做

上机三第 5 题 找出没授课的人

42
第 6 章 · 第四节

同一件事左右都能写

把两张表的位置对调,左连接就成了右连接。

第 42 页课件

重 点

左连接和右连接只是主表在哪一边的区别,能力上没有任何差异。

练一练

s LEFT JOIN sc 与哪一种写法结果相同?
  1. Asc LEFT JOIN s
  2. Bsc RIGHT JOIN s
  3. Cs CROSS JOIN sc
答案 B

把表对调的同时把左改成右,主表还是学生表,结果就一样。

43
第 6 章 · 第四节

不带条件的全配对

左边每一行都去配右边每一行,行数是两边相乘。

第 43 页课件

重 点

交叉连接的行数是相乘,列数是相加,六行乘八行就是四十八行。

知道更多多半是写错了

实际工作里出现巨大的交叉连接,通常是漏写了连接条件。

上机做

上机三第 6 题 亲眼看一次行数爆炸

44
第 6 章 · 第四节

一张表当两张用

给同一张表取两个别名,就能拿它的两行互相比。

第 44 页课件

试一试一张表怎么变成两张

要拿同一张表里的两行比大小,就得先把它变成两张表。

重 点

自连接的每个字段都必须带别名前缀,不然机器不知道你说的是哪一份。

45
第 6 章 · 第四节

自连接也能做等值比较

一边锁定某个人,另一边找和他专业相同的。

第 45 页课件

重 点

结果里会带上被锁定的那个人自己,因为他和自己的专业当然相同。

想一想

要把王彤自己排除掉,条件里该再加一句什么?

保山学院·人工智能教研室·曹鼎鼎