Alex_McAvoy

想要成为渔夫的猎手

SQL 集合查询

【集合查询】

SELECT 语句的查询结果是元组的集合,因此多个 SELECT 语句的结果可进行集合操作

集合操作主要包括并操作 UNION、交操作 INTERSECT、差操作 EXCEPT

需要注意的是,参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同

从本质上来讲,UNION 操作就是多个条件进行 ORINTERSECT 操作就是多个条件进行 AND

由于并、交、差操作是二元运算,因此在 SQL 中默认从左到右顺序运算,此外,当涉及到三个及以上的元组集合操作时,并、差操作交换操作顺序不改变最后的结果,但差操作交换操作顺序会改变最终结果

考虑到集合操作的运算顺序,在实际应用中,大多数数据库并不支持 INTERSECT 操作和 EXCEPT 操作,一般利用 ANDORNOT 操作来对条件进行操作,变相的完成集合运算

【并操作】

UNION 短语将多个查询结果取并集,同时,系统会自动去掉重复元组

例如,查询 CS 系的学生与年龄不大于 20 岁的学生的全部信息

1
2
3
4
5
6
7
SELECT *
FROM student
WHERE Sdept = 'CS'
UNION
SELECT *
FROM student
WHERE Sage <= 20;

实际上相当如下语句

1
2
3
SELECT *
FROM student
WHERE Sdept = 'CS' OR Sage <= 20;

如果想要在合并时保留重复元组,则需要加上 ALL 短语

例如,查询 CS 系的学生与年龄不大于 20 岁的学生的全部信息,要求保留重复元组

1
2
3
4
5
6
7
SELECT *
FROM student
WHERE Sdept = 'CS'
UNION ALL
SELECT *
FROM student
WHERE Sage <= 20;

【交操作】

INTERSECT 短语将多个查询结果取交集

例如,查询 CS 系的年龄不大于 20 岁的学生的全部信息

1
2
3
4
5
6
7
SELECT *
FROM student
WHERE Sdept = 'CS'
INTERSECT
SELECT *
FROM student
WHERE Sage <= 20;

实际上相当如下语句

1
2
3
SELECT *
FROM student
WHERE Sdept = 'CS' AND Sage <=20;

【差操作】

EXCEPT 短语将多个查询结果起来取差集

例如,查询 CS 系的年龄大于 20 岁的学生的全部信息

1
2
3
4
5
6
7
SELECT *
FROM student
WHERE Sdept = 'CS'
EXCEPT
SELECT
FROM student
WHERE Sage <= 20;

实际上相当于以下语句

1
2
3
SELECT *
FROM student
WHERE Sdept = 'CS' AND Sage > 20;
感谢您对我的支持,让我继续努力分享有用的技术与知识点!