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:

合并:

原文地址:https://www.cnblogs.com/ZZG-GANGAN/p/13925171.html