本次作业内容是对数据库第三章剩余的部分做一个分析和总结,包括查询的剩余部分,数据更新,空值的处理和视图
数据查询
一,集合查询
多个SELECT语句的结果可进行集合操作,主要包括并操作UNION,交操作INTERSECT和差操作EXCEPT
例:查询计算机科学系的学生及年龄不大于19岁的学生
SELECT *
FROM Student
WHERE Sdept='CS'
UNION
SELECT *
FROM Student
WHERE Sage<=19;
注:使用UNION将多个查询结果合并起来时,系统将会自动去掉重复元组
例:查询计算机科学系的学生与年龄不大于19岁的学生的交集
SELECT *
FROM Student
WHERE Sdept='CS'
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19
例:查询计算机科学系的学生与年龄不大于19岁学生的差集
SELECT *
FROM Student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM Student
WHERE Sage<=19;
也可用WHERE…AND…来实现
1.2基于派生表的查询
子查询也可出现在FROM子句中,这时子查询生成的临时派生表成为主查询的查询对象
例:找出每个学生超过他自己选修课程平均成绩的课程号
SELECT Sno,Cno
FROM SC,(SELECT Sno,AVG(Grade)FROM SC GROUP BY Sno)
AS AVG_sc(avg_sno,avg_grade)
WHERE SC.Sno=Avg_sc.avg_sno AND SC.Grade>=Avg_sc.avg_grade;
注:如果子查询中没有聚集函数,派生表可以不指定属性列
例:查询所有选修了1号课程的学生姓名
SELECT Sname
FROM Student,(SELECT Sno FROM SC WHERE Cno='1') AS SC1
WHERE Student.Sno=SC1.Sno;
数据更新
一 插入数据
插入语句INSERT通常有两种形式,一种是插入一个元组,另一种是插入查询结果
1插入元组
格式
INSERT
INTO<表名>
VALUES(<常量>…);
例: 将一个新学生元组(学号201215128,姓名:陈忆,性别:男,所在系:IS,18)
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES