问题描述:

本题用到下面三个关系表:

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

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)

MySQL查询一周借阅最多的书_SQL中的借书经典案例相关推荐

  1. mysql查询某个字段数量最多_查询一个表某个字段中出现次数最多的那个数据的前30名...

    MySQL查询重复出现次数最多的记录 chengxuyonghu关注0人评论3400人阅读2014-09-22 16:57:06 MySQL查询的方法很多,下面为您介绍的MySQL查询语句用于实现查询 ...

  2. 计算机课程设计之图书借阅小程序-图书馆借阅管理小程序代码-校园图书馆借书还书小程序

    计算机课程设计之图书借阅小程序-图书馆借阅管理小程序代码-校园图书馆借书还书小程序 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 框架:SSM(Spring ...

  3. MySQL查询重复出现次数最多的记录

    MySQL查询的方法很多,下面为您介绍的MySQL查询语句用于实现查询重复出现次数最多的记录,对于学习MySQL查询有很好的帮助作用. 在有些应用里面,我们需要查询重复次数最多的一些记录,虽然这是一个 ...

  4. [已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题

    前言 今天又遇到很坑的问题了,因为外国友人每一周的起始日期是周日,跟我们的不一样,我们每一周的起始日期是星期一,这样导致我要用mysql统计一周的数据的时候,对于我们来说,查询的记录包括:上周日的记录 ...

  5. python最厚的书_中年读者借书最多、PYTHON热搜第一……“图书馆之城”阅读报告出炉...

    在第25个"4·23"世界读书日来临之际,深圳图书情报学会和深圳图书馆联合发布了<2020年深圳"图书馆之城"阅读报告>,连续第四年向深圳市民派发过 ...

  6. mysql查询前5条记录_各个数据库中,查询前n条记录的方法

    SQL查询前10条的方法为: 1.select top X *  from table_name --查询前X条记录,可以改成需要的数字,比如前10条. 2.select top X *  from  ...

  7. 如何在mysql查询结果集中得到记录行号_MySQL中在查询结果集中得到记录行号的方法...

    如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数. Oracle 中可以使用标准 ...

  8. book类 借书 java_java学习之借书系统

    实现的图书借阅系统要处理用户输入的非法参数,并引导用户正确使用 测试结果: 主要目的就是练习异常处理中的Exception类的使用 使用的相关语法 1 try{2 //可能产生异常的代码块 3 }ca ...

  9. mysql查询一周内数据并分组_mysql 统计本周7天的数据并分组

    今天写到项目的一个数据展示模块,最终要呈现的效果是用柱状图显示本周七天的访客数量,所以要给前端本周7天的数据 比如今天是周二(实际上也是),我们要给前端周一周二的数据,后面周三到周日因为还没到,数据置 ...

最新文章

  1. redis 支持 json_项目开发中如何使用redis-dump进行Redis数据库合并?
  2. C#中的“收益率突破”是什么?
  3. 怎么把python结果全部显示-python 显示数组全部元素的方法
  4. 在linux下安装配置DNS服务器
  5. mysql安装教程8.0.22_mysql 8.0.22 安装配置方法图文教程
  6. 后台备份20080917
  7. ref out 关键字用法与区别详解
  8. leetcode------Flatten Binary Tree to Linked List
  9. Android的Bundle传递数据的使用
  10. XAMPP端口更改后 httpd-vhosts.conf 文件配置
  11. 第三方应用软件检测实验室质量管理体系需要符合哪些要求?
  12. AIDA64内存与缓存测试过了算稳定吗_KLEVV BLOT XR DDR4内存:锐龙平台兼容性测试
  13. 用计算机能算重量加权平均长度吗,利用计算器求平均数检测试题与*
  14. Maxwell 16.0 (64-bit) 软件卸载_Win7系统
  15. 求助应用Netlogo做交通出行方式选择仿真
  16. 分布式执行框架——Ray简单使用
  17. Windows10专业版1803_64位2018.11(装机版)
  18. CityEngine使用GIS模板创造三维数字城市(二)
  19. 项目 cg day05
  20. 【精益创业入门】什么是精益创业?

热门文章

  1. 【原】为DevExpress的ChartControl添加Y轴控制 和 GridControl中指定列添加超级链接
  2. php imagettftext 水印 粗体
  3. XP登录时提示“无法加载配置文件,找不到指定文件”
  4. 数据库 sqlite order by对结果集进行排序
  5. python3 sys.stdout.write print 区别
  6. easyui datagrid onLoadSuccess方法 正确使用
  7. python3 selenium 无头浏览器 无界面 chromedriver
  8. linux alpine 中telnet转移至busybox-extras
  9. linux ssh -R 代理不同内网主机互连
  10. 错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”