mysql 查询 (二)
带 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:
合并:

浙公网安备 33010602011771号