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:

合并:

 

posted @ 2020-11-05 08:54  ZengZG  Views(400)  Comments(0Edit  收藏  举报