数据库第五次实验数据库应用系统的数据库设计实验

CREATE TABLE College(
    cono INT PRIMARY KEY,
    coname CHAR(20) NOT NULL
)

INSERT INTO College
VALUES(001,'数计学院'),
      (002,'经管法学院'),
      (003,'体育学院')

CREATE TABLE Major(
    mno INT PRIMARY KEY,
    mname CHAR(20) NOT NULL,
    cono INT NOT NULL
)

INSERT INTO Major
VALUES(01,'计算机',001),
      (02,'数学',001),
      (03,'法学',002),
      (04,'篮球',003)

CREATE TABLE Class(
    cno INT PRIMARY KEY,
    cname CHAR(20) NOT NULL,
    mno INT NOT NULL,
    cono INT NOT NULL
)

INSERT INTO Class
VALUES(1,'计算机2202',01,001),
      (2,'数学2201',02,001),
      (3,'法学2201',03,002),
      (4,'篮球2005',04,003)

CREATE TABLE Student(
sno CHAR(20) PRIMARY KEY,
sname CHAR(20) NOT NULL,
ssex CHAR(10) NOT NULL CHECK(ssex = '男' OR ssex = '女'),
sage INT NOT NULL,
cno INT NOT NULL,
cname CHAR(20) NOT NULL,
mno INT NOT NULL,
mname CHAR(20),
cono INT NOT NULL,
coname CHAR(20)
)

INSERT INTO Student
VALUES('2201','唐三','男',19,1,'计算机2202',01,'计算机',001,'数计学院'),
      ('2202','小舞','男',18,2,'数学2201',02,'数学',001,'数计学院'),
      ('2203','比比东','男',18,3,'法学2201',03,'法学',002,'经管法学院'),
      ('2005','吴磊','女',22,4,'篮球2005',04,'篮球',003,'体育学院')

-- 课程
CREATE TABLE Course_gb(
id CHAR(20) PRIMARY KEY,
name CHAR(20) NOT NULL,
type CHAR(20) NOT NULL CHECK(type = '公共必修课'),
time INT NOT NULL,
credit INT NOT NULL,
term CHAR(10) NOT NULL CHECK(term = '春' OR term = '秋')
)

INSERT INTO Course_gb
VALUES('201','物理','公共必修课',20,5,'春'),
      ('202','英语','公共必修课',20,5,'秋')

CREATE TABLE Course_gx(
id CHAR(20) PRIMARY KEY,
name CHAR(20) NOT NULL,
type CHAR(20) NOT NULL CHECK(type = '公共选修课'),
time INT NOT NULL,
credit INT NOT NULL,
term CHAR(10) NOT NULL CHECK(term = '春' OR term = '秋')
)

INSERT INTO Course_gx
VALUES('204','唱','公共选修课',13,2,'春'),
      ('205','跳','公共选修课',13,2,'秋')

CREATE TABLE Course_zb(
id CHAR(20) PRIMARY KEY,
name CHAR(20) NOT NULL,
type CHAR(20) NOT NULL CHECK(type = '专业必修课'),
time INT NOT NULL,
credit INT NOT NULL,
term CHAR(10) NOT NULL CHECK(term = '春' OR term = '秋'),
mno INT NOT NULL
)

INSERT INTO Course_zb
VALUES('101','数据库','专业必修课',20,4,'春',01),
      ('102','Java','专业必修课',20,4,'秋',01),
      ('103','数学','专业必修课',20,5,'春',02),
      ('104','刑法','专业必修课',20,2,'春',03),
      ('105','篮球','专业必修课',20,3,'春',04)

CREATE TABLE Course_zx(
id CHAR(20) PRIMARY KEY,
name CHAR(20) NOT NULL,
type CHAR(20) NOT NULL CHECK(type = '专业选修课'),
time INT NOT NULL,
credit INT NOT NULL,
term CHAR(10) NOT NULL CHECK(term = '春' OR term = '秋'),
mno INT NOT NULL
)

INSERT INTO Course_zx 
VALUES('106','前端开发','专业选修课',17,3,'秋',01)

CREATE TABLE Score_gb(
sno CHAR(20),
gbno CHAR(20),
PRIMARY KEY(sno,gbno),
grade INT,
GPA INT
)

INSERT INTO Score_gb
VALUES('2201','201',88,3),
      ('2201','202',99,4),
      ('2202','201',77,2.5),
      ('2202','202',77,2.5),
      ('2203','201',81,3),
      ('2203','202',81,3),
      ('2005','201',91,3.5),
      ('2005','202',81,3)
                           
CREATE TABLE Score_gx(
sno CHAR(20),
gxno CHAR(20),
PRIMARY KEY(sno,gxno),
grade INT,
GPA INT
)

INSERT INTO Score_gx
VALUES('2005','204',100,4),
      ('2005','205',100,4),
      ('2201','204',80,3),
      ('2203','204',60,1)
                      
CREATE TABLE Score_zb(
sno CHAR(20),
zbno CHAR(20),
PRIMARY KEY(sno,zbno),
grade INT,
GPA INT
)

