Initial commit
This commit is contained in:
36
Homework/Homework250313/CreateTable.sql
Normal file
36
Homework/Homework250313/CreateTable.sql
Normal file
@@ -0,0 +1,36 @@
|
||||
USE Homework250313;
|
||||
|
||||
CREATE TABLE S
|
||||
(
|
||||
SNO CHAR(2) PRIMARY KEY,
|
||||
SNAME VARCHAR(20),
|
||||
STATUS INT,
|
||||
CITY VARCHAR(20)
|
||||
);
|
||||
|
||||
CREATE TABLE P
|
||||
(
|
||||
PNO CHAR(2) PRIMARY KEY,
|
||||
PNAME VARCHAR(20),
|
||||
COLOR VARCHAR(10),
|
||||
WEIGHT INT
|
||||
);
|
||||
|
||||
CREATE TABLE J
|
||||
(
|
||||
JNO CHAR(2) PRIMARY KEY,
|
||||
JNAME VARCHAR(20),
|
||||
CITY VARCHAR(20)
|
||||
);
|
||||
|
||||
CREATE TABLE SPJ
|
||||
(
|
||||
SNO CHAR(2),
|
||||
PNO CHAR(2),
|
||||
JNO CHAR(2),
|
||||
QTY INT,
|
||||
PRIMARY KEY (SNO, PNO, JNO),
|
||||
FOREIGN KEY (SNO) REFERENCES S (SNO),
|
||||
FOREIGN KEY (PNO) REFERENCES P (PNO),
|
||||
FOREIGN KEY (JNO) REFERENCES J (JNO)
|
||||
);
|
||||
42
Homework/Homework250313/InsertData.sql
Normal file
42
Homework/Homework250313/InsertData.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
USE Homework250313;
|
||||
INSERT INTO S (SNO, SNAME, STATUS, CITY)
|
||||
VALUES ('S1', N'精益', 20, N'天津'),
|
||||
('S2', N'盛锡', 10, N'北京'),
|
||||
('S3', N'东方红', 30, N'北京'),
|
||||
('S4', N'丰泰盛', 20, N'天津'),
|
||||
('S5', N'为民', 30, N'上海');
|
||||
INSERT INTO P (PNO, PNAME, COLOR, WEIGHT)
|
||||
VALUES ('P1', N'螺母', N'红', 12),
|
||||
('P2', N'螺栓', N'绿', 17),
|
||||
('P3', N'螺丝刀', N'蓝', 14),
|
||||
('P4', N'螺丝刀', N'红', 14),
|
||||
('P5', N'凸轮', N'蓝', 40),
|
||||
('P6', N'齿轮', N'红', 30);
|
||||
INSERT INTO J (JNO, JNAME, CITY)
|
||||
VALUES ('J1', N'三建', N'北京'),
|
||||
('J2', N'一汽', N'长春'),
|
||||
('J3', N'弹簧厂', N'天津'),
|
||||
('J4', N'造船厂', N'天津'),
|
||||
('J5', N'机车厂', N'唐山'),
|
||||
('J6', N'无线电厂', N'常州'),
|
||||
('J7', N'半导体厂', N'南京');
|
||||
INSERT INTO SPJ (SNO, PNO, JNO, QTY)
|
||||
VALUES ('S1', 'P1', 'J1', 200),
|
||||
('S1', 'P1', 'J3', 100),
|
||||
('S1', 'P1', 'J4', 700),
|
||||
('S1', 'P2', 'J2', 100),
|
||||
('S2', 'P3', 'J1', 400),
|
||||
('S2', 'P3', 'J2', 200),
|
||||
('S2', 'P3', 'J4', 500),
|
||||
('S2', 'P3', 'J5', 400),
|
||||
('S2', 'P5', 'J1', 400),
|
||||
('S2', 'P5', 'J2', 100),
|
||||
('S3', 'P1', 'J1', 200),
|
||||
('S3', 'P3', 'J1', 200),
|
||||
('S4', 'P5', 'J1', 100),
|
||||
('S4', 'P6', 'J3', 300),
|
||||
('S4', 'P6', 'J4', 200),
|
||||
('S5', 'P2', 'J4', 100),
|
||||
('S5', 'P3', 'J1', 200),
|
||||
('S5', 'P6', 'J2', 200),
|
||||
('S5', 'P6', 'J4', 50);
|
||||
50
Homework/Homework250313/Query.sql
Normal file
50
Homework/Homework250313/Query.sql
Normal file
@@ -0,0 +1,50 @@
|
||||
USE Homework250313
|
||||
Go
|
||||
-- 求供应工程 J1 零件的供应商号 SNO
|
||||
SELECT DISTINCT SNO
|
||||
FROM SPJ
|
||||
WHERE JNO = 'J1';
|
||||
Go
|
||||
-- 求供应工程 J1 零件 P1 的供应商号 SNO
|
||||
SELECT DISTINCT SNO
|
||||
FROM SPJ
|
||||
WHERE JNO = 'J1'
|
||||
AND PNO = 'P1';
|
||||
Go
|
||||
-- 求供应工程 J1 红色零件的供应商号 SNO
|
||||
SELECT DISTINCT SPJ.SNO
|
||||
FROM SPJ
|
||||
JOIN P ON SPJ.PNO = P.PNO
|
||||
WHERE SPJ.JNO = 'J1'
|
||||
AND P.COLOR = N'红';
|
||||
Go
|
||||
-- 求没有使用天津供应商生产的红色零件的工程号 JNO
|
||||
SELECT JNO
|
||||
FROM J
|
||||
WHERE JNO NOT IN (SELECT DISTINCT SPJ.JNO
|
||||
FROM SPJ
|
||||
JOIN S ON SPJ.SNO = S.SNO
|
||||
JOIN P ON SPJ.PNO = P.PNO
|
||||
WHERE S.CITY = N'天津'
|
||||
AND P.COLOR = N'红');
|
||||
Go
|
||||
-- 求至少用了 S1 供应商所供应的全部零件的工程号 JNO
|
||||
SELECT JNO
|
||||
FROM SPJ
|
||||
WHERE PNO IN (SELECT PNO FROM SPJ WHERE SNO = 'S1')
|
||||
GROUP BY JNO
|
||||
HAVING COUNT(DISTINCT PNO) = (SELECT COUNT(DISTINCT PNO) FROM SPJ WHERE SNO = 'S1');
|
||||
Go
|
||||
-- 找出所有供应商的姓名和所在城市
|
||||
SELECT SNAME, CITY
|
||||
FROM S;
|
||||
Go
|
||||
-- 找出所有零件的名称、颜色、重量
|
||||
SELECT PNAME, COLOR, WEIGHT
|
||||
FROM P;
|
||||
Go
|
||||
-- 找出使用供应商 S1 所供应零件的工程号码
|
||||
SELECT DISTINCT JNO
|
||||
FROM SPJ
|
||||
WHERE SNO = 'S1';
|
||||
Go
|
||||
69
Homework/Homework250320/Query.sql
Normal file
69
Homework/Homework250320/Query.sql
Normal file
@@ -0,0 +1,69 @@
|
||||
USE Homework250320;
|
||||
Go
|
||||
-- 找出工程项目J2使用的各种零件的名称及其数量
|
||||
SELECT P.PNAME AS 零件名称, SUM(SPJ.QTY) AS 总数量
|
||||
FROM SPJ
|
||||
JOIN P ON SPJ.PNO = P.PNO
|
||||
WHERE SPJ.JNO = 'J2'
|
||||
GROUP BY P.PNAME;
|
||||
Go
|
||||
-- 找出上海厂商供应的所有零件号码
|
||||
SELECT DISTINCT SPJ.PNO
|
||||
FROM SPJ
|
||||
JOIN S ON SPJ.SNO = S.SNO
|
||||
WHERE S.CITY = N'上海';
|
||||
Go
|
||||
-- 找出使用上海产的零件的工程名称
|
||||
SELECT DISTINCT J.JNAME
|
||||
FROM SPJ
|
||||
JOIN S ON SPJ.SNO = S.SNO
|
||||
JOIN J ON SPJ.JNO = J.JNO
|
||||
WHERE S.CITY = N'上海';
|
||||
Go
|
||||
-- 找出没有使用天津产的零件的工程号码
|
||||
SELECT JNO
|
||||
FROM J
|
||||
WHERE JNO NOT IN (SELECT DISTINCT SPJ.JNO
|
||||
FROM SPJ
|
||||
JOIN S ON SPJ.SNO = S.SNO
|
||||
WHERE S.CITY = N'天津');
|
||||
Go
|
||||
-- 把全部红色零件的颜色改成蓝色
|
||||
UPDATE P
|
||||
SET COLOR = N'蓝'
|
||||
WHERE COLOR = N'红';
|
||||
SELECT PNO, COLOR
|
||||
FROM P; -- Validate
|
||||
Go
|
||||
-- 将S5供给J4的零件P6改为由S3供应
|
||||
UPDATE SPJ
|
||||
SET SNO = 'S3'
|
||||
WHERE SNO = 'S5'
|
||||
AND JNO = 'J4'
|
||||
AND PNO = 'P6';
|
||||
SELECT *
|
||||
FROM SPJ
|
||||
WHERE JNO = 'J4'
|
||||
AND PNO = 'P6'; -- Validate
|
||||
Go
|
||||
-- 删除供应商S2及相关供应记录
|
||||
DELETE
|
||||
FROM SPJ
|
||||
WHERE SNO = 'S2'; -- 先删除SPJ表中S2的供应记录
|
||||
DELETE
|
||||
FROM S
|
||||
WHERE SNO = 'S2'; -- 再删除S表中的S2记录
|
||||
SELECT SNO
|
||||
FROM S; -- Validate: S2 已不存在
|
||||
SELECT SNO
|
||||
FROM SPJ; -- Validate: S2 相关记录已删除
|
||||
Go
|
||||
-- 插入供应情况记录 (S2,J6,P4,200)
|
||||
INSERT INTO SPJ (SNO, PNO, JNO, QTY)
|
||||
VALUES ('S2', 'P4', 'J6', 200);
|
||||
SELECT *
|
||||
FROM SPJ
|
||||
WHERE SNO = 'S2'
|
||||
AND JNO = 'J6'
|
||||
AND PNO = 'P4'; -- Validate
|
||||
Go
|
||||
11
Homework/Homework250324/Homework250324.sql
Normal file
11
Homework/Homework250324/Homework250324.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
USE Homework250324;
|
||||
Go
|
||||
-- 创建三建工程项目的供应情况视图,包括SNO, PNO, QTY
|
||||
CREATE VIEW view_sanjian as select sno, pno, qty FROM j, spj where j.jno = spj.jno and j.jname = N'三建';
|
||||
Go
|
||||
-- 找出三建工程项目使用的各种零件代码及其数量
|
||||
SELECT pno, sum(qty) from view_sanjian group by pno;
|
||||
Go
|
||||
-- 找出供应商S1的供应情况
|
||||
select * from view_sanjian where sno = 'S1';
|
||||
Go
|
||||
29
Homework/Homework250327/Homework250327.sql
Normal file
29
Homework/Homework250327/Homework250327.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
-- 查找至少有2名男生的班号
|
||||
select class from student where sex=N'男' group by class having count(*) >= 2;
|
||||
Go
|
||||
-- 查找student表中不姓王的同学
|
||||
select * from student where name not like N'王%';
|
||||
Go
|
||||
-- 查找student表中每个学生的姓名和年龄
|
||||
select name, year(getdate())-year(birthday) age from student;
|
||||
Go
|
||||
-- 查询student表中最大生日和最小生日的学生
|
||||
select * from student where birthday = (select min(birthday) from student)
|
||||
union
|
||||
select * from student where birthday = (select max(birthday) from student);
|
||||
Go
|
||||
-- 以班号和年龄从大到小的顺序显示学生信息
|
||||
select * from student order by class desc, birthday;
|
||||
Go
|
||||
-- 查找男教师的姓名及其上的课程的名称
|
||||
select name, cname from course, teacher where no=tno and sex=N'男';
|
||||
Go
|
||||
-- 查找最高分同学的no, cno, degree
|
||||
select * from score where degree = (select max(degree) from score);
|
||||
Go
|
||||
-- 查找和李军同学同性别,同班级的所有学生的姓名
|
||||
select name from student
|
||||
where sex=(select sex from student where name=N'李军')
|
||||
and class=(select class from student where name=N'李军');
|
||||
except select name from student where name=N'李军';
|
||||
Go
|
||||
5
Homework/Homework250403/1.txt
Normal file
5
Homework/Homework250403/1.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
1. 数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
|
||||
4. 用户身份鉴别、多层存取控制、审计、视图和数据加密等。
|
||||
用户身份鉴别方法有静态口令鉴别、动态口令鉴别、生物特征鉴别、智能卡鉴别。
|
||||
存取控制包括定义用户权限和合法权限检查两部分。
|
||||
数据加密主要包括存储加密和传输加密。
|
||||
46
Homework/Homework250403/Q6.sql
Normal file
46
Homework/Homework250403/Q6.sql
Normal file
@@ -0,0 +1,46 @@
|
||||
-- 初始化
|
||||
USE Homework250403;
|
||||
Go
|
||||
CREATE SCHEMA Q6;
|
||||
Go
|
||||
CREATE TABLE Q6.学生(
|
||||
学号 CHAR(10) PRIMARY KEY,
|
||||
姓名 NVARCHAR(20) NOT NULL,
|
||||
年龄 INT,
|
||||
性别 CHAR(1),
|
||||
家庭住址 NVARCHAR(100),
|
||||
班级号 CHAR(10) NOT NULL
|
||||
);
|
||||
Go
|
||||
CREATE TABLE Q6.班级(
|
||||
班级号 CHAR(10) PRIMARY KEY,
|
||||
班级名 NVARCHAR(20) NOT NULL,
|
||||
班主任 NVARCHAR(20),
|
||||
班长 NVARCHAR(20)
|
||||
);
|
||||
Go
|
||||
CREATE LOGIN U1 WITH PASSWORD = 'Password123!';
|
||||
CREATE LOGIN U2 WITH PASSWORD = 'Password123!';
|
||||
CREATE USER U1 FOR LOGIN U1;
|
||||
CREATE USER U2 FOR LOGIN U2;
|
||||
CREATE ROLE R1;
|
||||
Go
|
||||
|
||||
-- 1. 授予用户U1对两个表的所有权限,并可给其他用户授权
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON Q6.学生 TO U1 WITH GRANT OPTION;
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON Q6.班级 TO U1 WITH GRANT OPTION;
|
||||
Go
|
||||
-- 2. 授予用户U2对学生表具有查看权限,对家庭住址具有更新权限
|
||||
GRANT SELECT ON Q6.学生 TO U2;
|
||||
GRANT UPDATE (家庭住址) ON Q6.学生 TO U2;
|
||||
Go
|
||||
-- 3. 将对班级表查看权限授予所有用户
|
||||
GRANT SELECT ON Q6.班级 TO PUBLIC;
|
||||
Go
|
||||
-- 4. 将对学生表的查询、更新权限授予角色R1
|
||||
GRANT SELECT, UPDATE ON Q6.学生 TO R1;
|
||||
Go
|
||||
-- 5. 将角色R1授予用户U1,并且U1可继续授权给其他角色
|
||||
ALTER ROLE R1 ADD MEMBER U1;
|
||||
GRANT CONTROL ON ROLE::R1 TO U1;
|
||||
Go
|
||||
72
Homework/Homework250403/Q7.sql
Normal file
72
Homework/Homework250403/Q7.sql
Normal file
@@ -0,0 +1,72 @@
|
||||
-- 初始化
|
||||
USE Homework250403;
|
||||
Go
|
||||
CREATE SCHEMA Q7;
|
||||
Go
|
||||
CREATE TABLE Q7.职工 (
|
||||
职工号 VARCHAR(10) PRIMARY KEY,
|
||||
姓名 VARCHAR(20) NOT NULL,
|
||||
年龄 INT,
|
||||
职务 VARCHAR(20),
|
||||
工资 DECIMAL(10, 2),
|
||||
部门号 VARCHAR(10)
|
||||
);
|
||||
CREATE TABLE Q7.部门 (
|
||||
部门号 VARCHAR(10) PRIMARY KEY,
|
||||
名称 VARCHAR(50) NOT NULL,
|
||||
经理名 VARCHAR(20),
|
||||
地址 VARCHAR(100),
|
||||
电话号 VARCHAR(20)
|
||||
);
|
||||
ALTER TABLE Q7.职工
|
||||
ADD CONSTRAINT FK_职工_部门 FOREIGN KEY (部门号) REFERENCES Q7.部门(部门号);
|
||||
Go
|
||||
CREATE LOGIN 王明 WITH PASSWORD = 'Password123!';
|
||||
CREATE USER 王明 FOR LOGIN 王明;
|
||||
CREATE LOGIN 李勇 WITH PASSWORD = 'Password123!';
|
||||
CREATE USER 李勇 FOR LOGIN 李勇;
|
||||
CREATE LOGIN 刘星 WITH PASSWORD = 'Password123!';
|
||||
CREATE USER 刘星 FOR LOGIN 刘星;
|
||||
CREATE LOGIN 张新 WITH PASSWORD = 'Password123!';
|
||||
CREATE USER 张新 FOR LOGIN 张新;
|
||||
CREATE LOGIN 周平 WITH PASSWORD = 'Password123!';
|
||||
CREATE USER 周平 FOR LOGIN 周平;
|
||||
CREATE LOGIN 杨兰 WITH PASSWORD = 'Password123!';
|
||||
CREATE USER 杨兰 FOR LOGIN 杨兰;
|
||||
Go
|
||||
|
||||
-- 1. 用户王明对两个表有SELECT权限
|
||||
GRANT SELECT ON Q7.职工 TO 王明;
|
||||
GRANT SELECT ON Q7.部门 TO 王明;
|
||||
Go
|
||||
-- 2. 用户李勇对两个表有INSERT和DELETE权限
|
||||
GRANT INSERT, DELETE ON Q7.职工 TO 李勇;
|
||||
GRANT INSERT, DELETE ON Q7.部门 TO 李勇;
|
||||
Go
|
||||
-- 3. 每个职工只对自己的记录有SELECT权限
|
||||
CREATE VIEW Q7.职工个人视图 AS
|
||||
SELECT 职工号, 姓名, 年龄, 职务, 工资, 部门号
|
||||
FROM Q7.职工
|
||||
WHERE 姓名 = CURRENT_USER;
|
||||
Go
|
||||
GRANT SELECT ON Q7.职工个人视图 TO PUBLIC;
|
||||
Go
|
||||
-- 4. 用户刘星对职工表有SELECT权限,对工资字段具有更新权限
|
||||
GRANT SELECT ON Q7.职工 TO 刘星;
|
||||
GRANT UPDATE (工资) ON Q7.职工 TO 刘星;
|
||||
Go
|
||||
-- 5. 用户张新具有修改这两个表的结构的权限
|
||||
GRANT ALTER ON SCHEMA::Q7 TO 张新;
|
||||
Go
|
||||
-- 6. 用户周平具有对两个表的所有权限,并具有给其他用户授权的权限
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON Q7.职工 TO 周平 WITH GRANT OPTION;
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON Q7.部门 TO 周平 WITH GRANT OPTION;
|
||||
Go
|
||||
-- 7. 用户杨兰具有从每个部门职工中SELECT的权限
|
||||
CREATE VIEW Q7.部门职工视图 AS
|
||||
SELECT 职.*, 部.名称 AS 部门名称
|
||||
FROM Q7.职工 职
|
||||
JOIN Q7.部门 部 ON 职.部门号 = 部.部门号;
|
||||
Go
|
||||
GRANT SELECT ON Q7.部门职工视图 TO 杨兰;
|
||||
Go
|
||||
2
Homework/Homework250410/1.txt
Normal file
2
Homework/Homework250410/1.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
1. 数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实世界语义、反应当前实际状况的;数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。
|
||||
4. 提供定义完整性约束条件的机制、提供完整性检查的方法、进行违约处理
|
||||
25
Homework/Homework250410/Q6.sql
Normal file
25
Homework/Homework250410/Q6.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
USE Homework250410;
|
||||
Go
|
||||
CREATE TABLE 部门
|
||||
(
|
||||
部门号 INT NOT NULL,
|
||||
名称 NVARCHAR(50) NOT NULL,
|
||||
经理名 NVARCHAR(30),
|
||||
电话 VARCHAR(20),
|
||||
CONSTRAINT PK_部门 PRIMARY KEY (部门号)
|
||||
);
|
||||
CREATE TABLE 职工
|
||||
(
|
||||
职工号 INT NOT NULL,
|
||||
姓名 NVARCHAR(30) NOT NULL,
|
||||
年龄 INT,
|
||||
职务 NVARCHAR(50),
|
||||
工资 DECIMAL(10, 2),
|
||||
部门号 INT,
|
||||
|
||||
CONSTRAINT PK_职工 PRIMARY KEY (职工号),
|
||||
CONSTRAINT FK_职工_部门 FOREIGN KEY (部门号)
|
||||
REFERENCES 部门 (部门号),
|
||||
CONSTRAINT CK_职工_年龄 CHECK (年龄 <= 60)
|
||||
);
|
||||
Go
|
||||
37
Homework/Homework250417/Work1.sql
Normal file
37
Homework/Homework250417/Work1.sql
Normal file
@@ -0,0 +1,37 @@
|
||||
Use Homework250417
|
||||
Go
|
||||
CREATE TABLE Employee(
|
||||
EmployeeID INT PRIMARY KEY,
|
||||
Name NVARCHAR(20),
|
||||
Age INT,
|
||||
Salary INT,
|
||||
);
|
||||
Go
|
||||
/* 删除员工表信息时,如果员工个数<5,不允许删除员工信息,
|
||||
记录下企图删除员工信息的行为 */
|
||||
CREATE TABLE DelEmployeeAttempt(
|
||||
AttemptID INT PRIMARY KEY IDENTITY(1,1),
|
||||
EmployeeID INT,
|
||||
AttemptTime DATETIME DEFAULT GETDATE(),
|
||||
);
|
||||
Go
|
||||
CREATE TRIGGER trg_DelEmployee
|
||||
ON Employee
|
||||
INSTEAD OF DELETE
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @EmployeeCount INT;
|
||||
SELECT @EmployeeCount = COUNT(*) FROM Employee;
|
||||
IF @EmployeeCount < 5
|
||||
BEGIN
|
||||
INSERT INTO DelEmployeeAttempt (EmployeeID)
|
||||
SELECT EmployeeID FROM DELETED;
|
||||
RAISERROR(N'少于5名员工,无法删除', 16, 1);
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
DELETE FROM Employee WHERE EmployeeID IN (SELECT EmployeeID FROM DELETED);
|
||||
PRINT(N'删除员工信息成功');
|
||||
END
|
||||
END;
|
||||
Go
|
||||
56
Homework/Homework250417/Work2.sql
Normal file
56
Homework/Homework250417/Work2.sql
Normal file
@@ -0,0 +1,56 @@
|
||||
USE Homework250417
|
||||
Go
|
||||
/* 某公司想举行一个小型的联谊会,关系Male记录注册的男宾信息,关系Female记录注册的女宾信息。
|
||||
建立一个触发器,将来宾的人数现在在50人以内。 */
|
||||
CREATE TABLE Male(
|
||||
ID INT PRIMARY KEY IDENTITY(1,1),
|
||||
Name NVARCHAR(20) NOT NULL,
|
||||
);
|
||||
CREATE TABLE Female(
|
||||
ID INT PRIMARY KEY IDENTITY(1,1),
|
||||
Name NVARCHAR(20) NOT NULL,
|
||||
);
|
||||
Go
|
||||
CREATE TRIGGER trg_LimitGuestCount_Male
|
||||
ON Male
|
||||
INSTEAD OF INSERT
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @MaleCount INT;
|
||||
DECLARE @FemaleCount INT;
|
||||
DECLARE @TotalCount INT;
|
||||
SELECT @MaleCount = COUNT(*) FROM Male;
|
||||
SELECT @FemaleCount = COUNT(*) FROM Female;
|
||||
SET @TotalCount = @MaleCount + @FemaleCount;
|
||||
IF @TotalCount >= 50
|
||||
RAISERROR(N'宾客人数已满,无法添加更多男宾', 16, 1)
|
||||
ELSE
|
||||
BEGIN
|
||||
INSERT INTO Male (Name)
|
||||
SELECT Name FROM INSERTED;
|
||||
PRINT(N'添加男宾信息成功');
|
||||
END
|
||||
END;
|
||||
Go
|
||||
CREATE TRIGGER trg_LimitGuestCount_Female
|
||||
ON Female
|
||||
INSTEAD OF INSERT
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @MaleCount INT;
|
||||
DECLARE @FemaleCount INT;
|
||||
DECLARE @TotalCount INT;
|
||||
SELECT @MaleCount = COUNT(*) FROM Male;
|
||||
SELECT @FemaleCount = COUNT(*) FROM Female;
|
||||
SET @TotalCount = @MaleCount + @FemaleCount;
|
||||
IF @TotalCount >= 50
|
||||
RAISERROR(N'宾客人数已满,无法添加更多女宾', 16, 1)
|
||||
ELSE
|
||||
BEGIN
|
||||
INSERT INTO Female (Name)
|
||||
SELECT Name FROM INSERTED;
|
||||
PRINT(N'添加女宾信息成功');
|
||||
END
|
||||
END;
|
||||
Go
|
||||
-- Test
|
||||
BIN
Homework/Homework250508/1.docx
Normal file
BIN
Homework/Homework250508/1.docx
Normal file
Binary file not shown.
BIN
Homework/Homework250512/1.docx
Normal file
BIN
Homework/Homework250512/1.docx
Normal file
Binary file not shown.
24
Homework/Homework250515/CreateTable.sql
Normal file
24
Homework/Homework250515/CreateTable.sql
Normal file
@@ -0,0 +1,24 @@
|
||||
CREATE TABLE Student(
|
||||
Sno CHAR(8) PRIMARY KEY,
|
||||
Sname NVARCHAR(20) NOT NULL,
|
||||
Ssex CHAR(2),
|
||||
Sage INT,
|
||||
Sddpt NVARCHAR(20),
|
||||
);
|
||||
|
||||
CREATE TABLE Course(
|
||||
Cno CHAR(8) PRIMARY KEY,
|
||||
Cname NVARCHAR(20) NOT NULL,
|
||||
Cpno CHAR(8),
|
||||
Ccredit INT,
|
||||
);
|
||||
|
||||
CREATE TABLE SC(
|
||||
Sno CHAR(8),
|
||||
Cno CHAR(8),
|
||||
Grade INT,
|
||||
Class CHAR(1),
|
||||
PRIMARY KEY (Sno, Cno),
|
||||
FOREIGN KEY (Sno) REFERENCES Student(Sno),
|
||||
FOREIGN KEY (Cno) REFERENCES Course(Cno)
|
||||
);
|
||||
63
Homework/Homework250515/Homework250515.sql
Normal file
63
Homework/Homework250515/Homework250515.sql
Normal file
@@ -0,0 +1,63 @@
|
||||
-- 1. 统计离散数学的成绩分布情况,即按照各分数段统计人数
|
||||
CREATE PROCEDURE sp_GetDiscreteMathGradeDistribution
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @CourseName NVARCHAR(20) = N'离散数学';
|
||||
DECLARE @TargetCno CHAR(8);
|
||||
SELECT @TargetCno = Cno
|
||||
FROM Course
|
||||
WHERE Cname = @CourseName;
|
||||
SELECT GradeCategory AS N'成绩段',
|
||||
COUNT(*) AS N'人数'
|
||||
FROM (SELECT CASE
|
||||
WHEN Grade >= 90 AND Grade <= 100 THEN N'90-100 (优秀)'
|
||||
WHEN Grade >= 80 AND Grade < 90 THEN N'80-89 (良好)'
|
||||
WHEN Grade >= 70 AND Grade < 80 THEN N'70-79 (中等)'
|
||||
WHEN Grade >= 60 AND Grade < 70 THEN N'60-69 (及格)'
|
||||
WHEN Grade >= 0 AND Grade < 60 THEN N'<60 (不及格)'
|
||||
END AS GradeCategory
|
||||
FROM SC
|
||||
WHERE Cno = @TargetCno) AS GradeDistribution
|
||||
GROUP BY GradeCategory
|
||||
ORDER BY CASE GradeCategory
|
||||
WHEN N'90-100 (优秀)' THEN 1
|
||||
WHEN N'80-89 (良好)' THEN 2
|
||||
WHEN N'70-79 (中等)' THEN 3
|
||||
WHEN N'60-69 (及格)' THEN 4
|
||||
WHEN N'<60 (不及格)' THEN 5
|
||||
END;
|
||||
END;
|
||||
Go
|
||||
|
||||
-- 2. 统计任意一门课的平均成绩
|
||||
CREATE FUNCTION fn_GetAverageCourseGrade(@InputCno CHAR(8))
|
||||
RETURNS DECIMAL(5, 2)
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @AverageGrade DECIMAL(5, 2);
|
||||
SELECT @AverageGrade = AVG(CAST(Grade AS DECIMAL(5, 2)))
|
||||
FROM SC
|
||||
WHERE Cno = @InputCno
|
||||
AND Grade IS NOT NULL;
|
||||
RETURN @AverageGrade;
|
||||
END;
|
||||
Go
|
||||
|
||||
-- 3. 将学生选课成绩从百分制改为等级制(即A、B、C、D、E)
|
||||
CREATE PROCEDURE sp_UpdateSCGradeToClass
|
||||
AS
|
||||
BEGIN
|
||||
BEGIN TRANSACTION;
|
||||
UPDATE SC
|
||||
SET Class =
|
||||
CASE
|
||||
WHEN Grade >= 90 AND Grade <= 100 THEN 'A'
|
||||
WHEN Grade >= 80 AND Grade < 90 THEN 'B'
|
||||
WHEN Grade >= 70 AND Grade < 80 THEN 'C'
|
||||
WHEN Grade >= 60 AND Grade < 70 THEN 'D'
|
||||
WHEN Grade >= 0 AND Grade < 60 THEN 'E'
|
||||
END
|
||||
WHERE Grade IS NOT NULL;
|
||||
COMMIT TRANSACTION;
|
||||
END;
|
||||
Go
|
||||
Reference in New Issue
Block a user