數據庫作業14:第五章:數據庫完整性 習題 + 存儲過程

在這裏插入圖片描述

在這裏插入圖片描述

6.(1)

CREATE TABLE 部門
 (部門號 CHAR(20) PRIMARY KEY,
 名稱 CHAR(20),
 經理名 CHAR(20),
 電話 CHAR(10),
 PRIMARY KEY (部門號)
 );

6.(2)

CREATE TABLE Staff
 (職工號 CHAR(9) ,
 姓名 CHAR(20),
 年齡 SMALLINT CHECK(年齡<=60),
 職務 CHAR(10),
 工資 INT,
 部門號 CHAR(20),
 PRIMARY KEY (職工號),
 FOREIGN KEY(部門號) REFERENCES 部門(部門號)
 );

2.(1)

CREATE TABLE S
( Grades CHAR(20),
 			  Num INT 
 );

INSERT INTO S
VALUES('>=90',0);
 INSERT INTO S
 VALUES('[80,90)',0); 
 INSERT INTO S  
 VALUES('[70,80)',0); 
 INSERT INTO S 
 VALUES('[60,70)',0);
 INSERT INTO S  
 VALUES('<60',0);

SELECT 
*FROM S;

(2)

IF (exists (select * from sys.objects where name = 'math')) 
DROP PROCEDURE math
GO 
CREATE PROCEDURE math 
AS 
BEGIN 
DECLARE  @beyond90 INT, 
     @80UNTIL90 INT,    
     @70UNTIL80 INT, 
     @60UNTIL70 INT,  
     @below60 INT; 

SELECT  @beyond90=COUNT(*)   
     FROM SC   
     WHERE Grade>=90 AND Cno='2'    
     SELECT @80UNTIL90=COUNT(*)   
     FROM SC 
     WHERE Grade>80 AND Cno='2'   
     SELECT @70UNTIL80=COUNT(*)   
     FROM SC   
     WHERE Grade>70 AND Cno='2'   
     SELECT @60UNTIL70=COUNT(*)   
     FROM SC  
     WHERE Grade>60 AND Cno='2'   
     SELECT @below60=COUNT(*)   
     FROM SC   
     WHERE Grade<=60 AND Cno='2' 

UPDATE S
     SET Num=@beyond90 
     WHERE Grades='>=90';
     UPDATE S 
     SET Num=@80UNTIL90
     WHERE Grades='[80,90)';
     UPDATE S 
     SET Num=@70UNTIL80
     WHERE Grades='[70,80)'; 
     UPDATE S 
     SET Num=@60UNTIL70 
     WHERE Grades='[60,70)'; 
     UPDATE S 
     SET Num=@below60
     WHERE Grades='<=60'; 
     END; 
     EXEC math 

(2)

CREATE TABLE A 
(Cno CHAR(20), 
 Cname CHAR(20), 
Score FLOAT 
);

INSERT INTO A VALUES('1','數據庫',0) ;
INSERT INTO A VALUES('2','離散數學',0); 
INSERT INTO A VALUES('3','信息系統',0);

(3)

IF (exists (select * from sys.objects where name = 'AVG')) 
DROP PROCEDURE AVG 
GO 
AS 
BEGIN  
DECLARE  
@Avg1 FLOAT,  
@Avg2 FLOAT,  
@Avg3 FLOAT; 


SELECT @Avg1=AVG(Grade) 	
FROM SC 	
WHERE Cno ='1'

UPDATE A 
SET Score=@Avg1 
WHERE Cno ='1' 	

SELECT @Avg2=AVG(Grade) 	
FROM SC 	
WHERE Cno ='2'

UPDATE A 
SET Score=@Avg2 
WHERE Cno ='2' 	

SELECT @Avg3=AVG(Grade) 	
FROM SC 	
WHERE Cno ='3' 	

UPDATE A
SET Score=@Avg3 
WHERE Cno ='3' 

EXEC AVG

(3)

ALTER TABLE SC ADD LEVEL CHAR(2);

IF(exists(select * from sys.objects where name='B'))  
DROP PROCEDURE B 
GO
CREATE PROCEDURE B
AS
UPDATE SC 
SET LEVEL='A' 
WHERE Grade>90 
UPDATE SC 
SET LEVEL='B' 
WHERE Grade BETWEEN 80 AND 90 
UPDATE SC 
SET LEVEL='C' 
WHERE Grade BETWEEN 70 AND 80 
UPDATE SC 
SET LEVEL='D' 
WHERE Grade BETWEEN 60 AND 70 
UPDATE SC 
SET LEVEL='E' 
WHERE Grade<60

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