INSERT INTO Score_zb
VALUES('2201','101',88,3),
      ('2201','102',78,2.5),
      ('2202','103',100,4),
      ('2203','104',61,1.5),
      ('2005','105',100,4)

CREATE TABLE Score_zx(
sno CHAR(20),
zxno CHAR(20),
PRIMARY KEY(sno,zxno),
grade INT,
GPA INT
)

INSERT INTO Score_zx
VALUES('2201','106',80,3)

-- 删除
-- 学生信息
go
CREATE TRIGGER delete_stu ON Student FOR DELETE
AS
DECLARE @sno CHAR(20)
SELECT @sno=sno FROM deleted
DELETE FROM Score_gb WHERE sno=@sno
DELETE FROM Score_gx WHERE sno=@sno
DELETE FROM Score_zb WHERE sno=@sno
DELETE FROM Score_zx WHERE sno=@sno

-- 课程信息
go
CREATE TRIGGER delete_gb ON Course_gb FOR DELETE
AS
DECLARE @gbno CHAR(20)
SELECT @gbno=id FROM deleted
DELETE FROM Score_gb WHERE gbno=@gbno
go
CREATE TRIGGER delete_gx ON Course_gx FOR DELETE
AS
DECLARE @gxno CHAR(20)
SELECT @gxno=id FROM deleted
DELETE FROM Score_gx WHERE gxno=@gxno

go
CREATE TRIGGER delete_zb ON Course_zb FOR DELETE
AS
DECLARE @zbno CHAR(20)
SELECT @zbno=id FROM deleted
DELETE FROM Score_zb WHERE zbno=@zbno

go
CREATE TRIGGER delete_zx ON Course_zx FOR DELETE
AS
DECLARE @zxno CHAR(20)
SELECT @zxno=id FROM deleted
DELETE FROM Score_zx WHERE zxno=@zxno


-- 创建视图
go
CREATE VIEW 学生成绩
AS
SELECT Student.sno 学号,sname 姓名,cname 班级,name 课程,grade 成绩,GPA 学分绩点
FROM Student ,Course_gb,Score_gb WHERE
Student.sno=Score_gb.sno AND Course_gb.id=Score_gb.gbno
UNION
SELECT Student.sno 学号,sname 姓名,cname 班级,name 课程,grade 成绩,GPA 学分绩点
FROM Student ,Course_gx,Score_gx WHERE
Student.sno=Score_gx.sno AND Course_gx.id=Score_gx.gxno
UNION
SELECT Student.sno 学号,sname 姓名,cname 班级,name 课程,grade 成绩,GPA 学分绩点
FROM Student ,Course_zb,Score_zb WHERE
Student.sno=Score_zb.sno AND Course_zb.id=Score_zb.zbno
UNION
SELECT Student.sno 学号,sname 姓名,cname 班级,name 课程,grade 成绩,GPA 学分绩点
FROM Student ,Course_zx,Score_zx WHERE
Student.sno=Score_zx.sno AND Course_zx.id=Score_zx.zxno
Go

-- 数据查询
-- (1)给定学号,按学号查询指定学生的基本信息
go
CREATE PROCEDURE stu_id @id CHAR(20)
AS
    SELECT*FROM Student
    WHERE sno=@id
    go
    EXECUTE stu_id '2201'

-- (2)给定姓名,按姓名查询指定学生的基本信息。
go
CREATE PROCEDURE stu_name @name CHAR(20)
AS
    SELECT*FROM Student
    WHERE sname=@name
    go
    EXECUTE stu_name '吴磊'


-- (3)给定课程号,按课程号查询指定课程的基本信息。
go
CREATE PROCEDURE c_id @id CHAR(20)
AS
    SELECT*FROM Course_gb
    WHERE id=@id
    UNION
    SELECT*FROM Course_gx
    WHERE id=@id
    UNION
    SELECT id,name,type,time,credit,term FROM Course_zb
    WHERE id=@id
    UNION
    SELECT id,name,type,time,credit,term FROM Course_zx
    WHERE id=@id
    go
    EXECUTE c_id '102'

-- (4)给定课程名,按课程名查询指定课程的基本信息。
go
CREATE PROCEDURE c_name @name VARCHAR(20)
AS
    SELECT*FROM Course_gb
    WHERE name=@name
    UNION
    SELECT*FROM Course_gx
    WHERE name=@name
    UNION
    SELECT id,name,type,time,credit,term FROM Course_zb
    WHERE name=@name
    UNION
    SELECT id,name,type,time,credit,term FROM Course_zx
    WHERE name=@name
    go
    EXECUTE c_name 'Java'
