ALTER TABLE 书目 ADD 出版年份 VARCHAR(100);

UPDATE 书目 SET 出版年份=‘2005’ WHERE ISBN=‘7040195836’;

UPDATE 书目 SET 出版年份=‘1983’ WHERE ISBN=‘9787508040110’;

UPDATE 书目 SET 出版年份=‘2008’ WHERE ISBN=‘9787506336239’;

UPDATE 书目 SET 出版年份=‘2009’ WHERE ISBN=‘9787010073750’;

COMMIT;

2、求总藏书量、藏书总金额、最高价、最低价。

SELECT COUNT(),SUM(单价),MAX(单价),MIN(单价)

FROM 书目,图书

WHERE 书目.ISBN=图书.ISBN;

3、列出藏书在5本以上的书目(书名、作者、出版社、出版年份)。

SELECT 书目.书名,书目.作者,书目.出版单位,书目.出版年份

FROM 书目

WHERE 书目.ISBN IN

(

SELECT 书目.ISBN

FROM 书目,图书

WHERE 书目.ISBN=图书.ISBN

GROUP BY 书目.ISBN

HAVING COUNT()>5

);

4、列出年份最久远的书?

SELECT *

FROM 书目

WHERE 书目.出版年份=

(

SELECT MAX(出版年份)

FROM 书目

);

5、 目前实际已借出多少册书?

SELECT COUNT()

FROM 图书

WHERE 图书.是否借出=‘是’;

6.、哪一年的图书最多?

SELECT 年份.出版年份

FROM

(

SELECT 书目.出版年份,COUNT(书目.出版年份) AS NUM

FROM 书目,图书

WHERE 书目.ISBN=图书.ISBN

GROUP BY 书目.出版年份

) 年份,

(

SELECT MAX(COUNT()) AS MAX

FROM 书目,图书

WHERE 书目.ISBN=图书.ISBN

GROUP BY 书目.出版年份

) 最多

WHERE 年份.NUM=最多.MAX;

7、 哪本借书证未归还的图书最多?

SELECT 统计.借书证号

FROM

(

SELECT MAX(COUNT(借阅.借书证号)) AS MAX

FROM 借阅

WHERE 借阅.归还日期 IS NULL

GROUP BY 借阅.借书证号

) 最多,

(

SELECT 借阅.借书证号,COUNT(借阅.借书证号) AS NUM

FROM 借阅

WHERE 借阅.归还日期 IS NULL

GROUP BY 借阅.借书证号

) 统计

WHERE 统计.NUM=最多.MAX;

8、平均每本借书证的借书册数。

SELECT SUM(借阅数.借阅_NUM/读者数.读者_NUM)

FROM

(

SELECT COUNT() AS 借阅_NUM

FROM 借阅

) 借阅数,

(

SELECT COUNT() AS 读者_NUM

FROM 读者

) 读者数;

9、哪个单位的读者平均借书册数最多?

SELECT 单位平均数.单位

FROM

(

SELECT 读者单位人数.单位,SUM(读者单位借书数.借书数/读者单位人数.人数) AS 平均数

FROM

(

SELECT 读者.单位,COUNT() AS 人数

FROM 读者

GROUP BY 读者.单位

) 读者单位人数,

(

SELECT 读者.单位,COUNT() AS 借书数

FROM 读者,借阅

WHERE 读者.借书证号=借阅.借书证号

GROUP BY 读者.单位

) 读者单位借书数

WHERE 读者单位人数.单位=读者单位借书数.单位

GROUP BY 读者单位人数.单位

) 单位平均数,

(

SELECT MAX(SUM(读者单位借书数.借书数/读者单位人数.人数)) AS 借书数

FROM

(

SELECT 读者.单位,COUNT() AS 人数

FROM 读者

GROUP BY 读者.单位

) 读者单位人数,

(

SELECT 读者.单位,COUNT() AS 借书数

FROM 读者,借阅

WHERE 读者.借书证号=借阅.借书证号

GROUP BY 读者.单位

) 读者单位借书数

WHERE 读者单位人数.单位=读者单位借书数.单位

GROUP BY 读者单位人数.单位

) 单位最多借书数

WHERE 单位平均数.平均数=单位最多借书数.借书数;

10、 最近两年都未被借过的书。

SELECT 图书.图书编号

FROM 图书

WHERE 图书.图书编号 NOT IN

(

SELECT 借阅.图书编号

FROM 借阅

WHERE MONTHS_BETWEEN(SYSDATE,借阅.借书日期)/12<=2

);

11、今年未借过书的借书证。

SELECT 读者.借书证号

FROM 读者

WHERE 读者.借书证号 NOT IN

(

SELECT 借阅.借书证号

FROM 借阅

WHERE 借阅.借书日期>

(

SELECT TRUNC(SYSDATE,‘YYYY’) FROM DUAL

)

);

出现的问题及解决方案:

1、无法调用派生表及聚集函数的列,解决方案:使用派生表中的列,需要给派生表取别名,才能在WHERE语句中调用,调用方法:别名.列名,如果子查询结果中使用了聚集函数,需要给聚集函数这列取别名,才能调用,调用时使用别名。表取别名不能用AS。

2、对15题,查询借阅了所有“文学”类书目的读者的姓名、单位,产生了错误的理解,题目的意思是查询到的读者要借阅了所有的文学类书,而不是借阅了文学类的书的读者有哪些,解决方案:

(1)方法一,双重否定表肯定,查询的读者不存在文学类的书没有借过

SELECT 读者.姓名,读者.单位

FROM 读者

WHERE NOT EXISTS

(

SELECT *

FROM 图书分类,书目

WHERE 图书分类.图书分类号=书目.图书分类号 AND 图书分类.类名=‘文学’ AND NOT EXISTS

(

SELECT *

FROM 借阅,图书

WHERE 借阅.图书编号=图书.图书编号 AND 借阅.借书证号=读者.借书证号 AND 书目.ISBN=图书.ISBN

)

);

(2)方法二,查询的读者借的文学类书的数目(去重同一借书证借同一ISBN的文学书后的数目)等于文学类书的数目

SELECT 读者.姓名,读者.单位

FROM 读者

WHERE 读者.借书证号 IN

(

SELECT 读者文学类借书.借书证号

FROM

(

SELECT 文学借书数.借书证号,COUNT() AS 读者文学类数借书数

FROM

(

SELECT 借阅.借书证号,图书.ISBN

FROM 借阅,图书分类,书目,图书

WHERE 借阅.图书编号=图书.图书编号 AND 图书.ISBN=书目.ISBN AND 书目.图书分类号=图书分类.图书分类号 AND 图书分类.类名=‘文学’

GROUP BY (借阅.借书证号,图书.ISBN)

) 文学借书数

GROUP BY 文学借书数.借书证号

) 读者文学类借书,

(

SELECT COUNT() AS 总数

FROM 图书分类,书目

WHERE 图书分类.图书分类号=书目.图书分类号 AND 图书分类.类名=‘文学’

) 文学类书总数

WHERE 读者文学类借书.读者文学类数借书数=文学类书总数.总数

);

3、ORACLE不支持使用DATEDIFF()函数计算时间差,解决方案:使用MONTHS_BETWEEN()方法来计算两个日期的月份之差,然后除以12,得到年份之差,就可以查询最近两年都未被借过的书了,MONTHS_BETWEEN()函数中的参数不能颠倒,否则会为负数。

4、怎么获取今年的第一天的日期?解决方案:使用TRUNC()函数将使用SYSDATE查询的日期从年份截去,就可以获取今年的第一天的日期,SELECT TRUNC(SYSDATE,‘YYYY’) FROM DUAL。

四、实验心得体会

通过本次实验熟练的掌握了查询的基本用法,对查询的嵌套有了更加深刻直观的认识,通过实验练习了一些难度较大的查询,对查询设计的思路更加清晰,知道该如何嵌套使用子查询以及怎样查询更清晰,不过也认识到了自己的不足,如15题,对于相关子查询掌握还不够好,思路不够清晰,理解不够透彻。

mysql查询2个isbn数据,数据库实验二 数据查询相关推荐

  1. MySQL数据库实验二 数据基本查询

    ★观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考,. 一.实验目的 1.掌握SQL查询语句的一般格式 ...

  2. 数据库 实验二 SQL查询一

    SQL查询一 答案链接链接 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 通过本实验使学生掌握单表查询并初步掌握多表查询的技能. 二.实验内容 使用实验一建立的银行贷款数据库和表,完成以 ...

  3. 数据库——实验二 数据查询

    1.实验目的 理解SQL 程序设计基本规范,熟练运用SQL 语言实现数据查询,包括单表查询.分组统计查询和连接查询.嵌套查询合和集合查询. 2.实验内容和要求 针对tpch 数据库或自建数据库test ...

  4. 数据库-实验二-数据查询

    --查询"红楼梦"目前可借的各图书编号,及所属版本信息 select 图书编号,出版单位 from 书目,图书 where 书目.isbn=图书.isbn  and 书名='红楼梦 ...

  5. 数据库实验二之数据查询

    实验二 数据查询 一.实验目的 1.理解数据库中数据的其他查询方法和应用: 2.学会各种查询要求的实现: 3.学会各种查询的异同及相互之间的转换方法. 二. 实验内容 在实验1的基础上,练习其它查询语 ...

  6. mysql 性别以女生升序_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录 任务三 数据库的单表查询设计 [实训目的与要求] [实训原理] [实训步骤] 一.简单查询 二.按条件查询 1.比较大小查询 2.带in关键字的查询(确定集合) ...

  7. 数据库 实验二 查询

    一.实验内容 1.用SQL语句表示下列操作,在学生库中实现数据查询. (1)求数学系学生的学号和姓名. (2)求选修了课程的学生学号. (3)求选修001号课程的学生学号和成绩,并要求对查询结果按成绩 ...

  8. 数据库 查询计算机系姓王,数据库实验3简单查询和连接查询

    实验2数据库简单查询 一.实验目的 1.掌握SQL查询语句的基本语法与用法.熟练掌握简单表的数据查询 2.掌握数据库表的各种连接查询,包括内连接和外连接查询 二.实验内容 (一)数据库和表及表中的数据 ...

  9. 西南科技大学数据库实验二(Oracle 11g)

    /* *实验二 数据查询 *时间:2019-11-25 *联系:2838215550@qq.com *附言:把代码写成一首诗. *SELECT [ ALL | DISTINCT] < 目标列表达 ...

最新文章

  1. android 按键kl文件,Android添加新按键
  2. 微信实现定位城市并获取城市编码
  3. C和指针之字符串之strlen、strcpy、 strcat、strcmp使用总结
  4. 人类视觉计算理论经典著作,豆瓣评分9.7,中文版惊鸿面世!
  5. 计算机实验报告14,计算机14实验报告模板.doc
  6. python编程(数据库操作)
  7. OOP 术语:Arguments(参量)和 Parameters(参数)的区别(转载)
  8. python实现时频谱,语谱图,mel语谱倒谱等
  9. 对字符串进行折半查找c语言,C语言:编写折半查找函数
  10. gitserver提交代码的总结
  11. [Windows] PPT插件集,部分支持WPS(提高你的制作效率和页面美观)
  12. 徐梓萌 受邀担任 火星少年计划 第四季 特邀小主持人
  13. c语言 取结构体地址,结构体赋值,对用不用取地址符有些困惑?
  14. 智慧厕所空气净化设备异味除臭杀菌更彻底
  15. 算法实践-遗传算法GA
  16. 高一下学期计算机考试知识点,高一第一学期计算机期末考试-基础模块(含答案)...
  17. Kafka Producer 实现源码分析
  18. pcie5.0 spec学习1.5----lane margining
  19. 文献阅读09期:基于ADMM方法的柔性负载实时定价
  20. starting to launch local task to process map join maximum memory =1029701632 的原因

热门文章

  1. erlang的dict源码解析(1)
  2. 设计模式--模板方法模式--Java实现-- java访问控制关键字用法
  3. Android中ButterKnife的详细使用
  4. U盘文件系统类型 和 linux 挂载 和 卸载
  5. git啊,你让我好费劲啊
  6. 学校计算机房 作文,第一次去机房作文
  7. Docker入门与实战
  8. Linux日志收集logrotate原理介绍
  9. stm32_19264液晶LCD驱动程序
  10. 使用Express搭建Web服务器