MySQL实验三 数据查询二

文章提供了一系列关于使用SQL进行多表查询的实例,包括查询特定读者的借阅记录、图书借阅情况、未归还书籍信息等。同时,涉及统计分析,如每本书的借阅次数、特定条件下的图书借阅次数以及出版社和读者的借阅统计。此外,还涵盖了子查询的运用,如查找相同出版社的图书、高价图书以及最高和最低售价的书籍。最后,讨论了多表子查询的应用,如找出共享相同借阅历史的读者和特定读者的其他借阅书籍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:多表查询

打开library数据库

第一题 根据读者(reader)和借阅(borrow)数据表,查询王颖珊的借阅记录,包括条形码txm、借阅日期jyrq、还书日期hsrq

第二题 根据图书(book)和借阅(borrow)数据表,查询李白全集被借阅的情况:包括读者证号dzzh、借阅日期jyrq、还书日期hsrq

第三题 根据读者(reader)、图书(book)和借阅(borrow)数据表查询没有被归还的借阅信息:包括读者证号dzzh、姓名xm、电话dhhm、条形码txm、书名sm、借阅日期jyrq 提示:通过isnull(表达式)可以判断表达式是否NULL值

 use library;
 #代码开始
 #第一题
 select txm,jyrq,hsrq from reader a, borrow b where a.dzzh=b.dzzh and xm='王颖珊';
 #第二题
 select dzzh,jyrq,hsrq from book join borrow on book.txm=borrow.txm where sm='李白全集';
 #第三题
 select a.dzzh,xm,dhhm,b.txm,sm,jyrq from reader a, borrow b, book c 
 where a.dzzh=b.dzzh and b.txm=c.txm and isnull(hsrq);
 #代码结束

 第2关:多表查询及统计分组

第一题: 统计每本书借阅的次数,显示书名和借阅次数(借阅次数命名为jycs),按借阅次数降序排列,借阅次数相同的按书名降序排列 (提示:borrow数据表的一条数据对应一次借阅)

第二题: 统计借阅次数在2次以上的图书的借阅的次数,显示书名和借阅次数,按借阅次数降序排列,借阅次数相同的按书名降序排列

第三题 统计每个出版社的图书的借阅次数,显示出版社的名称和借阅次数,按借阅次数降序排列,借阅次数相同的按出版社降序排列

第四题: 统计每位读者借阅的次数,显示姓名和借阅次数,按借阅次数降序排列,借阅次数相同的按姓名降序排列

第五题: 统计研究生读者借阅的次数,显示姓名和借阅次数,按借阅次数降序排列,借阅次数相同的按姓名降序排列

use library
 #代码开始
 #第一题
 select sm,count(*) as jycs from book,borrow where book.txm=borrow.txm
 group by sm order by jycs desc,sm desc;
 #第二题
 select sm,count(*) as jycs from book,borrow where book.txm=borrow.txm 
 group by sm having jycs>=2 order by jycs desc,sm desc;

 #第三题
 select cbs,count(*) as jycs from book,borrow where book.txm=borrow.txm 
 group by cbs order by jycs desc,sm desc;
 #第四题
 select xm,count(*) as jycs from reader,book,borrow 
 where book.txm=borrow.txm and reader.dzzh=borrow.dzzh
 group by xm order by jycs desc,xm desc;
 #第五题
 select xm,count(*) as jycs from reader,book,borrow 
 where book.txm=borrow.txm and reader.dzzh=borrow.dzzh and sf='研究生'
 group by xm order by jycs desc,xm desc;
 #代码结束

 第3关:子查询

第一题 查询与李白全集同一个出版社的图书的书名(不包括李白全集)

第二题 查询高于图书的平均售价(sj)的图书的书名和售价

第三题 查询售价最高的图书的条形码、书名和售价 第四题 查询售价最低的图书的条形码、书名和售价 

use library;
#代码开始
#答案1
select sm from book where cbs=(select cbs from book where sm='李白全集') and sm!='李白全集';
#答案2
select sm,sj from book where sj>(select avg(sj) from book);
#答案3
select txm,sm,sj from book where sj=(select max(sj) from book);
select txm,sm,sj from book where sj=(select min(sj) from book);
#代码结束

第4关:多表子查询

第一题 查询曾经借过图书的读者的读者证号和姓名

第二题 查询曾经没有被借阅的图书的条形码和书名

第三题 查询与孙思旺借过相同图书的读者的读者证号和姓名,按读者证号升序排列

第四题 查询借阅过李白全集的读者所借过的其他图书的书名 按书名升序排列

 use library;
#代码开始
#题目1
select dzzh,xm from reader where dzzh in (select dzzh from borrow);
#题目2
select txm,sm from book where txm not in (select txm from borrow);
#题目3
select dzzh,xm from reader where reader.dzzh in 
(select dzzh from borrow where txm in 
(select txm from borrow where borrow.dzzh=
(select dzzh from reader where xm='孙思旺')))
and xm!= '孙思旺' order by dzzh asc ;
#题目4
select sm from book where book.txm in 
(select txm from borrow where borrow.dzzh in
(select dzzh from borrow where borrow.txm=
(select txm from book where sm='李白全集')))
and sm!= '李白全集' order by sm asc;
 #代码结束
### MySQL 实验 数据查询操作 #### 一、单表查询 在执行简单的单表查询时,`SELECT`语句是最基本也是最常用的工具。通过指定列名以及条件可以精确获取所需的数据。 ```sql -- 查询所有记录并显示特定字段 SELECT name, age FROM users; ``` 对于更复杂的筛选需求,则可以在`WHERE`子句中加入各种逻辑表达式来限定返回的结果集[^2]。 #### 、分组聚合查询 为了统计分析目的,经常需要用到分组与聚合函数相结合的方式来进行计算汇总。比如按部门统计员工人数: ```sql -- 使用GROUP BY 对结果进行分组,并利用COUNT() 函数计数 SELECT department_id , COUNT(*) AS employee_count FROM employees GROUP BY department_id ; ``` 这有助于快速了解不同类别下的数据分布情况。 #### 、多表连接查询 当涉及到多个相互关联的表格之间的关系时,就需要用到JOIN语法了。这里给出一个内连接的例子,它会匹配两个表中存在的共同部分: ```sql -- INNER JOIN 只保留两张表中共有的行 SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id; ``` 此外还有左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)等形式可供选择,在实际应用中应根据具体业务场景灵活运用。 #### 四、子查询的应用 有时候我们需要在一个查询内部再嵌入另一个查询作为其一部分,这就是所谓的子查询。下面是一个查找订单金额大于平均值的所有客户姓名的例子: ```sql -- 子查询用于求得整体均值后再做比较 SELECT customer_name FROM customers WHERE EXISTS ( SELECT * FROM orders WHERE orders.customer_id = customers.customer_id AND order_amount > (SELECT AVG(order_amount) FROM orders) ); ``` 这种结构能够帮助解决较为复杂的关系型数据分析问
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值