數據庫的更新----簡單的增刪改

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

 

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