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