带 any/all 谓词的子查询
例子:
1. 查询出成绩比1号学生或3号学生高的其他学生的 的信息(stu)
查看 stu 表
方法1:使用 any 谓词
方法2:使用聚合函数 min()
2. 查询出成绩比1号学生和3号学生都高的其他学生的 的信息(stu)
使用 all 谓词
使用聚合函数 max()
带有 exists 谓词的子查询
例子:
1. 查询未选课程的学生信息(stu中有,而stu_score中没有的学号)
查看 stu, stu_score表
使用 not exists
2. 查询既选修了1号课程又选修了4号课程的学生的学号(stu_score)
基于派生表的查询(from 型子查询)
例子:
1. 用from型子查询实现 select * from stu where sex = 'f' and grade <60:(性别女,分数低于60)
连接查询
多表连接查询原理:
1. 先确定数据要用到哪些表。
2. 将多个表先通过笛卡尔积变成一个表。
3. 然后去除不符合逻辑的数据(根据where后的条件)。
1. 不带谓词的连接(很少使用)
例如:
连接 stu 和 stu_score
select stu.*, stu_score.* from stu,stu_score;
2. 等值连接
例子:
(1) 查询选修了1号课程的所有学生的基本信息
(2) 查询出所有学生的学号,姓名,课程名及各门功课的成绩 (stu,score,course)
stu,score,course三表如下所示:
查询:
---------------------------------------------------------------------------------------------------------------------
自身连接
例子
查询既选修了1号课程又选修了2号课程的学生的学号(score)
----------------------------------------------------------------------------------------------------------------------------
外连接
例子
查询出所有学生的学号,姓名,课程号,及各门功课的成绩 (stu,stu_score)包括没有选修任何课程的学生
stu, stu_score 表
stu 左连接 stu_score
stu 右连接 stu_score
集合查询
1. 并操作:union
例子:
(1): 合并 A 和 B,id 对应的 num 求和
A, B:
合并: