SQL Server 实践题库:借阅管理系统设计与实现
需积分: 10 177 浏览量
更新于2025-01-05
收藏 34KB DOC 举报
SQL Server 练习题3
本资源摘要信息将围绕 SQL Server 练习题3,涵盖了十五个处理,包括建立BORROW表、查询借书超过5本的读者、查询借阅了"水浒"一书的读者、查询过期未还图书、查询书名包括"网络"关键词的图书等多个方面的知识点。
1. 建立BORROW表
创建BORROW表的SQL语句如下所示:
```sql
CREATE TABLE BORROW (
CNO INT,
BNO INT,
RDATE DATE,
PRIMARY KEY (CNO, BNO),
FOREIGN KEY (CNO) REFERENCES CARD(CNO),
FOREIGN KEY (BNO) REFERENCES BOOKS(BNO)
);
```
这个表的主码是(CNO, BNO),它组合了借书卡号和书号。同时,这个表还定义了两个外键,分别引用CARD表的CNO列和BOOKS表的BNO列,以确保借书记录的完整性。
2. 找出借书超过5本的读者
为了找出借书超过5本的读者,可以使用以下SQL语句:
```sql
SELECT CNO, COUNT(*) AS BorrowCount
FROM BORROW
GROUP BY CNO
HAVING COUNT(*) > 5;
```
这个语句使用了GROUP BY子句对借书记录进行分组,然后使用HAVING子句来过滤出借书超过5本的读者。
3. 查询借阅了"水浒"一书的读者
要查询借阅了"水浒"一书的读者,可以使用以下SQL语句:
```sql
SELECT C.NAME, C.CLASS
FROM CARD C
JOIN BORROW B ON C.CNO = B.CNO
JOIN BOOKS BK ON B.BNO = BK.BNO
WHERE BK.BNAME = '水浒';
```
这个语句使用了JOIN子句来连接CARD、BORROW和BOOKS三个表,然后使用WHERE子句来过滤出借阅了"水浒"一书的读者。
4. 查询过期未还图书
要查询过期未还图书,可以使用以下SQL语句:
```sql
SELECT B.CNO, B.BNO, B.RDATE
FROM BORROW B
WHERE B.RDATE < GETDATE();
```
这个语句使用了WHERE子句来过滤出过期未还图书。
5. 查询书名包括"网络"关键词的图书
要查询书名包括"网络"关键词的图书,可以使用以下SQL语句:
```sql
SELECT BNO, BNAME, AUTHOR
FROM BOOKS
WHERE BNAME LIKE '%网络%';
```
这个语句使用了LIKE子句来过滤出书名包括"网络"关键词的图书。
6. 查询现有图书中价格最高的图书
要查询现有图书中价格最高的图书,可以使用以下SQL语句:
```sql
SELECT TOP 1 BNAME, AUTHOR
FROM BOOKS
ORDER BY PRICE DESC;
```
这个语句使用了ORDER BY子句来对图书按照价格进行排序,然后使用TOP子句来选择最高价格的图书。
7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者
要查询当前借了"计算方法"但没有借"计算方法习题集"的读者,可以使用以下SQL语句:
```sql
SELECT CNO
FROM BORROW
WHERE BNO IN (
SELECT BNO
FROM BOOKS
WHERE BNAME = '计算方法'
)
AND CNO NOT IN (
SELECT BNO
FROM BOOKS
WHERE BNAME = '计算方法习题集'
)
ORDER BY CNO DESC;
```
这个语句使用了IN子句和NOT IN子句来过滤出符合条件的读者,然后使用ORDER BY子句来对结果进行排序。
8. 将"C01"班同学所借图书的还期都延长一周
要将"C01"班同学所借图书的还期都延长一周,可以使用以下SQL语句:
```sql
UPDATE BORROW
SET RDATE = DATEADD(DAY, 7, RDATE)
FROM BORROW
JOIN CARD ON BORROW.CNO = CARD.CNO
WHERE CARD.CLASS = 'C01';
```
这个语句使用了UPDATE子句来更新BORROW表的RDATE列,然后使用JOIN子句来连接BORROW和CARD表,以便过滤出"C01"班同学所借图书。
9. 从BOOKS表中删除当前无人借阅的图书记录
要从BOOKS表中删除当前无人借阅的图书记录,可以使用以下SQL语句:
```sql
DELETE FROM BOOKS
WHERE BNO NOT IN (
SELECT BNO
FROM BORROW
);
```
这个语句使用了NOT IN子句来过滤出当前无人借阅的图书记录,然后使用DELETE子句来删除这些记录。
10. 如果经常按书名查询图书信息,请建立合适的索引
要建立合适的索引,可以使用以下SQL语句:
```sql
CREATE INDEX IX_BOOKS_BNAME ON BOOKS(BNAME);
```
这个语句使用了CREATE INDEX子句来建立索引,以便加速书名查询。
11. 在BORROW表上建立一个触发器
要在BORROW表上建立一个触发器,可以使用以下SQL语句:
```sql
CREATE TRIGGER TR_BORROW_ON_INSERT
ON BORROW
AFTER INSERT
AS
BEGIN
IF EXISTS (
SELECT 1
FROM inserted
WHERE BNAME = '数据库技术及应用'
)
BEGIN
INSERT INTO BORROW_SAVE (CNO, BNO, RDATE)
SELECT CNO, BNO, RDATE
FROM inserted;
END
END;
```
这个语句使用了CREATE TRIGGER子句来建立触发器,以便在读者借阅"数据库技术及应用"时保存借阅记录。
12. 建立一个视图
要建立一个视图,可以使用以下SQL语句:
```sql
CREATE VIEW VW_STUDENT_BORROW
AS
SELECT C.NAME, BK.BNAME
FROM CARD C
JOIN BORROW B ON C.CNO = B.CNO
JOIN BOOKS BK ON B.BNO = BK.BNO
WHERE C.CLASS = '力01';
```
这个语句使用了CREATE VIEW子句来建立视图,以便显示"力01"班学生的借书信息。
13. 查询当前同时借有"计算方法"和"组合数学"两本书的读者
要查询当前同时借有"计算方法"和"组合数学"两本书的读者,可以使用以下SQL语句:
```sql
SELECT CNO
FROM BORROW
WHERE BNO IN (
SELECT BNO
FROM BOOKS
WHERE BNAME IN ('计算方法', '组合数学')
)
GROUP BY CNO
HAVING COUNT(DISTINCT BNO) = 2
ORDER BY CNO ASC;
```
这个语句使用了IN子句和GROUP BY子句来过滤出符合条件的读者,然后使用HAVING子句来过滤出同时借有两本书的读者。
14. 为BOOKS表追加定义主码
要为BOOKS表追加定义主码,可以使用以下SQL语句:
```sql
ALTER TABLE BOOKS
ADD CONSTRAINT PK_BOOKS_BNO PRIMARY KEY (BNO);
```
这个语句使用了ALTER TABLE子句来追加定义主码。
15. 对CARD表做如下修改
要对CARD表做如下修改,可以使用以下SQL语句:
```sql
ALTER TABLE CARD
ALTER COLUMN NAME VARCHAR(10);
ALTER TABLE CARD
ADD COLUMN DEPT VARCHAR(20);
```
这个语句使用了ALTER TABLE子句来修改CARD表的NAME列和添加新的DEPT列。
775 浏览量
125 浏览量
631 浏览量
371 浏览量
2010-04-09 上传
2021-12-29 上传
2021-09-23 上传
179 浏览量
爱喝普洱
- 粉丝: 7
- 资源: 126
最新资源
- 由Python编写的翻译程序
- RunAll:这是一个仅使用本机Google Apps脚本(GAS)运行并发处理的库
- 扬州大学电能学院计算机控制课程设计.zip
- cloud-aws-firmware-ci-feature-runner-action:使用@ nordicsemiconductore2e-bdd-test-runner运行固件的功能文件
- SIR_TP_JPA_rest_jpa_servlet
- ffmpeg.rar
- 《“笨办法”学Python》的读书笔记和编程习题.zip
- 家庭财务管理系统vs版本(C++面向对象课程设计)_仓库管理系统课程设计C语言
- javascriptGoogleGeocodingTest:在Google Geocoding API上进行功能测试的测试项目
- cdkr:集成R和CDK
- 滚动动画演示
- Python and uses two iterative methods
- HashMask-crx插件
- 电信设备-一种太阳能热水器LIFI通信装置及工作方法.zip
- 微信小程序联系Demo:银行卡绑定
- :victory_hand: 一个基于弹簧物理的 React 动画库