基于实验一建立的 “图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单中的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。 1、集合查询实验 在“图书读者数据库”(Book_Reader_DB)中,用集合查询的方法完成下列查询任务: ① 查询计算机类和机械工业出版社出版的图书; ② 查询清华大学出版社出版的书中与机械工业出版社出版的所有不相同的图书号与书名; ③ 查询清华大学出版社出版的书与环境类图书的交集; ④ 查询借阅过清华大学出版社出版的“数据结构” 图书和西安电子工业出版社出版的“操作系统”图书的读者号的并集; 实验三的目的是让学生掌握SQL Server查询分析器的使用,深入理解SQL和Transact-SQL语言的查询语句,特别是聚焦于数据查询中的分组、统计、计算和集合查询方法。实验环境中,需使用Microsoft Windows 2000操作系统和SQL Server 2000数据库管理系统。 **集合查询实验** 1. 查询计算机类和机械工业出版社出版的图书: 这个查询可以通过`INNER JOIN`或`WHERE`子句结合`AND`操作符来完成。例如: ```sql SELECT * FROM Books WHERE Category = '计算机类' AND Publisher = '机械工业出版社' ``` 2. 查询清华大学出版社出版的书中与机械工业出版社出版的所有不相同的图书号与书名: 使用`EXCEPT`操作符可以找出两个集合的差异部分: ```sql (SELECT BookID, Title FROM Books WHERE Publisher = '清华大学出版社') EXCEPT (SELECT BookID, Title FROM Books WHERE Publisher = '机械工业出版社') ``` 3. 查询清华大学出版社出版的书与环境类图书的交集: 使用`INTERSECT`操作符可以找出两个集合的共同部分: ```sql (SELECT BookID, Title FROM Books WHERE Publisher = '清华大学出版社') INTERSECT (SELECT BookID, Title FROM Books WHERE Category = '环境类') ``` 4. 查询借阅过清华大学出版社出版的“数据结构”图书和西安电子工业出版社出版的“操作系统”图书的读者号的并集: 找到这两类图书的读者号,然后通过`UNION`操作符合并它们: ```sql (SELECT ReaderID FROM BorrowRecords WHERE BookID IN (SELECT BookID FROM Books WHERE Title = '数据结构' AND Publisher = '清华大学出版社')) UNION (SELECT ReaderID FROM BorrowRecords WHERE BookID IN (SELECT BookID FROM Books WHERE Title = '操作系统' AND Publisher = '西安电子工业出版社')) ``` **统计查询实验** 1. 查找类别中最高定价不低于全部按类别分组的图书平均定价2倍的图书类别: 使用`HAVING`子句与`GROUP BY`配合,找出满足条件的类别: ```sql SELECT Category FROM Books GROUP BY Category HAVING MAX(Price) >= AVG(Price) * 2 ``` 2. 求机械工业出版社各类图书的平均定价: 通过`GROUP BY`和`AVG`函数实现: ```sql SELECT Category, AVG(Price) AS AvgPrice FROM Books WHERE Publisher = '机械工业出版社' GROUP BY Category ``` 3. 列出计算机类图书的书号、名称及价格,同时计算册数和总价格: 使用`COUNT`和`SUM`函数: ```sql SELECT BookID, Title, Price, COUNT(*) AS TotalBooks, SUM(Price) AS TotalPrice FROM Books WHERE Category = '计算机类' GROUP BY BookID, Title, Price ``` 4. 列出计算机类图书的书号、名称及价格,计算各出版社这类书的总价格,最后求出全部册数和总价格: 这需要多步骤查询,先按出版社分组,再计算总体: ```sql WITH PublisherSummary AS ( SELECT Publisher, SUM(Price) AS TotalPricePerPub, COUNT(*) AS TotalBooksPerPub FROM Books WHERE Category = '计算机类' GROUP BY Publisher ) SELECT Books.BookID, Books.Title, Books.Price, PublisherSummary.TotalBooksPerPub, PublisherSummary.TotalPricePerPub FROM Books JOIN PublisherSummary ON Books.Publisher = PublisherSummary.Publisher WHERE Books.Category = '计算机类' ``` 5. 查询订购图书最多的出版社及订购图书的数量: 使用`GROUP BY`和`ORDER BY`,然后选择数量最多的: ```sql SELECT Publisher, COUNT(*) AS TotalOrders FROM BorrowRecords GROUP BY Publisher ORDER BY TotalOrders DESC LIMIT 1 ``` 6. 查询2000年以后购买的图书总册数: 利用`DATEPART`函数判断购买年份: ```sql SELECT SUM(BookCount) AS TotalBooksAfter2000 FROM ( SELECT COUNT(*) AS BookCount FROM BorrowRecords WHERE DATEPART(year, PurchaseDate) > 2000 ) AS SubQuery ``` 7. 计算各类图书的总册数: 对所有书籍按类别分组,统计每类的册数: ```sql SELECT Category, SUM(BookCount) AS TotalBooks FROM ( SELECT Category, COUNT(*) AS BookCount FROM Books ) AS SubQuery GROUP BY Category ``` 8. 查询每本图书的平均借阅次数: 对每本书计算平均借阅次数: ```sql SELECT Books.BookID, Books.Title, AVG(BorrowRecords.Repeat) AS AvgBorrowTimes FROM Books JOIN BorrowRecords ON Books.BookID = BorrowRecords.BookID GROUP BY Books.BookID, Books.Title ``` 每个实验步骤的结果需记录在实验报告中,包括所使用的Transact-SQL语句和执行结果。实验报告应清晰呈现实验目的、环境、内容、步骤、结果以及可能遇到的问题。实验报告建议采用打印形式,格式要规范。实验报告完成后,由学习委员统一收集并提交到指定地点。
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助