实验⼋SQL 数据查询
本实验以‘图书管理’数据库的‘图书’‘读者’‘借阅’3个表为基础进⾏查询操作。1、查询‘⾼等教育出版社’和‘⼈民出版社’的图书的书名、作者和出版社。
SELECT 书名,作者,出版社FROM 图书WHERE 出版社=\"⾼等教育出版社\" OR 出版社=\"⼈民出版社\"SELECT 书名,作者,出版社FROM 图书WHERE 出版社in(\"⾼等教育出版社\" ,\"⼈民出版社\")2、查询‘⾼等教育出版社’和‘中⼭⼤学出版社’图书的所有情况。
SELECT * FROM 图书WHERE 出版社=\"⾼等教育出版社\" OR 出版社=\"中⼭⼤学出版社\"3、查询各个出版社的图书最⾼价、平均价和种类数。
SELECT 出版社, MAX(单价) AS 最⾼价, A VG(单价) AS 平均价, COUNT(总编号) AS 种类数FROM 图书GROUP BY 出版社4、查询所有已借出的图书书名(不计重复图书)。⽤多数据表连接⽅式**没有重复
select distinct 书名from 图书, 借阅;where 图书.总编号=借阅.总编号
SELECT DISTINCT 书名AS 已借出的图书;FROM 图书,借阅WHERE 图书.总编号=借阅.总编号注意,⽤不⽤DISTINCT,命令的结果是不⼀样的。**⽤⼦查询形式
select distinct 书名from 图书where 总编号in (select 总编号from 借阅)**⽤⼦查询形式
select distinct 书名from 图书where 总编号in (select 总编号from 借阅)5、查询借书证号为A103003的读者姓名和所借图书的书名。SELECT 姓名,书名,作者,出版社FROM 图书,借阅,读者;WHERE 图书.总编号=借阅.总编号;AND 读者.借书证号= 借阅.借书证号;AND 读者.借书证号=\"A103003\"
6、查询已借出的图书有多少种(不计重复图书)。**不计重复图书
select count(distinct 总编号) from 借阅
SELECT COUNT(distinct 总编号) AS 已借出的图书总类FROM 借阅
7、查询所藏图书中有20种及以上图书的出版社所出版的图书的最⾼价和平均价。分组统计筛选
SELECT 出版社, MAX(单价) AS 最⾼价, A VG(单价) AS 平均价FROM 图书GROUP BY 出版社HA VING COUNT(*)>=20注意:HA VING COUNT(*)>=20也可以是HA VING COUNT(总编号)>=20
8、查询与借书证号为A103003号借有相同书的借书证号。**⽤⼦查询形式
select 借书证号,总编号 from 借阅 where 总编号 in (select 总编号 from 借阅 where 借书证号='A103003')select 借书证号,总编号from 借阅where 总编号in (select 总编号from 借阅where 借书证号='A103003')此命令有重复的,即把A103003也包含在内了,因此要排除借书证号为A103003的这条记录。正确的是:
select distinct 借书证号from 借阅where 总编号in (select 总编号from 借阅where 借书证号=\"A103003\") and 借书证号!=\"A103003\"
9、查询借书证号为A103003号的读者姓名和所借图书的总⾦额。SELECT 姓名, SUM(单价) AS 所借图书的总⾦额;
FROM 图书,借阅,读者WHERE 读者.借书证号=借阅.借书证号AND 图书.总编号=借阅.总编号AND 读者.借书证号=\"A103003\"10、查询所有借阅了图书的读者姓名、单位、所借图书的书名、借书⽇期。SELECT 姓名,单位,书名AS 所借图书的书名,借书⽇期FROM 图书,借阅,读者;WHERE 读者.借书证号=借阅.借书证号AND 图书.总编号=借阅.总编号11、查询只借了⼀本图书的读者姓名。select 姓名from 借阅,读者;
where 借阅.借书证号=读者.借书证号;
group by 读者.借书证号having count(总编号)=1或者以下⽅法(⼦查询):
select 姓名from 读者where 借书证号in (select 借书证号from 借阅 ;group by 借书证号having count(总编号)=1)
12、查询书名以‘计算机’开头的所有图书的书名和作者。⽅法⼀:
SELECT 书名,作者FROM 图书WHERE 书名=\"计算机\"⽅法⼆:
select 书名,作者from 图书where left(书名,6)='计算机'⽅法三:
select 书名,作者from 图书where 书名like '计算机%'13、查询书名含有‘计算机’的所有图书的书名和作者。⽅法⼀:
SELECT 书名,作者FROM 图书WHERE \"计算机\" $书名⽅法⼆:
select 书名,作者from 图书where 书名like '%计算机%'14、查询藏书中⽐⾼教出版社的所有图书的书价更⾼的书。⽅法⼀:
SELECT * FROM 图书WHERE 单价>( SELECT MAX(单价) FROM 图书WHERE 出版社=\"⾼等教育出版社\")
⽅法⼆:
select * from 图书where 单价> all (select 单价from 图书;where 出版社='⾼等教育出版社')
15、查询与‘郑盈莹’在同⼀天借书的读者姓名、所在单位和所借的图书书名。
select 姓名,书名,单位from 读者,图书,借阅where 图书.总编号=借阅.总编号and 读者.借书证号=借阅.借书证号and 借书⽇期in(select 借书⽇期from 读者,借阅where 读者.借书证号=借阅.借书证号and 姓名='郑盈莹') and 姓名!='郑盈莹'下⾯这条命令包括了“郑盈莹”,不合要求:
select 姓名,单位,借书⽇期,书名 from 借阅,读者,图书 ;
where 借阅.借书证号=读者.借书证号 .and. 图书.总编号=借阅.总编号 and 借书⽇期 in (select 借书⽇期 from 借阅,读者 ;where 借阅.借书证号=读者.借书证号and 姓名='郑盈莹') order by 借书⽇期16、查询没有借阅过图书的读者姓名和所在单位。select 姓名,单位from 读者;
where 读者.借书证号not in (select 借书证号from 借阅)
因篇幅问题不能全部显示,请点此查看更多更全内容