使用SQL進(jìn)行集合查詢和數(shù)據(jù)維護(hù)
[TOC]
1.分別查詢“計(jì)科系學(xué)生”和“所有男生”的并集,交集和差集。(15分)
--并集
SELECT *
FROM Student
WHERE Sdept='計(jì)算機(jī)系'
UNION
SELECT *
FROM Student
WHERE Sex='男'
--交集
SELECT *
FROM Student
WHERE Sdept='計(jì)算機(jī)系'
INTERSECT
SELECT *
FROM Student
WHERE Sex='男'
--差集
SELECT *
FROM Student
WHERE Sdept='計(jì)算機(jī)系'
EXCEPT
SELECT *
FROM Student
WHERE Sex='男'
2.查詢選修了“10001”號課程或選修了“10005”課程的學(xué)生學(xué)號。(5分)
SELECT Sno
FROM SC
WHERE Cno='10001'
UNION
SELECT Sno
FROM SC
WHERE Cno='10005'
3.查詢同時(shí)選修了“10001”和“10005” 號課程的學(xué)生學(xué)號。(5分)
SELECT Sno
FROM SC
WHERE Cno='10001'
INTERSECT
SELECT Sno
FROM SC
WHERE Cno='10005'
4.查詢選修了“10001”號課程,但沒選“10005” 號課程的學(xué)生學(xué)號。(5分)
SELECT Sno
FROM SC
WHERE Cno='10001'
EXCEPT
SELECT Sno
FROM SC
WHERE Cno='10005'
? *維護(hù)操作*
5.在學(xué)生表中插入一條新的學(xué)生記錄,數(shù)據(jù)可自擬。(注意,插入的數(shù)據(jù)需滿足完整性約束)(5分)
INSERT INTO Student
VALUES('20030101','王芳','女',19 ,'計(jì)算機(jī)系')
6.插入一條選課記錄,學(xué)號:10010118,課程號:20008,能否插入成功?為什么?(5分)
INSERT INTO SC(Sno,Cno)
VALUES('10010118','20008')
不能,錯(cuò)誤提示:NSERT 語句與 FOREIGN KEY 約束"FK_Sno"沖突。Cno是外鍵,參照Course中Cno的數(shù)值,Course中不存在課程號為“20008”的課程記錄。
7.查詢每個(gè)系及其人數(shù),將查詢結(jié)果插入到新表Sdept_Count中(10分)
--創(chuàng)建表
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.將學(xué)生“徐慶”的所在系修改為“計(jì)算機(jī)系”(5分)
UPDATE Student
SET Sdept='計(jì)算機(jī)系'
WHERE Sname='徐慶'
9.將所有課程的學(xué)分Credit提高1分。(5分)
UPDATE Course
SET Credit=Credit+1
10.將“徐慶”同學(xué)的學(xué)號修改為“19010101”,能否修改成功?為什么?(5分)
UPDATE Student
SET Sno='19010101'
WHERE Sname='徐慶'
不能修改成功,因?yàn)樵撋赟C表中存在選課記錄。
11.將選修了“計(jì)算機(jī)基礎(chǔ)”這門課的學(xué)生成績提高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='計(jì)算機(jī)基礎(chǔ)'))
12.刪除學(xué)號為“10010118”的學(xué)生記錄。能否成功刪除?不能刪除的原因?如何解決?(10分)
不能刪除,原因是SC表中還存在外鍵的約束,即“10010118”的選課記錄。如果要成功刪除學(xué)生“10010118”,需要先刪除其所有選課記錄。
DELETE FROM SC
WHERE Sno='10010118'
``
DELETE FROM Student
WHERE Sno='10010118'
13.刪除“計(jì)算機(jī)基礎(chǔ)”這門課不及格的選課記錄(10分)
DELETE FROM SC
WHERE Score<60 AND Cno=
(SELECT Cno
FROM Course
WHERE Cname='計(jì)算機(jī)基礎(chǔ)')
14.把選課表SC清空。(5分)
DELETE FROM SC