数据库作业14:第五章: 数据库完整性 习题 + 存储过程

在这里插入图片描述
6、(1)

CREATE TABLE Staff 	
(Sno CHAR(20) PRIMARY KEY, 	
 Sname CHAR(20), 	
 Sage SMALLINT, 	
 Job CHAR(20), 	
 Pal INT, 	
 Num CHAR(20) 	
 );
 
 CREATE TABLE Depart 	
 (Num CHAR(20) PRIMARY KEY, 	
  Dname CHAR(20), 	
  Mname CHAR(20), 	
  Tel CHAR(20) 
 );

(2)

CREATE TABLE Depart 	
 (Num CHAR(20) PRIMARY KEY, 	
  Dname CHAR(20), 	
  Mname CHAR(20), 	
  Tel CHAR(20) 
 );
 
CREATE TABLE Staff 	
(Sno CHAR(20) PRIMARY KEY, 	
 Sname CHAR(20), 	
 Sage SMALLINT, 	
 Job CHAR(20), 	
 Pal INT, 	
 Num CHAR(20),
 FOREIGN KEY(Num) REFERENCES Depart(Num) 	
 );

(3)

CREATE TABLE Depart 	
 (Num CHAR(20) PRIMARY KEY, 	
  Dname CHAR(20), 	
  Mname CHAR(20), 	
  Tel CHAR(20) 
 );
 
CREATE TABLE Staff 	
(Sno CHAR(20) PRIMARY KEY, 	
 Sname CHAR(20), 	
 Sage SMALLINT CHECK(Sage<=60), 	
 Job CHAR(20), 	
 Pal INT, 	
 Num CHAR(20),
 FOREIGN KEY(Num) REFERENCES Depart(Num) 	
 );

在这里插入图片描述
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;

在这里插入图片描述

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);
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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值