实验八 SQL 数据查询
本实验以‘图书管理’数据库的‘图书’‘读者’‘借阅’3个表为基础进行查询操作。
1、查询‘高等教育出版社’和‘人民出版社’的图书的书名、作者和出版社。
SELECT 书名,作者,出版社 FROM 图书 WHERE 出版社="高等教育出版社" OR 出版社="人民出版社"
SELECT 书名,作者,出版社 FROM 图书 WHERE 出版社 in("高等教育出版社" ,"人民出版社")
2、查询‘高等教育出版社’和‘中山大学出版社’图书的所有情况。
SELECT * FROM 图书 WHERE 出版社="高等教育出版社" OR 出版社="中山大学出版社"
3、查询各个出版社的图书最高价、平均价和种类数。
SELECT 出版社, MAX(单价) AS 最高价 , AVG(单价) AS 平均价 , COUNT(总编号) AS 种类数 FROM 图书 GROUP BY 出版社
4、查询所有已借出的图书书名(不计重复图书)。
用多数据表连接方式
**没有重复
select distinct 书名 from 图书, 借阅;
where 图书.总编号=借阅.总编号
SELECT DISTINCT 书名 AS 已借出的图书;
FROM 图书,借阅 WHERE 图书.总编号=借阅.总编号
注意,用不用DISTINCT,命令的结果是不一样的。
**用子查询形式
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 最高价, AVG(单价) AS 平均价 FROM 图书 GROUP BY 出版社 HAVING COUNT(*)>=20
注意:HAVING COUNT(*)>=20也可以是HAVING COUNT(总编号)>=20
8、查询与借书证号为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 distinct from
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 借阅)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论