SQL实验课代码汇总

前言

要期末考试了。
学校对数据库学习的安排SQL占了很大的一部分,实验课也全是SQL查询,足以说明SQL的重要性。
老师说SQL只考最基本的内容,只要实验课上的代码都没问题那考试也就没问题。
所以我现在根据我保存下来的实验课代码来进行复习,把各种不熟悉的知识点都过一遍,也留做以后重拾SQL的资料。

下面是6次实验课的代码以及知识点总结

--CREATE DATABASE TEXTBOOK;
USE TEXTBOOK;
CREATE TABLE T_STUDENT(
	NO_ID SMALLINT PRIMARY KEY,
	AGE SMALLINT NOT NULL,
	SEX CHAR(2) NOT NULL,
	DEPT CHAR(20) NOT NULL
);
CREATE TABLE T_PRESS(
	NO_ID SMALLINT PRIMARY KEY,
	P_NAME CHAR(20) NOT NULL,
	P_ADDRESS CHAR(40) NOT NULL
);
CREATE TABLE T_TEXTBOOK(
	NO_ID SMALLINT PRIMARY KEY,
	TITLE CHAR(20) NOT NULL,
	PRESS_NO SMALLINT NOT NULL,
	PRICE SMALLINT CHECK(PRICE >= 0) NOT NULL,
	FOREIGN KEY(PRESS_NO) REFERENCES T_PRESS(NO_ID)
);
CREATE TABLE T_BUY(
	S_NO SMALLINT,
	B_NO SMALLINT,
	AMOUNT SMALLINT CHECK(AMOUNT >= 0) NOT NULL,
	PRIMARY KEY (S_NO, B_NO),
	FOREIGN KEY (S_NO) REFERENCES T_STUDENT(NO_ID),
	FOREIGN KEY (B_NO) REFERENCES T_TEXTBOOK(NO_ID)
);

USE TEXTBOOK 
GO
SELECT NAME
FROM T_STUDENT
WHERE T_STUDENT.NO_ID IN (
	SELECT S_NO
	FROM T_BUY
	WHERE B_NO IN (
		SELECT NO_ID
		FROM T_TEXTBOOK
		WHERE PRESS_NO IN (
			SELECT NO_ID
			FROM T_PRESS
			WHERE P_NAME = '高教出版社'
		)
	)
)

USE TEXTBOOK 
GO
SELECT T_STUDENT.NAME
FROM T_STUDENT, T_PRESS, T_BUY, T_TEXTBOOK
WHERE 
T_STUDENT.NO_ID = T_BUY.S_NO AND
	T_TEXTBOOK.NO_ID = T_BUY.B_NO AND
	T_TEXTBOOK.PRESS_NO = T_PRESS.NO_ID AND
	T_PRESS.P_NAME = '高教出版社'


USE TEXTBOOK 
GO
SELECT T_TEXTBOOK.*
FROM T_TEXTBOOK
WHERE PRICE >= (
	SELECT MAX(PRICE)
	FROM T_TEXTBOOK
	WHERE PRESS_NO IN (
		SELECT NO_ID
		FROM T_PRESS
		WHERE P_NAME = '高教出版社'
	)
)

USE TEXTBOOK 
GO
SELECT T_STUDENT.NAME, T_TEXTBOOK.TITLE, T_TEXTBOOK.PRICE
FROM T_STUDENT, T_TEXTBOOK, T_BUY
WHERE
	T_STUDENT.NO_ID = T_BUY.S_NO AND
	T_TEXTBOOK.NO_ID = T_BUY.B_NO
SELECT T_STUDENT.NO_ID AS '学号', SUM(AMOUNT) AS '数量'
FROM T_STUDENT LEFT JOIN T_BUY ON T_STUDENT.NO_ID = T_BUY.S_NO
GROUP BY T_STUDENT.NO_ID


