sql集合查询

并UNION

查询计算机科学系的学生及年龄小于 19 岁的学生

方法一:

SELECT *
FROM student
WHERE Sdept='CS' OR Sage<19;

image-20220218191705501

方法二:

SELECT *
FROM student
WHERE Sdept='CS'
UNION
SELECT *
FROM student
WHERE Sage<19;

image-20220218191823166

  • UNION

    自动取出重复元素

  • UNION ALL

    保留重复元素

查询选修了课程 1 或者选修了课程 2 的学生

SELECT Sno 
FROM sc
WHERE Cno='1'
UNION
SELECT Sno
FROM sc
WHERE Cno='2';

image-20220218192212292

交INTERSECT

查询计算机科学系的学生与年龄不大于 19 岁的学生的交集

mysql不支持集合交集查询

SELECT *
FROM student
WHERE Sdept='CS'
INTERSECT
SELECT *
FROM student
WHERE Sage<=19;

实际可以用WHERE语句中AND条件实现

SELECT *
FROM student
WHERE Sdept='CS' AND Sage<=19;

image-20220218193059321

查询选修课程 1 的学生集合与选修课程 2 的学生集合的交集

SELECT Sno
FROM sc
WHERE Cno='1'
INTERSECT
SELECT Sno
FROM sc
WHERE Cno='2';

实际是查询既选择修了课程1又选修课程2的学生

SELECT Sno
FROM sc
WHERE Cno='1' AND Sno IN (
	SELECT Sno
	FROM sc
	WHERE Cno='2'
);

image-20220218193429514

差EXCEPT

查询计算机科学系的学生与年龄不大于 19 岁的 学生的差集

SELECT *
FROM student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM student
WHERE Sage<=19;

实际上是查询计算机系中年龄大于19岁的学生

SELECT *
FROM student
WHERE Sdept='CS' AND Sage>19;

image-20220218193744326

posted @ 2022-02-18 19:38  dctwan  阅读(351)  评论(0编辑  收藏  举报