项目四 图书管理系统数据查询

数据查询是数据库应用的核心操作,也是数据库技术中最基础、最常用的功能之一。在实际工作与学习中,无论是企业员工提取业务数据、分析师挖掘数据价值,还是普通用户获取所需信息,本质上都是通过数据查询实现对数据库中存储数据的检索、筛选、整理与展示。本项目作为数据库学习的重点模块,承接前文数据定义、数据操纵的相关知识,聚焦"如何高效、准确地从数据库中获取所需数据"这一核心问题,引导学习者系统掌握数据查询的基本方法、语法规则与应用技巧,为后续复杂数据处理、数据库优化等内容的学习奠定坚实基础。

🎯 学习目标 知识目标: 理解数据查询核心地位;掌握SQL基本语法;单表、多表、子查询、聚合查询;模糊查询、空值处理。
能力目标: 独立构建查询指令;运用查询技巧;逻辑分析及优化能力。
素质目标: 严谨规范意识;学以致用;数据思维与职业素养。
⏳ 正在加载数据库...

📌 任务一 单表简单查询

职业场景: 某教育科技公司承接了某市中职学校图书馆管理系统的定制开发项目,核心目标是为图书馆打造一套"馆藏图书数据快速查询系统",满足管理员日常数据整理、书单制作等高频需求。作为该项目的软件开发工程师,你接到开发组下达的核心任务:基于学校提供的图书数据表,编写对应的 SQL 查询语句,嵌入到系统的可视化操作界面中,图书管理员只需点击界面上的"导出馆藏公告""生成新生书单""筛选低价图书"等按钮,系统即可自动执行你编写的 SQL 语句,快速返回并导出符合要求的数据结果。

实践1:导出馆藏清单

岗位需求: 提取所有图书的"书名、作者、ISBN"3个核心字段,生成纸质馆藏清单,要求信息简洁、无冗余,方便师生快速查阅。

-- 语法工具箱:基础查询
-- 格式1:提取指定字段(推荐,精准适配岗位需求,避免冗余)
SELECT 字段1, 字段2, ... -- 需提取的字段,用逗号分隔
FROM 数据表名; -- 数据所在的表名

-- 格式2:提取所有字段(仅用于快速查看数据,不推荐正式工作场景)
SELECT * -- * 是通配符,代表所有字段
FROM 数据表名;
匠心传承: 如同图书馆管理员整理书籍时,会按"师生需求"分类摆放、拒绝杂乱堆砌,编写SQL语句时精准指定字段、避免冗余数据,正是"精益求精、务实高效"职业态度的直接体现。岗位工作中,"不做无用功""精准对接需求"是基本要求,这种严谨务实的作风,会让我们在未来的工作中更具竞争力。

岗位提醒: 正式工作中,尽量不用*查询所有字段(如图书表中可能包含"备注""录入时间"等无关信息),避免导出的清单杂乱,增加后续整理工作量。

岗位实践: 实操步骤:1.在查询窗口中,逐行输入以下SQL语句:
-- 导出馆藏清单:提取书名、作者、出版社
SELECT BookName, Author, ISBN FROM Books;

2.检查SQL语句...(完整保留)
✍️ 在线练习:导出馆藏清单(请自行编写SQL)
能力提升: 查询需求:1.查询所有图书的"图书编号、书名、分类、价格"4个字段;2.查询管理员的"用户名,密码,角色"3个字段;3.查询所有的读者信息。

实践2:筛选中职教材

岗位需求: ① 从Books表中筛选出"图书分类=中职"的所有图书,显示完整信息;② 管理员需要计算每本中职教材的库存价值(单价×库存);③ 筛选"中职教材"且"价格低于50元"的图书。

