数据库的更新----简单的增删改

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章