数据库的集合运算:
/*
SQL语言也支持传统的集合运算,包括并(UNION)、交(INTERSECT)、差(EXCEPT)集合运算的常见形式为:
<元组集表达式> <集合运算符> [ALL] <元组集表达式>
其中<元组集表达式>产生元组的集合,通常是SELECT查询或集合运算的结果
<集合运算符>是UNION、INTERSECT或EXCEPT
与SELECT语句不同,集合运算将自动删除结果中的重复元组。可选的ALL可以用来保留运算结果中的重复元组
与关系代数一样,SQL的集合运算要求参与运算的元组集的列数必须相同,对应列的数据类型也必须相同
集合运算都可以用SELECT查询实现
*/
-- 查询选修了CS301号课程或者选修了CS306号课程的学生的学号。
SELECT Sno
FROM SC
WHERE Cno= 'CS301'
UNION
SELECT Sno
FROM SC
WHERE Cno= 'CS306';
-- 这等价于:
SELECT DISTINCT Sno
FROM SC
WHERE Cno='CS301' OR Cno='CS306';
-- 查询既选修了CS301号课程, 又选修了CS306号课程的学生的学号。
SELECT Sno
FROM SC
WHERE Cno= 'CS301'
INTERSECT
SELECT Sno
FROM SC
WHERE Cno= 'CS306';
-- 这等价于:
SELECT DISTINCT Sno
FROM SC
WHERE Cno='CS301' AND Sno IN
(SELECT Sno
FROM SC
WHERE Cno='CS306');
-- 查询选修了CS301号课程, 但未选修CS306号课程的学生的学号
SELECT Sno
FROM SC
WHERE Cno= 'CS301'
EXCEPT
SELECT Sno
FROM SC
WHERE Cno= 'CS306';
-- 这等价于
SELECT DISTINCT Sno
FROM SC
WHERE Cno='CS301' AND Sno NOT IN
(SELECT Sno
FROM SC
WHERE Cno= 'CS306');