问题描述:
本题用到下面三个关系表:
CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级
BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数
BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期
备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。
要求实现如下15个处理:
1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。
2. 找出借书超过5本的读者,输出借书卡号及所借图书册数。
3. 查询借阅了"水浒"一书的读者,输出姓名及班级。
4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。
5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者。
6. 查询现有图书中价格最高的图书,输出书名及作者。
7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。
8. 将"C01"班同学所借图书的还期都延长一周。
9. 从BOOKS表中删除当前无人借阅的图书记录。
10.如果经常按书名查询图书信息,请建立合适的索引。
11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。
12.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)。
13.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。
14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。
15.对CARD表做如下修改:
a. 将NAME最大列宽增加到10个字符(假定原为6个字符)。
b. 为该表增加1列NAME(系名),可变长,最大20个字符。
1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束
--实现代码:
CREATE TABLE BORROW(
CNO int FOREIGN KEY REFERENCES CARD(CNO),
BNO int FOREIGN KEY REFERENCES BOOKS(BNO),
RDATE datetime,
PRIMARY KEY(CNO,BNO))
2. 找出借书超过5本的读者,输出借书卡号及所借图书册数
--实现代码:
SELECT CNO,借图书册数=COUNT(*)
FROM BORROW
GROUP BY CNO
HAVING COUNT(*)>5
3. 查询借阅了"水浒"一书的读者,输出姓名及班级
--实现代码:
SELECT * FROM CARD c
WHERE EXISTS(
SELECT * FROM BORROW a,BOOKS b
WHERE a.BNO=b.BNO
AND b.BNAME=N'水浒'
AND a.CNO=c.CNO)
4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期
--实现代码:
SELECT * FROM BORROW
WHERE RDATE<GETDATE()
5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者
--实现代码:
SELECT BNO,BNAME,AUTHOR FROM BOOKS
WHERE BNAME LIKE N'%网络%'
6. 查询现有图书中价格最高的图书,输出书名及作者
--实现代码:
SELECT BNO,BNAME,AUTHOR FROM BOOKS
WHERE PRICE=(
SELECT MAX(PRICE) FROM BOOKS)
7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出
--实现代码:
SELECT a.CNO
FROM BORROW a,BOOKS b
WHERE a.BNO=b.BNO AND b.BNAME=N'计算方法'
AND NOT EXISTS(
SELECT * FROM BORROW aa,BOOKS bb
WHERE aa.BNO=bb.BNO
AND bb.BNAME=N'计算方法习题集'
AND aa.CNO=a.CNO)
ORDER BY a.CNO DESC
8. 将"C01"班同学所借图书的还期都延长一周
--实现代码:
UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE)
FROM CARD a,BORROW b
WHERE a.CNO=b.CNO
AND a.CLASS=N'C01'
9. 从BOOKS表中删除当前无人借阅的图书记录
--实现代码:
DELETE A FROM BOOKS a
WHERE NOT EXISTS(
SELECT * FROM BORROW
WHERE BNO=a.BNO)
10. 如果经常按书名查询图书信息,请建立合适的索引
--实现代码:
CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)
11. 在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)
--实现代码:
CREATE TRIGGER TR_SAVE ON BORROW
FOR INSERT,UPDATE
AS
IF @@ROWCOUNT>0
INSERT BORROW_SAVE SELECT i.*
FROM INSERTED i,BOOKS b
WHERE i.BNO=b.BNO
AND b.BNAME=N'数据库技术及应用'
12. 建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)
--实现代码:
CREATE VIEW V_VIEW
AS
SELECT a.NAME,b.BNAME
FROM BORROW ab,CARD a,BOOKS b
WHERE ab.CNO=a.CNO
AND ab.BNO=b.BNO
AND a.CLASS=N'力01'
13. 查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出
--实现代码:
SELECT a.CNO
FROM BORROW a,BOOKS b
WHERE a.BNO=b.BNO
AND b.BNAME IN(N'计算方法',N'组合数学')
GROUP BY a.CNO
HAVING COUNT(*)=2
ORDER BY a.CNO DESC
14. 假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句
--实现代码:
ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)
15.1 将NAME最大列宽增加到10个字符(假定原为6个字符)
--实现代码:
ALTER TABLE CARD ALTER COLUMN NAME varchar(10)
15.2 为该表增加1列NAME(系名),可变长,最大20个字符
--实现代码:
ALTER TABLE CARD ADD 系名 varchar(20)
分享到:
相关推荐
### 使用简单恢复模式对SQL Server数据库进行收缩 在SQL Server中,随着业务的增长与时间的推移,数据库文件(.mdf)和日志文件(.ldf)可能会变得非常庞大,即使数据库中的实际数据量并没有那么大。在这种情况下,...
这个名为"简单sql语句.rar"的压缩包显然包含了关于SQL基础学习的资料,特别是针对初学者的教程。主要文件有"简单sql语句.txt",很可能是对SQL基本概念、语法和操作的详细介绍;而"下载说明.txt"可能是指导用户如何...
一、SQL server 游标的简单使用 一个对表进行操作的T-SQL语句通常都可产生或处理一组记录,但是许多应用程序,尤其是T-SQL嵌入的主语言,通常不能把整个结果集作为一个单元来处理,这些应用程序就需要用一种机制来...
在这个名为"简单的SQL练习"的资源中,你将找到一系列有助于增强SQL理解与应用能力的题目,特别适合那些希望在ORACLE数据库环境下磨练自己SQL技巧的人。 首先,让我们深入了解SQL的基本概念。SQL包括数据查询、数据...
《简单SQL管理工具详解》 在信息技术领域,数据库管理是一项至关重要的任务,特别是对于SQL Server 2000这样的大型关系型数据库系统。为了简化这一过程,开发者们常常利用各种工具来提高效率,其中“简单SQL管理...
本资源"Sql.rar_VC++ SQL _简单sql"显然提供了使用VC++连接SQL数据库的一个简单示例,这对于初学者或需要快速理解如何在C++项目中操作数据库的开发者来说非常有用。 首先,我们需要了解VC++如何与SQL数据库交互。...
│ └ 存储过程-创建(SSM方式和SQL方式).mp4 ├ 安装 │ │ 单独安装SSMS(SQL Server管理器).mp4 │ │ 安装JRE环境.mp4 │ └ 安装SQL2016.mp4 ├ 数据库操作 │ │ 修改数据库(SQL).mp4 │ │ 修改数据库...
《ACCESS SQL使用大全》涵盖了ACCESS数据库管理系统的SQL(Structured Query Language)使用方法,这是一门强大的数据查询和管理工具。SQL在ACCESS中的应用是数据库设计和管理的核心,无论是初学者还是经验丰富的...
SQLCreator是一个简单的Java SQL生成器,专为初学者和学习者设计,旨在简化数据库操作中的SQL语句编写。它利用了Java的注解和反射技术,使得开发者无需手动编写大量SQL语句,即可实现对数据库的增、删、查、改操作。...
本资料“简单实用的SQL语句大全”旨在为初学者提供一个全面且易懂的SQL学习指南,涵盖了基本语法、函数、操作以及高级查询技巧。 1. **SQL基础** - **数据类型**:SQL支持多种数据类型,如整数(INT)、浮点数...
在数据库编程中,我们通常使用PL/SQL(Oracle)、T-SQL(Microsoft SQL Server)或存储过程(MySQL)来实现循环结构。本话题将详细讲解一个简单的SQL循环语句脚本及其相关知识。 一、SQL循环语句概述 SQL循环语句...
SQL简单入门语句建立表; SQL简单入门语句建立表, SQL简单入门语句建立表
### Sqldbx 使用方法详解 #### 一、概述 SqlDbx是一款专为数据库管理和SQL开发设计的强大集成开发环境(IDE)。它主要面向在不同数据库环境中工作的应用开发者。SqlDbx具备高性能、易于使用的特点,并支持多种主流...
这意味着对于相同的SQL结构,只需要解析一次,后续使用相同的SQL结构时可以直接使用缓存的执行计划,从而提高执行效率。 - **共享SQL语句**:为了提高性能,Oracle会将解析后的SQL语句及其执行计划存储在共享池中...
而"简单的SQL连接客户端"则是一个专为用户设计的轻量级应用,旨在帮助用户方便地连接到SQL Server数据库进行相关操作。下面将详细介绍SQL连接客户端的相关知识点。 首先,SQL连接客户端是数据库管理员、开发人员和...
SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言,它被广泛应用于数据查询、更新、...这个简单的教程将引导你逐步探索SQL的世界,通过实例学习和实践,你将能够高效地处理各种数据问题。
一些简单的SQL应用,比如简单的查询,修改,增加和删除。基本的操作!很是实用。
SqlBuild 不仅可以生成简单的 SQL 文,还可以生成复杂的 SQL 文,包括嵌套子查询等。用户可以在编辑部分写更复杂的 SQL 文,然后点击“Get JAVA Source”按钮生成整理好的 JAVA 代码。 四、生成带有注释的 SQL 文 ...