数据库实验三

1关:按条件查询单表的所有字段

任务要求

打开province数据库 第一题 查询街道信息(jdxx)数据表的开福区(qxmc)的所有字段 第二题 查询街道信息(jdxx)数据表的开福区和岳麓区(qxmc)的所有字段 第三题 查询街道信息(jdxx)数据表的长沙市(cs)的西湖街道(name)所有字段。

jdxx数据表有四个字段,分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。

use province;
 #代码开始
 #第一题
select * from jdxx where qxmc="开福区";
 #第二题
select * from jdxx where qxmc="岳麓区"
union
select * from jdxx where qxmc="开福区";

 #第三题
select * from jdxx where cs="长沙市" and name="西湖街道";

 #代码结束

2关:查询唯一值

任务描述

本关任务: 根据jdxx数据表,查询湖南省(sf)所有的区县名称(qxmc),每个区县只出现一次 查询长沙市(cs)所有的区县名称(qxmc),每个区县只出现一次。

use province
 #代码开始
 select distinct qxmc from jdxx where sf='湖南省';
 select distinct qxmc from jdxx where cs='长沙市';
   
    
 #代码结束

3关:统计查询

任务描述

本关任务:对jdxx统计查询 查询湖南省的街道个数 查询长沙市的街道个数 查询湖南省的区县个数 查询长沙市的区县个数。

use province;
#代码开始
#答案1
select count(name)
from jdxx
where sf = '湖南省';
#答案2
select count(name)
from jdxx
where cs = '长沙市'
group by cs;
#答案3
select count(distinct qxmc)
from jdxx
where sf = '湖南省';
#答案4
select count(distinct qxmc)
from jdxx
where cs = '长沙市';
 #代码结束

第4关:分组查询

任务描述

本关任务:统计每个省的名称和街道数目 显示街道数目大于200个的城市和街道数目 显示长沙市每个区县的街道数目。

 use province;
#代码开始
#题目1
select sf,count(*)
from jdxx
group by sf;
#题目2
select cs,count(*)
from jdxx 
group by cs 
having count(*)>200;

#题目3
select qxmc, count(*)
from jdxx
where cs = '长沙市'
group by qxmc;

5关:数据排序

任务描述

本关任务:显示jdtj数据表中街道个数最多的10个的所有字段; 显示jdtj数据表中街道个数最少的10个的所有字段; 按街道个数从高到底,街道个数相同的按省份升序排序显示jdtj数据表中街道个数大于35的所有字段 jdtj数据表字段为省份(sf)、城市(cs)、区县(qx) 、街道个数(jdgs)字段。

use province;
 #代码开始
 #第一题
select *
from jdtj
order by jdgs desc
limit 10;
 #第二题
select *
from jdtj
order by jdgs asc
limit 10;

 #第三题
 select *
 from jdtj
 where jdgs > 35
 order by jdgs desc,sf asc;
 #代码结束

练习二

1关:多表查询

任务要求

打开library数据库 第一题 根据读者(reader)和借阅(borrow)数据表,查询王颖珊的借阅记录,包括条形码txm、借阅日期jyrq、还书日期hsrq 第二题 根据图书(book)和借阅(borrow)数据表,查询李白全集被借阅的情况:包括读者证号dzzh、借阅日期jyrq、还书日期hsrq 第三题 根据读者(reader)、图书(book)和借阅(borrow)数据表查询没有被归还的借阅信息:包括读者证号dzzh、姓名xm、电话dhhm、条形码txm、书名sm、借阅日期jyrq 提示:通过isnull(表达式)可以判断表达式是否NULL值。

通过isnull(表达式)可以判断表达式是否NULL值
 use library;
 #代码开始
 #第一题
select txm , jyrq , hsrq 
from borrow , reader 
where reader.dzzh = borrow.dzzh and xm='王颖珊';
 #第二题
select dzzh , jyrq , hsrq from borrow , book where borrow.txm = book.txm and book.sm='李白全集';
 #第三题
select reader.dzzh , xm , dhhm , book.txm , sm , borrow.jyrq from reader,book,borrow where reader.dzzh=borrow.dzzh and book.txm = borrow.txm and isnull(hsrq);
 #代码结束

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

任务描述

任务: 根据数据表图书、读者和借阅,实现多表查询及对查询分组统计

为了完成本关任务,你需要掌握: 第一题: 统计每本书借阅的次数,显示书名和借阅次数(借阅次数命名为jycs),按借阅次数降序排列,借阅次数相同的按书名降序排列 (提示:borrow数据表的一条数据对应一次借阅) 第二题: 统计借阅次数在2次以上的图书的借阅的次数,显示书名和借阅次数,按借阅次数降序排列,借阅次数相同的按书名降序排列 第三题 统计每个出版社的图书的借阅次数,显示出版社的名称和借阅次数,按借阅次数降序排列,借阅次数相同的按出版社降序排列 第四题: 统计每位读者借阅的次数,显示姓名和借阅次数,按借阅次数降序排列,借阅次数相同的按姓名降序排列 第五题: 统计研究生读者借阅的次数,显示姓名和借阅次数,按借阅次数降序排列,借阅次数相同的按姓名降序排列 注意:order by <表达式1>,<表达式2> 表示首先按第一个表达式的值排序,第一个表达式的值相同的再按第二个表达式的值排序。

use library
 #代码开始
 #第一题
select sm,count(*)jycs  from borrow left join book on book.txm=borrow.txm 
group by sm 
order by count(*) desc,sm desc;
 #第二题
select sm,count(*)jycs  from borrow left join book on book.txm=borrow.txm 
group by sm having(count(*)>=2)
order by count(*)  desc,sm desc;
 #第三题
select cbs,count(*)jycs from borrow left join book on book.txm=borrow.txm 
group by cbs
order by count(*) desc,cbs desc;
 #第四题
select xm,count(*)jycs from borrow left join reader on borrow.dzzh=reader.dzzh 
group by xm
order by  count(*) desc,xm desc;
 #第五题
 select xm,count(*)jycs from borrow left join reader on borrow.dzzh=reader.dzzh 
where sf='研究生'
group by xm
order by count(*) 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);
#答案4
select txm, sm, sj
from book 
where sj = (select min(sj) from book);

#代码结束

4关:多表子查询

任务描述

本关任务: 第一题 查询曾经借过图书的读者的读者证号和姓名 第二题 查询曾经没有被借阅的图书的条形码和书名 第三题 查询与孙思旺借过相同图书的读者的读者证号和姓名,按读者证号升序排列 第四题 查询借阅过李白全集的读者所借过的其他图书的书名 按书名升序排列。

 use library;
#代码开始
#题目1
select distinct reader.dzzh,xm
from reader,borrow
where reader.dzzh = borrow.dzzh
order by reader.dzzh asc;
#题目2
select book.txm, sm
from book left join borrow
on book.txm = borrow.txm
where jyrq is null;
#题目3
select distinct reader.dzzh, xm
from reader,borrow
where reader.dzzh = borrow.dzzh and txm in(
select borrow.txm
from reader,borrow,book
where reader.dzzh = borrow.dzzh and borrow.txm = book.txm and xm = '孙思旺') and xm !='孙思旺'
order by reader.dzzh asc;
#题目4
 select distinct sm
 from borrow,book
 where borrow.txm = book.txm and dzzh in(
     select dzzh
     from borrow,book
     where borrow.txm = book.txm and sm ='李白全集'
 )and sm !='李白全集'
 order by sm asc;
 
 #代码结束

  • 11
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马龙强_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值