-- (5)给定学号和课程名,按学号和课程号查询指定学生所修指定课程的成绩和学分绩点。
go
CREATE PROCEDURE s_0 @sno CHAR(20),@cno CHAR(20)
AS
    SELECT grade,GPA FROM Score_gb
    WHERE sno=@sno AND gbno=@cno
    UNION
    SELECT grade,GPA FROM Score_gx
    WHERE sno=@sno AND gxno=@cno
    UNION
    SELECT grade,GPA FROM Score_zb
    WHERE sno=@sno AND zbno=@cno
    UNION
    SELECT grade,GPA FROM Score_zx
    WHERE sno=@sno AND zxno=@cno
    go 
    EXECUTE s_0 '2005','204'
-- (6)给定学号,按学号查询指定学生所修全部课程的课程名、成绩和学分绩点。要求使用所建立的“学生成绩” 视图。
go
CREATE PROCEDURE s_1 @id CHAR(20)
AS
    SELECT 学号,姓名,班级,课程,成绩,学分绩点
    FROM 学生成绩 WHERE 学号=@id
    go
    s_1 '2005'
-- (7)给定班级和课程名,按班级和课程号查询指定班级所有学生选修指定课程的成绩,查询结果以学号、姓名、成绩、学分绩点的形式显示。要求使用所建立的“学生成绩” 视图。
go
CREATE PROCEDURE s_2 @class VARCHAR(20),@name VARCHAR(20)
AS
    SELECT 学号,姓名,成绩,学分绩点
    FROM 学生成绩 
     WHERE 班级=@class AND 课程=@name
    go 
    s_2 '篮球2005','唱'

-- (8)查询每个学生的学分绩点的总和及平均学分绩点。
SELECT 姓名,SUM(学分绩点)学分绩点总和,AVG(学分绩点)平均学分绩点
FROM 学生成绩 GROUP BY 姓名

-- 数据更新
-- (1)插入一个学生的基本信息。
INSERT INTO Student
VALUES('2204','丁晨曦','男',23,4,'篮球2005',04,'篮球',003,'体育学院')

-- (2)插入一门课程的基本信息。
INSERT INTO Course_gx
VALUES(206,'rap','公共选修课',20,2,'秋')

-- (3)插入一个学生某一门课的成绩。
INSERT INTO Score_gx
VALUES('2204','206',73,6)

-- (4)给定学号,按学号修改指定学生的基本信息。
go
CREATE PROCEDURE stu_id1 @id CHAR(20)
AS
    UPDATE Student SET ssex='女'
    WHERE sno=@id
    go
    stu_id1 '2204'

-- (5)给定课程号,按课程号修改指定课程的基本信息。
go
CREATE PROCEDURE c_id1 @id CHAR(20)
AS
    UPDATE Course_gb SET Time =Time+1
    WHERE id=@id
    
    UPDATE Course_gx SET Time =Time+1
    WHERE id=@id
    
    UPDATE Course_zb SET Time =Time+1
    WHERE id=@id
    
    UPDATE Course_zx SET Time =Time+1
    WHERE id=@id
go
c_id1 '105'

-- (6)给定学号和课程名,按学号和课程名修改指定学生所修指定课程的成绩。
go
CREATE PROCEDURE s_01 @sno CHAR(20),@cname VARCHAR(20)
AS
    UPDATE Score_gb SET  grade=grade+1
    FROM Course_gb
    WHERE sno=@sno AND name=@cname
    
    UPDATE Score_gx SET  grade=grade+1
    FROM Course_gx
    WHERE sno=@sno AND name=@cname

    UPDATE Score_zb SET  grade=grade+1
    FROM Course_zb
    WHERE sno=@sno AND name=@cname

    UPDATE Score_zx SET  grade=grade+1
    FROM Course_zx
    WHERE sno=@sno AND name=@cname
    go
    s_01 '2201','数据库'

-- (7)给定学号,按学号删除指定学生的基本信息及修课信息。
go
CREATE PROCEDURE s_11 @id CHAR(20)
AS 
    DELETE FROM Student WHERE sno=@id
go
s_11 '2202'

-- (8)给定学号和课程名,按学号和课程名删除指定学生所修指定课程及成绩信息。
go
CREATE PROCEDURE s_12 @sno CHAR(20),@name VARCHAR(20)
AS
    DELETE FROM Score_gb WHERE sno=@sno AND gbno=(SELECT id FROM Course_gb WHERE name=@name)
    DELETE FROM Score_gx WHERE sno=@sno AND gxno=(SELECT id FROM Course_gx WHERE name=@name)
    DELETE FROM Score_zb WHERE sno=@sno AND zbno=(SELECT id FROM Course_zb WHERE name=@name)
    DELETE FROM Score_zx WHERE sno=@sno AND zxno=(SELECT id FROM Course_zx WHERE name=@name)
go
s_12 '2201','前端开发'


-- 数据控制
-- 先新建几个不同的数据库用户,给他们赋予不同的权限,然后自己以这些不同的用户登
-- 录 SQL Server,比较操作权限的不同。

go
exec sp_addlogin'cxk','1234'
go
GRANT SELECT ON Student TO cxk WITH GRANT OPTION

go
exec sp_addlogin'lilies','1234'
go
GRANT UPDATE ON Student TO lilies WITH GRANT OPTION

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值