数据库原理与应用 第 6 章 · 上机四
课程第 6 章上机四 先拆开过桥IN 子查询量词存起来撞 1093相关子查询EXISTS并起来连起来 版式
第 6 章 数据表中的数据查询 · 上机四

子查询与集合运算

九道题,从拆开子查询做起,一直做到相关子查询、EXISTS 和 UNION。
已完成 0 / 9
本 次 上 机 题 目
  1. 01子查询要先拆开单独跑
  2. 02用课程名查开课日期
  3. 03括号里返回一组值
  4. 04ANY 和 ALL 的门槛差在哪
  5. 05把统计结果灌进新表
  6. 06课本这条在真机上跑不通
  7. 07括号里用到了外层的字段
  8. 08只问有没有,不问是什么
  9. 09UNION 把两个结果摞在一起
  10. 连续练习:五道综合题
01
第 6 章 · 上机四

子查询要先拆开单独跑

把括号里那句单独跑通,再套回去,这是最省事的写法。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第二条和第三条查的是同一件事,一个用子查询一个用自连接。

想一想

子查询和自连接,你更容易看懂哪一种?

02
第 6 章 · 上机四

用课程名查开课日期

课程名在课程表,开课日期在授课表,中间用子查询过桥。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

外面用等号时括号里必须只出一行,出两行就报 1242。

知道更多

第三条是连接写法,多数情况下比子查询快,因为机器只扫一遍。

03
第 6 章 · 上机四

括号里返回一组值

等号改成 IN,括号里就可以返回好几行。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第三条故意用等号,括号里有三行,机器报 1242 子查询返回多行。

练一练

括号里的查询会返回多行时,比较符该怎么改?
  1. A改成 IN 或加 ANY
  2. B加一个 LIMIT 1
  3. C两种都行但含义不同
答案 C

改成 IN 是问在不在这一组里,加 LIMIT 1 是只取一行来比,问的不是一回事。

04
第 6 章 · 上机四

ANY 和 ALL 的门槛差在哪

同一个子查询,一个比最小的,一个比最大的。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第一条先把那四份工资看清楚,后两条的门槛就是这一组的最小值和最大值。

记牢它两个量词

  1. ANY 比最小的
  2. ALL 比最大的
  3. 等价于 MIN 和 MAX
05
第 6 章 · 上机四

把统计结果灌进新表

先建一张空表,再用 INSERT 接 SELECT 把结果灌进去。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后两条对着看,平均工资的小数部分被整数列裁掉了。

想一想

要保住小数,新表那一列该改成什么类型?

06
第 6 章 · 上机四

课本这条在真机上跑不通

一边改这张表一边从它自己里面查,MySQL 直接拦下。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第二条报 1093,第三条能过,区别在于查的是不是被改的那张表。

知道更多

绕法是先把值查出来写成常数,或者把子查询包一层当临时表。

07
第 6 章 · 上机四

括号里用到了外层的字段

把括号里那句单独拿出来跑,跑不通的就是相关子查询。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第一条单独跑必然报错,因为 s.sno 要等外层给值才有意义。

知道更多

学生表有八行,括号里那句就跑八遍,这是相关子查询最贵的地方。

08
第 6 章 · 上机四

只问有没有,不问是什么

括号里能查出行就是真,查不出就是假。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

EXISTS 括号里写星号就行,它只看有没有行,不看查出来的是什么。

练一练

EXISTS 和 NOT EXISTS 两条查询的结果加起来是什么?
  1. A还是原来那批人
  2. B全体学生
  3. C空集
答案 B

一个人要么选了这门课要么没选,两条查询把八个人分成两拨,合起来正好是全体。

09
第 6 章 · 上机四

UNION 把两个结果摞在一起

两条查询各查各的,列数和类型对得上就能并。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后一条列数不一样,机器报 1222,这是 UNION 唯一的硬要求。

知道更多

第一条用一句 OR 就能写完,UNION 真正的用处是并起两张不同的表。

第 6 章 · 上机四

连续练习:五道综合题

不看上面的答案,自己把这五道题写出来。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后一条把学生和教师并在一起,这才是 UNION 该干的活。

知道更多

第二条的答案和讲义对不上是正常的,第 6 题那条 UPDATE 已经把课时改过了。

想一想

要让这一页回到最初的数据,该按哪个按钮?

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