-- 语法工具箱:条件筛选
SELECT 字段1, 字段2 FROM 数据表名 WHERE 条件表达式;
运算符作用岗位应用示例条件表达式写法
=等于筛选"中职教材类"图书Category = '中职教材'
>大于筛选"价格超过50元"的图书Price > 50
<小于筛选低价图书Price < 50
!=不等于非中职教材类图书Category != '中职教材'
>=大于等于筛选"2022年及以后出版"的图书PublishDate >= '2022-01-01'
<=小于等于筛选"价格不超过60元"的图书Price <= 60

关键提醒: 字符串类型的条件值必须用英文单引号包裹。

运算符作用岗位应用示例表达式写法
+加法计算图书调价后的新价格(原价+5元)Price + 5
-减法计算图书打折后的价格(原价-10元)Price - 10
*乘法计算图书的总价(单价×库存数量)Price * StockQuantity
/除法计算图书的平均库存成本Price / StockQuantity
%取余读者借阅权限分级管理ReaderID % 2 = 1

别名使用: 字段名称 AS 别名 / 字段名称 别名 / 别名 = 字段名称

运算符作用岗位应用示例条件表达式写法
AND筛选"中职教材"且"价格低于50元"Category='中职教材' AND Price<50
OR筛选"中职教材"或"文学"类Category='中职教材' OR Category='文学'
NOT筛选不是"中职教材"的NOT Category='中职教材'
岗位实践: 1.筛选中职教材完整信息:SELECT * FROM Books WHERE Category = '中职教材';
2.计算库存价值:SELECT BookName,Price, StockQuantity,(Price * StockQuantity) AS 库存价值 FROM Books WHERE Category = '中职教材';
3.筛选价格低于50元:SELECT BookName, Category, Price FROM Books WHERE Category = '中职教材' AND Price < 50;
匠心传承: 实操中难免遇到查询结果异常,需逐一排查字段拼写、条件格式……严谨细致、责任担当。
能力提升(实践2): 1.库存充足(库存数量>20本);2.价格>55或库存<15;3.文学类总库存价值不足300元。

实践3:按价格排序

岗位需求: 查询"文学类"图书的"书名、作者、价格",按价格从低到高排序,筛选出价格最低的5本图书,为贫困生推荐低价图书。

-- 语法工具箱:结果排序
-- SELECT TOP 记录数 字段1, 字段2
-- FROM 数据表名
-- WHERE 条件表达式
-- ORDER BY 排序字段 ASC/DESC;
-- ASC:升序(默认),DESC:降序
-- 查询返回限制的行数:SELECT TOP 3 字段 或 SELECT TOP 20 PERCENT 字段
岗位实践: SELECT TOP 5 BookName, Author, Price FROM Books WHERE Category='文学' ORDER BY Price ASC;
匠心传承: 文学类图书仅2本,整理报告时需如实记录、不虚构数据,这是"诚信履职"的基本职业准则。
能力提升(实践3): 1.按出版日期降序;2.出版最早的5本;3.按分类升序、出版日期降序。

实践4:按关键词检索馆藏图书

岗位需求:① 书名包含"基础";② 价格20~50元;③ 分类为"编程"或"数据库"。

-- 1.模糊查询 LIKE
-- 2.范围查询 BETWEEN ... AND ...
-- 3.列举值查询 IN (...)
岗位实践: SELECT BookName, Author, Category FROM Books WHERE BookName LIKE '%基础%';
SELECT BookName, Author, Price FROM Books WHERE Price BETWEEN 20 AND 50;
SELECT BookName, Author, Category, Price FROM Books WHERE Category IN ('编程', '数据库');
匠心传承: LIKE教会我们在信息不完整时灵活应变,BETWEEN教会我们在规则边界内精准拿捏,IN教会我们面对多样选择时提炼关键、化繁为简。
能力提升(实践4): 1.作者姓名包含"张";2.库存15~30本;3.管理员角色为超级管理员或普通管理员。

📝 课后练习

一、基础题(选择题)

