大学 mysql实验报告(五)附答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告(五)
专业:班级:学号:姓名:
实验名称:数据库的子查询、组合查询实验
报告内容:
1、写出习题3第75页第6题的2)3)5)6)小题的SQL语句
2)查询读者的读者号、姓名、借阅的图书名、借出日期、归还日期。

SELECT 读者.读者号,姓名,书名,借出日期,归还日期
FROM 读者, 图书,借阅
WHERE 读者.读者号= 借阅.读者号AND 图书.图书号=借阅.图书号
3)查询借阅了机械工业出版社出版,并且书名中包含’数据库’三个字的图书的读者,显示读者号、姓名、书名、出版社,借出日期、归还日期。

SELECT 读者.读者号,姓名,书名,出版社,借出日期,归还日期
FROM 读者,图书,借阅
WHERE 读者.读者号= 借阅.读者号AND 图书.图书号=借阅.图书号
AND 出版社=‘机械工业出版社’ AND 书名LIKE’%数据库%’
5)查询与’王平’的办公电话相同的读者的姓名。

SELECT R2.姓名
FROM 读者R1, 读者R2
where R1.办公电话= R2.办公电话AND R1.姓名='王小平'
此语句等价与:
SELECT 姓名
FROM 读者WHERE 办公电话=(SELECT 办公电话FROM 读者WHERE 姓名='王小平')
6)查询办公电话为’88320701’的所有读者的借阅情况,要求包括借阅了书籍的读者和没有借阅的读者,显示他们的读者号、姓名、书名、借阅日期。

SELECT 读者.读者号,姓名,图书号,借出日期
FROM 读者, 借阅
WHERE 读者.读者号*=借阅.读者号
AND 办公电话=‘88320701’
上述左外连接可可以用右外连接等价表示:
SELECT 读者.读者号,姓名,图书号,借出日期
FROM 读者,借阅
WHERE 借阅.读者号=* 读者.读者号
AND 办公电话=‘88320701’
在SQLSERVER2000中,以上左外连接还可等价表示为:
SELECT 读者.读者号,姓名,图书号,借出日期
FROM 读者LEFT JOIN 借阅ON 读者.读者号= 借阅.读者号
WHERE 办公电话=‘88320701’
或者用右连接表示为:
SELECT 读者.读者号,姓名,图书号,借出日期
FROM 借阅RIGHT JOIN 读者ON 借阅.读者号= 读者.读者号
WHERE 办公电话=‘88320701’
2、写出习题3第75页第7题的1)2)4)8)小题的SQL语句
1)查询所有单价小于平均单价的图书号、书名、出版社
SELECT 图书号,书名,出版社FROM 图书
WHERE 单价< (SELECT A VG(单价)’平均单价’ FROM 图书)
2)查询’科学出版社’的图书中单价比’机械工业出版社’最高单价还高的的图书书名、单价。

SELECT 图书号,单价FROM 图书
WHERE 出版社=‘科学出版社’ AND 单价> (
SELECT MAX(单价) FROM 图书WHERE 出版社=‘机械工业出版社’)
等价于:
SELECT 图书号,单价FROM 图书
WHERE 出版社='科学出版社' AND 单价>ALL (
SELECT 单价FROM 图书WHERE 出版社='机械工业出版社')
4)查询已被借阅过并已归还的图书信息。

SELECT * FROM 图书
WHERE 图书号IN (SELECT 图书号FROM 借阅WHERE 归还日期IS NOT NULL)
等价于:
SELECT * FROM 图书
WHERE EXISTS (SELECT * FROM 借阅
WHERE 图书.图书号=借阅.图书号AND 归还日期IS NOT NULL)
不等价于:(会有重复并且显示的字段不同)
SELECT * FROM 图书
WHERE 图书.图书号=借阅.图书号AND 归还日期IS NOT NULL
8)查询借阅了机械工业出版社出版的书名中含有数'据库书'三个字的图书并且也借阅了科学出版社出版的书名中含有数'据库书'三个字的图书的读者姓名、书名。

SELECT 姓名,书名
FROM 图书,读者,借阅
WHERE 图书.图书号=借阅.图书号AND 读者.读者号=借阅.读者号
AND 出版社='机械工业出版社' AND 书名LIKE '%数据库%'
INTERSECT
SELECT 姓名,书名
FROM 图书,读者,借阅
WHERE 图书.图书号=借阅.图书号AND 读者.读者号=借阅.读者号
AND 出版社=' 科学出版社' AND 书名LIKE '%数据库%'
SQL SERVER 2000用的是TSQL,TSQL没有关键字INTERSECT,而是用EXISTS来实现查询结果的交运算。

上述查询在SQL SERVER 2000中应表示为:
SELECT 姓名,书名
FROM 图书,读者R1,借阅
WHERE 图书.图书号=借阅.图书号AND R1.读者号=借阅.读者号
AND 出版社='机械工业出版社' AND 书名LIKE '%数据库%'
AND EXISTS
(
SELECT *
FROM 图书,读者R2,借阅
WHERE 图书.图书号=借阅.图书号AND R2.读者号=借阅.读者号AND 出版社=' 科学出版社' AND 书名LIKE '%数据库%'
AND R1.读者号=R2.读者号)。

相关文档
最新文档