SELECT T_STUDENT.NO_ID AS '学号', SUM(PRICE*AMOUNT) AS '总价格'
FROM T_STUDENT LEFT JOIN 
			(T_BUY LEFT JOIN T_TEXTBOOK ON T_BUY.B_NO = T_TEXTBOOK.NO_ID) 
			ON T_STUDENT.NO_ID = T_BUY.S_NO
GROUP BY T_STUDENT.NO_ID


SELECT *
FROM T_TEXTBOOK
WHERE NO_ID IN (
	SELECT B_NO
	FROM T_BUY
	GROUP BY B_NO
	HAVING SUM(AMOUNT) >= 1000
)

--嵌套
SELECT *
FROM T_TEXTBOOK
WHERE NO_ID NOT IN(
	SELECT B_NO
	FROM T_BUY
	GROUP BY B_NO
	HAVING SUM(AMOUNT) > 0
)

--连接
SELECT T_TEXTBOOK.NO_ID, SUM(T_BUY.AMOUNT)
FROM T_TEXTBOOK LEFT JOIN T_BUY ON T_TEXTBOOK.NO_ID = T_BUY.B_NO
GROUP BY T_TEXTBOOK.NO_ID
HAVING SUM(T_BUY.AMOUNT) IS NULL

--组合
SELECT *
FROM T_TEXTBOOK
EXCEPT
SELECT *
FROM T_TEXTBOOK
WHERE NO_ID IN(
	SELECT B_NO
	FROM T_BUY
	GROUP BY B_NO
	HAVING SUM(AMOUNT) > 0
)



USE TEXTBOOK
--创建视图1
GO
CREATE VIEW FEE
AS
SELECT T_STUDENT.NAME AS '学号', SUM(PRICE*AMOUNT) AS '总价格'
FROM T_STUDENT LEFT JOIN 
			(T_BUY LEFT JOIN T_TEXTBOOK ON T_BUY.B_NO = T_TEXTBOOK.NO_ID) 
			ON T_STUDENT.NO_ID = T_BUY.S_NO
GROUP BY T_STUDENT.NAME, T_STUDENT.NO_ID

--创建视图2
DROP VIEW FEE
GO
CREATE VIEW FEE(NAME, COST)
AS
SELECT T_STUDENT.NAME, SUM(PRICE*AMOUNT)
FROM T_STUDENT LEFT JOIN 
			(T_BUY LEFT JOIN T_TEXTBOOK ON T_BUY.B_NO = T_TEXTBOOK.NO_ID) 
			ON T_STUDENT.NO_ID = T_BUY.S_NO
GROUP BY T_STUDENT.NAME, T_STUDENT.NO_ID

GO
SELECT *
FROM FEE

--观察变化
INSERT INTO T_BUY
VALUES(11588, 1101, 2)

GO
SELECT *
FROM FEE

--利用视图查询缴费最高的学生
SELECT NAME
FROM FEE
WHERE COST IN(
	SELECT MAX(COST)
	FROM FEE
) 
USE TEXTBOOK
GO
CREATE VIEW BUY_AMOUNTS(B_NO, AMOUNT) AS
SELECT B_NO, SUM(AMOUNT)
FROM T_BUY
GROUP BY B_NO

GO
CREATE TRIGGER STUDENT_INSERT
ON T_STUDENT
AFTER INSERT
AS
BEGIN
	--MAX_BOOK_NO
	DECLARE @MAX_BOOK_NO SMALLINT
	SELECT @MAX_BOOK_NO = B_NO
	FROM BUY_AMOUNTS
	WHERE AMOUNT = (
		SELECT MAX(AMOUNT)
		FROM BUY_AMOUNTS
	)
	--IN_SNO
	DECLARE @IN_SNO SMALLINT
	SELECT @IN_SNO = NO_ID FROM INSERTED
	--插入
	INSERT INTO T_BUY
	VALUES(@IN_SNO, @MAX_BOOK_NO, 1)
END

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值