每一个SELECT语句都能获得一个或一组元组。若要把多个SELECT语句的结果合并为一个结果,可用集合操作来完成。集合操作主要包括并操作UNION、交操作INTERSECT和差操作MINUS。
使用UNION将多个查询结果合并起来,形成一个完整的查询结果时,系统会自动去掉重复的元组。需要注意的是,参加UNION操作的各数据项数目必须相同;对应项的数据类型也必须相同。
| 例45 | 查询计算机科学系的学生及年龄不大于19岁的学生 |
| SELECT * FROM Student WHERE Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19 |
|
| 例46 | 查询选修了课程1或者选修了课程2的学生 |
| 本例实际上是查选修课程1的学生集合与选修课程2的学生集合的并集。 SELECT Sno FROM SC WHERE Cno='1' UNION SELECT Sno FROM SC WHERE Cno='2'; |
|
| 标准SQL中没有直接提供集合交操作和集合差操作,但我们可以用其他方法来实现。具体实现方法依查询不同而不同。 | |
| 例47 | 查询计算机科学系的学生与年龄不大于19岁的学生的交集 |
| 本查询换种说法就是,查询计算机科学系中年龄不大于19岁的学生。 SELECT * FROM Student WHERE Sdept='CS' AND Sage<=19; |
|
| 例48 | 查询计算机科学系的学生与年龄不大于19岁的学生的差集 |
| 本查询换种说法就是,查询计算机科学系中年龄大于19岁的学生。 SELECT * FROM Student WHERE Sdept='CS' AND Sage>19; |
|
| 例49 | 查询选修课程1的学生集合与选修课程2的学生集合的差集 |
| 本例实际上是查询选修了课程1但没有选修课程2的学生。 SELECT Sno FROM SC WHERE Cno='1' AND Sno NOT IN (SELECT Sno FROM SC WHERE Cno='2'); |

