CREATE DATABASE 學生管理
GO
USE 學生管理
GO
CREATE TABLE STUDENT(
SNO CHAR(9) PRIMARY KEY,
SNAME CHAR(20) UNIQUE,
SSEX CHAR(2),
SAGE SMALLINT,
SDEPT CHAR(20));
GO
INSERT INTO STUDENT
VALUES ('201215121','李勇','男',20,'CS'),
('201215122','劉晨','女',19,'CS'),
('201215123','王敏','女',18,'MA'),
('201215125','張立','男',19,'IS');
GO
CREATE TABLE COURSE(
CNO CHAR(4) PRIMARY KEY,
CNAME CHAR(40) NOT NULL,
CPNO CHAR(4),
CCREDIT SMALLINT,
FOREIGN KEY(CPNO) REFERENCES COURSE(CNO));
GO
INSERT INTO COURSE
VALUES('1','數據庫','5',4),
('2','數學',NULL,2),
('3','信息系統','1',4),
('4','操作系統','6',3),
('5','數據結構','7',4),
('6','數據處理',NULL,2),
('7','PASCAL語言','6',4);
CREATE TABLE SC(
SNO CHAR(9),
CNO CHAR(4),
GRADE SMALLINT,
PRIMARY KEY(SNO,CNO),
FOREIGN KEY(SNO) REFERENCES STUDENT(SNO),
FOREIGN KEY(CNO) REFERENCES COURSE(CNO));
GO
INSERT INTO SC
VALUES('201215121','1',92),
('201215121','2',85),
('201215121','3',88),
('201215122','2',90),
('201215122','3',80);
--數據更新練習題
--1、例3.69 將一個新學生元組(學號:201215128;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。
INSERT
INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT)
VALUES ('201215128','陳冬','男',18,'IS')
--2、[例3.70]將學生張成民的信息(‘201215126’,’張成民’,’男’,18,’CS’)插入到Student表中。
INSERT
INTO STUDENT
VALUES('201215126','張成民','男',18,'CS')
--3、[例3.71] 插入一條選課記錄( '201215128','1')。
INSERT
INTO SC
VALUES('201215128','1',NULL)
--4、插入一條選課記錄( '201215125','1',76)
INSERT
INTO SC(SNO,CNO,GRADE)
VALUES('201215125','1',76)
--5、插入選課記錄( '20000008','1',90) 思考:能執行嗎?爲什麼?
INSERT
INTO SC
VALUES('20000008','1',90)--不可以執行,因爲學號爲20000008的學生不存在
--6、插入選課記錄('201215125','8',90) 思考:能執行嗎?爲什麼?
INSERT
INTO SC
VALUES('201215125','8',90)--不可以執行,在課程表中根本就不存在課程號爲8的課程
--7、將多個學生的信息插入到Student表中(只錄入學號和姓名) (內容自擬,3條記錄)
INSERT
INTO STUDENT(SNO,SNAME)
VALUES('201215127','劉晨曦'),('201215129','歐陽鑫'),('201215130','木子陽')
--8、插入兩條選課記錄,內容自擬
INSERT
INTO SC
VALUES('201215129','6','86'),('201215127','4','98')
--9、[例3.72] 對每一個系,求學生的平均年齡,並把結果存入數據庫“Dept_age”中。
CREATE TABLE Dept_age
(
Sdept CHAR(15),
AVG_AGE SMALLINT
)
INSERT
INTO Dept_age(Sdept,AVG_AGE)
SELECT Sdept,AVG(SAGE)
FROM STUDENT
GROUP BY Sdept
--10、[例3.73] 將學生201215121的年齡改爲22歲。
UPDATE STUDENT
SET SAGE=22
WHERE SNO='201215121'
--11、[例3.74] 將所有學生的年齡增加1歲。
UPDATE STUDENT
SET SAGE=SAGE+1
--12、將所有男生的年齡減少一歲。
UPDATE STUDENT
SET SAGE=SAGE-1
WHERE SSEX='男'
--13、[例3.75] 將計算機科學系全體學生的成績置零。
UPDATE SC
SET GRADE=0
WHERE SNO IN(
SELECT SNO
FROM STUDENT
WHERE SDEPT='CS')
--14、將所有1號課程的成績設爲空值。
UPDATE SC
SET GRADE = NULL
WHERE CNO IN(
SELECT CNO
FROM SC
WHERE CNO='1')
--15、刪除學號爲201215123的學生記錄。
DELETE
FROM STUDENT
WHERE SNO='201215123'
--16、[例3.76] 刪除學號爲201215128的學生記錄。(能執行嗎?爲什麼?)
DELETE
FROM STUDENT
WHERE SNO='201215128'--不能執行,因爲在選課表中還存在201215128的選課情況,如果在學生表中刪除後,就破壞的數據庫的完整性
--17、[例3.78] 刪除計算機科學系所有學生的選課記錄。
DELETE
FROM SC
WHERE SNO IN(
SELECT SNO
FROM STUDENT
WHERE SDEPT='CS')
--18、刪除所有先導課程爲空的課程記錄。(能執行嗎?爲什麼?)
DELETE
FROM COURSE
WHERE CNO IN(
SELECT CNO
FROM COURSE
WHERE CPNO IS NULL)--不可以執行,我個人認爲如果把先行課爲空的課程記錄刪除後,
--當某個課程是以剛剛刪除的課程爲先行課時,會發現表中沒有這個課程,這樣就破壞了數據庫參照的完整性
--19、刪除課程號爲2號的課程記錄。
DELETE
FROM COURSE
WHERE CNO='2'
--20、[例3.77] 刪除所有的學生選課記錄。
DELETE
FROM SC