SQL Server 数据库实验课第八周——第五章作业

第五章 6.假设有下面两个关系模式

职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码
部门(部门号,名称,经理名,电话)其中部门号为主码
用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义
(1)定义每个模式的主码
(2)定义参照完整性
(3)定职工年龄不得超过60岁

DROP TABLE IF EXISTS Employee
DROP TABLE IF EXISTS Department
CREATE TABLE Department
(
	ID CHAR(11) PRIMARY KEY,
	Name CHAR(5) UNIQUE NOT NULL,
	Manager CHAR(5) NOT NULL,
	Location SMALLINT,
	PhoneNumber CHAR(11),
)
CREATE TABLE Employee
(
	ID CHAR(11) PRIMARY KEY,
	Name CHAR(5) NOT NULL,
	Age SMALLINT CHECK(Age>0 AND Age<60),
	Salary Money,
	Job CHAR(20),
	DepartmentId CHAR(11) FOREIGN KEY
	REFERENCES Department(ID) ON DELETE CASCADE
)

第八章 2.对学生-课程数据库编写存储过程, 完成下述功能:

在之前建过的表中插入课程离散数学

INSERT INTO Course VALUES('8','离散数学',NULL,4)

插入选修课数据
在这里插入图片描述

(1)统计离散数学的成绩分布情况,即按照各分数段统计人数。

1.建表Rank

DROP TABLE IF EXISTS Rank;
CREATE TABLE Rank(
	Grade CHAR(20),--成绩划分等级
	num INT--该分数段人数
)
INSERT INTO Rank
VALUES('[0,20)',0),('[20,40)',0),('[40,60)',0),('[60,80)',0),('[80,100]',0);
SELECT * FROM Rank

在这里插入图片描述

IF(EXISTS(SELECT * FROM sys.objects WHERE name='Proc_Grade'))
DROP PROCEDURE Proc_Grade
GO 
CREATE PROCEDURE Proc_Grade
AS 
DECLARE 
@less20 INT,
@20to40 INT,
@40to60 INT,
@60to80 INT,
@80to100 INT,
@Cno CHAR(4);


SELECT @Cno=Cno FROM Course WHERE Cname='离散数学';
--统计各个分数段人数
SELECT @less20=COUNT(*) FROM SC WHERE Grade<20 AND Cno=@Cno;--将该分数段的人存储在@less20中
UPDATE Rank SET num=@less20 WHERE Grade='[0,20)';
SELECT @20to40=COUNT(*) FROM SC WHERE Grade<40 AND Grade>=20 AND Cno=@Cno;
UPDATE Rank SET num=@20to40 WHERE Grade='[20,40)';
SELECT @40to60=COUNT(*) FROM SC WHERE Grade<60 AND Grade>=40 AND Cno=@Cno;
UPDATE Rank SET num=@40to60 WHERE Grade='[40,60)';
SELECT @60to80=COUNT(*) FROM SC WHERE Grade<80 AND Grade>=60 AND Cno=@Cno;
UPDATE Rank SET num=@60to80 WHERE Grade='[60,80)';
SELECT @80to100=COUNT(*) FROM SC WHERE Grade<=100 AND Grade>=80 AND Cno=@Cno;
UPDATE Rank SET num=@80to100 WHERE Grade='[80,100]';

创建好存储过程后运行,必须先创建,再EXEC,分成两步。否则存储过程执行不了

EXEC Proc_Grade;
SELECT *FROM SC WHERE Cno=8
SELECT *FROM Rank

在这里插入图片描述

(2)统计任意一门课的平均成绩。

先看看有分的有多少门

SELECT DISTINCT SC.Cno,Course.Cname
FROM SC,Course
WHERE SC.Cno=Course.Cno

在这里插入图片描述
建表

CREATE TABLE AvgGrade(
Cname CHAR(50),--课程名
Avg FLOAT
)
INSERT INTO AvgGrade VALUES('数据库',0),('数学',0),('信息系统',0),('离散数学',0);
SELECT * FROM AvgGrade

在这里插入图片描述
创建存储过程

