文章目录
集合查询
并操作UNION,交操作INTERSECT,差操作EXCEPT
注意:参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同
【例3.64 3.65 3.66 3.67 3.68】
--查询计算机科学系的学生及年龄不大于19岁的学生:并
SELECT *
FROM Student
WHERE Sdept='CS'
UNION
SELECT *
FROM Student
WHERE Sage<=19;
--查询选修了课程1或者选修了课程2的学生:并
SELECT Sno
FROM SC
WHERE Cno='1'
UNION
SELECT Sno
FROM SC
WHERE Cno='2';
--查询计算机科学系的学生与年龄不大于19岁的学生的交集
SELECT *
FROM Student
WHERE Sdept='CS'
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19;
SELECT * --与上面等价
FROM Student
WHERE Sdept='CS'AND Sage<=19;
--查询既选修了课程1又选修了课程2的学生:交集
SELECT Sno
FROM SC
WHERE Cno='1'
INTERSECT
SELECT Sno
FROM SC
WHERE Cno='2';
SELECT Sno --嵌套查询,与上面等价
FROM SC
WHERE Cno='1' AND Sno IN
(
SELECT Sno
FROM SC
WHERE Cno='2'
);
--查询计算机科学系的学生与年龄不大于19岁的学生的差集
SELECT *
FROM Student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM Student
WHERE Sage<=19;
--即查询计算机科学系中年龄大于19岁的学生,与上面等价
SELECT *
FROM Student
WHERE Sdept='CS'AND Sage>19;
空值的处理
空值就是“不知道”或“不存在”或“无意义”的值。
SQL语言中允许某些元组的某些属性在一定情况下取空值。一般有以下几种情况:
(1)该属性应该有一个,但目前不知道它的具体值。
(2)该属性不应该有值。
(3)由于某种原因不便于填写。
一.空值的产生
【例3.79 3.80】
--向SC表中插入一个元组,学生号是“201215126”,课程号是“1”,成绩为空
INSERT
INTO SC
VALUES('201215126','1',NULL); --在插入时该学生还没有考试成绩,取空值
INSERT --与上面等价
INTO SC(Sno,Cno)
VALUES('201215126','1'); --在插入插入语句中没有赋值的属性,其值为空值