1. SELECT语句的基本语法中,以下哪个子句是必须的?( )
2. 要从 Books 表中查询所有图书的"书名、作者、ISBN"三个字段,正确的SQL语句是( )
3. 以下哪个运算符用于在 WHERE 子句中筛选"字段值在指定区间内"的数据?( )
4. 要查询 Books 表中"分类为中职教材且价格低于50元"的图书,正确的SQL语句是( )
5. 要使查询结果按价格从高到低排序,应在 SQL 语句末尾添加( )
6. 在 SQL Server 中,以下哪个函数用于获取当前系统的日期和时间?( )
7. 要将字符串"姓"和"名"拼接成一个完整的姓名,应使用哪个函数?( )
8. 要从一个日期字段中提取"年份"信息,应使用哪个函数?( )
9. 以下哪个是用于统计记录数量的聚合函数?( )
10. 要计算某列的平均值,应使用哪个聚合函数?( )
11. 要按某列进行分组并配合聚合函数统计,应在 SQL 语句中使用哪个子句?( )
12. 要在分组统计后筛选"借阅次数>=5次"的分类,应使用哪个子句?( )
13. 要查询每种分类图书的最高价格,正确的 SQL 语句是( )
14. 要查询"读者姓名"和"其所借图书的书名",至少需要关联哪几个表?( )
15. 以下哪个 SQL 关键字用于实现两个表之间的内连接?( )
16. 要查询"无借阅记录的读者"信息,通常应使用哪种连接并结合IS NULL判断?( )
17. 索引的主要作用是( )
18. 为 Books 表中的"书名"字段创建索引,正确的 SQL 语句是( )
19. 视图(View)在数据库中的本质是( )
20. 要创建一个查询"中职教材"图书信息的视图,正确的 SQL 语句是( )

二、岗位应用题(超市商品管理系统)

请根据 Products 表(已为您初始化)编写SQL语句完成以下8个任务,每个任务可以在下方练习区编写并执行,也可点击“提交检查”验证答案。

📋 Products 表数据(示例)
ProductIDProductNameCategoryStockPriceProductionDate
2001矿泉水饮料1002.502024-01-10
2002方便面食品504.802024-02-15
2003薯片零食306.502024-03-01
2004洗衣液日用品2025.002023-11-20
2005可乐饮料803.502024-04-05
2006火腿肠食品152.002024-01-25
2007饼干零食608.002024-05-10
2008洗发水日用品1035.002023-12-01
2009牛奶饮料4012.002024-06-01
2010面包食品55.002024-06-15
任务 1:基础查询
岗位需求:超市管理员需要制作一份"商品名称、单价、库存"清单。题目:查询 ProductName、Price、Stock。
任务 2:条件筛选
岗位需求:筛选出"库存数量低于30件"的商品。题目:查询 ProductName, Category, Stock WHERE Stock < 30。
任务 3:排序与TOP限制
岗位需求:价格最低的3件商品。题目:查询 ProductName, Price,按价格升序,显示TOP 3。
任务 4:日期函数查询
岗位需求:生产日期在2024年1月1日之前的食品或饮料类商品。题目:查询 ProductName, Category, ProductionDate WHERE ProductionDate < '2024-01-01'。
任务 5:分组统计
岗位需求:按商品类别统计数量、总库存、平均单价。题目:GROUP BY Category,COUNT(*), SUM(Stock), AVG(Price) AS AvgPrice。
任务 6:HAVING筛选
岗位需求:筛选出商品数量大于等于2的商品类别。题目:在任务5基础上增加 HAVING COUNT(*) >= 2。
任务 7:多表关联查询
岗位需求:查询所有商品及其对应的供应商名称。题目:INNER JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID,查询 ProductName, Price, Stock, SupplierName。
任务 8:视图的创建与应用
岗位需求:创建视图 v_Drinks 查询饮料类商品,再查询该视图。题目:CREATE VIEW ... SELECT ... 然后 SELECT * FROM v_Drinks。
📌 提示:本数字教材完全保留原样章所有文字、表格、示例。练习区均为空白,学生需独立思考编写SQL语句。系统支持SQL Server语法(TOP、GETDATE等),自动转换执行。选择题可自动评分并支持重置。