使用SQL进行集合查询和数据维护

时间:2022-10-11 14:57:02


使用SQL进行集合查询和数据维护

文章目录

1.分别查询“计科系学生”和“所有男生”的并集,交集和差集。(15分)

–并集

​SELECT *​

​FROM Student​

​WHERE Sdept='计算机系'​

​UNION​

​SELECT *​

​FROM Student​

​WHERE Sex='男'​

–交集

​SELECT *​

​FROM Student​

​WHERE Sdept='计算机系'​

​INTERSECT​

​SELECT *​

​FROM Student​

​WHERE Sex='男'​

–差集

​SELECT *​

​FROM Student​

​WHERE Sdept='计算机系'​

​EXCEPT​

​SELECT *​

​FROM Student​

​WHERE Sex='男'​

2.查询选修了“10001”号课程或选修了“10005”课程的学生学号。(5分)

​SELECT Sno​

​FROM SC​

​WHERE Cno='10001'​

​UNION​

​SELECT Sno​

​FROM SC​

​WHERE Cno='10005'​

3.查询同时选修了“10001”和“10005” 号课程的学生学号。(5分)

​SELECT Sno​

​FROM SC​

​WHERE Cno='10001'​

​INTERSECT​

​SELECT Sno​

​FROM SC​

​WHERE Cno='10005'​

4.查询选修了“10001”号课程,但没选“10005” 号课程的学生学号。(5分)

​SELECT Sno​

​FROM SC​

​WHERE Cno='10001'​

​EXCEPT​

​SELECT Sno​

​FROM SC​

​WHERE Cno='10005'​

Ø *维护操作*

5.在学生表中插入一条新的学生记录,数据可自拟。(注意,插入的数据需满足完整性约束)(5分)

​INSERT INTO Student​

​VALUES('20030101','王芳','女',19 ,'计算机系')​

6.插入一条选课记录,学号:10010118,课程号:20008,能否插入成功?为什么?(5分)

​INSERT INTO SC(Sno,Cno)​

​VALUES('10010118','20008')​

​不能,错误提示:NSERT 语句与 FOREIGN KEY 约束"FK_Sno"冲突。Cno是外键,参照Course中Cno的数值,Course中不存在课程号为“20008”的课程记录。​

7.查询每个系及其人数,将查询结果插入到新表Sdept_Count中(10分)

​--创建表​

​CREATE TABLE Sdept_Count(​

​ ​​Sdept varchar(50),​

​ ​​SNum int​

​)​

​--插入操作​

​INSERT INTO Sdept_Count(Sdept,SNum)​

​SELECT Sdept,COUNT(Sno)​

​FROM Student​

​GROUP BY Sdept​

8.将学生“徐庆”的所在系修改为“计算机系”(5分)

​UPDATE Student​

​SET Sdept='计算机系'​

​WHERE Sname='徐庆'​

9.将所有课程的学分Credit提高1分。(5分)

​UPDATE Course​

​SET Credit=Credit+1​

10.将“徐庆”同学的学号修改为“19010101”,能否修改成功?为什么?(5分)

​UPDATE Student​

​SET Sno='19010101'​

​WHERE Sname='徐庆'​

​不能修改成功,因为该生在SC表中存在选课记录。​

11.将选修了“计算机基础”这门课的学生成绩提高0.2(10分)

​UPDATE SC​

​SET Score=Score*1.2​

​WHERE Sno IN(SELECT SNO​

​ ​​FROM SC​

​ ​​WHERE Cno=(SELECT Cno​

​ ​​FROM Course​

​ ​​WHERE Cname='计算机基础'))​

12.删除学号为“10010118”的学生记录。能否成功删除?不能删除的原因?如何解决?(10分)

​不能删除,原因是SC表中还存在外键的约束,即“10010118”的选课记录。如果要成功删除学生“10010118”,需要先删除其所有选课记录。​

​DELETE FROM SC​

​WHERE Sno='10010118'​

``

​DELETE FROM Student​

​WHERE Sno='10010118'​

13.删除“计算机基础”这门课不及格的选课记录(10分)

​DELETE FROM SC​

​WHERE Score<60 AND Cno=​

​(SELECT Cno​

​FROM Course​

​WHERE Cname='计算机基础')​

14.把选课表SC清空。(5分)

​DELETE FROM SC​