IF(EXISTS(SELECT * FROM sys.objects WHERE name='Proc_Avg'))
DROP PROCEDURE Proc_Avg
GO 
CREATE PROCEDURE Proc_Avg
AS 
DECLARE --定义变量
@数据库 FLOAT,
@数学 FLOAT,
@信息系统 FLOAT,
@离散数学 FLOAT;

SELECT @数据库=Avg(Grade) FROM SC WHERE Cno='1';
UPDATE AvgGrade SET Avg=@数据库 WHERE Cname='数据库';
SELECT @数学=Avg(Grade) FROM SC WHERE Cno='2';
UPDATE AvgGrade SET Avg=@数学 WHERE Cname='数学';
SELECT @信息系统=Avg(Grade) FROM SC WHERE Cno='3';
UPDATE AvgGrade SET Avg=@信息系统 WHERE Cname='信息系统';
SELECT @离散数学=Avg(Grade) FROM SC WHERE Cno='8';
UPDATE AvgGrade SET Avg=@离散数学 WHERE Cname='离散数学'

执行存储过程

 EXEC Proc_Avg
 SELECT * FROM AvgGrade

在这里插入图片描述

(3)将学生选课成绩从百分制改为等级制 (即A、 B、C、D、E)

1.给SC表增加属性列GradeLevel用来显示等级

ALTER TABLE SC ADD Level char(5)--增加GradeLevel列
SELECT * FROM SC

在这里插入图片描述
创建存储过程

IF(EXISTS(SELECT * FROM sys.objects WHERE name='Proc_Level'))
DROP PROCEDURE Proc_Level
GO 
CREATE PROCEDURE Proc_Level
AS 
UPDATE SC SET Level='A' WHERE Grade>=80 AND Grade<=100;
UPDATE SC SET Level='B' WHERE Grade>=60 AND Grade<80;
UPDATE SC SET Level='C' WHERE Grade>=40 AND Grade<60;
UPDATE SC SET Level='D' WHERE Grade<20 

执行存储过程

 EXEC Proc_Level
 SELECT * FROM SC

在这里插入图片描述

心得

啊啊啊啊啊啊啊终于写完了啊啊啊啊啊啊

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实验四视图、数据控制与嵌入式SQL语言实验 基于实验一建立的“图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单中的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。具体实验内容如下: 1、视图定义与查询实验 ① 在“图书读者数据库”(Book_Reader_DB)中,先用视图创建向导的方法创建视图View1和View2。其中View1包括书号、书名、定价、数量等属性。View2包括读者号、读者姓名、单位、电话、书号、书名、借阅日期、应归还日期、实际还书日期和过期天数等属性,其条件是所有借书已过期的读者和借书情况(假定借阅期为60天); ② 根据上述定义的视图,在查询分析器中用语句完成如下查询: A:通过视图View1查询书库中藏书的情况; B:通过视图View2查询借书过期的读者和借书情况及罚款金额(假定超期罚款标准为1元/天); ③ 在查询分析器中用SQL语句来创建视图View3和视图View4,视图View3的要求与View1相同,视图View4与视图View2的条件相同。 2、数据控制实验 ① 假定系统有U1、U2、U3 、U4、U5、U6六个登录用户,试将查询图书表的权限由管理员授权给U1, 以U1用户的身份重新登录系统后,再把权限授予给U2; ② 系统管理员把插入数据给借阅表的权限授予给U3; ③ 系统管理员把添加图书数据的权限授予给U4; ④ 系统管理员把修改读者数据信息的权限授予给U5; ⑤ 将U1访问图书表的权限收回; 3、嵌入式SQL语言实验 ① 用VB建立一个工程,在对话框Form1上添加一些访问数据库和显示数据的控件,并通过ODBC建立与数据库Book_Reader_DB的连接; ② 在Form1上添加一个按钮Button1,对Button1添加一个点击事件(双击按钮Button1即可进入源代码输入界面),在事件上添加一些访问数据库中表对象或视图对象的SQL语句,运行工程,即可将满足要求的记录显示在界面的显示数据的控件上。换用不同的SQL语句,检查其执行结果。 上述每项实验内容相应的实验步骤必须进行详细的记录,并将其整理后写在实验报告中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值