数据库查询笔试题全解析,帮你快速搞懂各种考点和难题
- 问答
- 2026-01-13 10:07:34
- 4
数据库查询笔试题全解析,帮你快速搞懂各种考点和难题
直接开始,我们不讲复杂的理论,就针对笔试和面试中经常出现的那些题目,看看它们到底想考你什么,以及怎么思考和解决。
第一部分:基础必考——单表查询与过滤 都从这里开始,考点很简单:你能不能准确地从一张表里把需要的数据“捞”出来。

- 考点1:WHERE条件的灵活运用
- 题目示例:找出一张“学生表”里所有年龄大于20岁且姓“张”的学生。
- 解析:这考的是
WHERE子句里用AND连接多个条件,关键在于理解、>、<、>=、<=、<>(不等于)这些比较运算符,以及AND(、OR(或者)的逻辑,这里容易出错的是OR的优先级比AND低,当AND和OR混用时,最好用括号明确指定先算哪部分,避免逻辑混乱,年龄大于20岁或小于18岁,并且是男生”,如果不加括号,数据库的理解可能和你想的不一样。
- 考点2:模糊查询 LIKE
- 题目示例:查询所有邮箱地址以“163.com”结尾的员工信息。
- 解析:考的是
LIKE操作符和通配符(代表任意多个字符)和_(代表一个字符),这道题的条件应该写成email LIKE '%163.com',常犯的错误是忘了通配符,直接写email = '%163.com',这样是查不到结果的,因为要求完全匹配。
- 考点3:处理空值 NULL
- 题目示例:找出“成绩表”中缺考(成绩为NULL)的学生学号。
- 解析:这是个大坑!NULL不能用或
<>这样的比较运算符来判断,你必须用IS NULL或IS NOT NULL,写成成绩 = NULL是错的,结果永远为空,因为NULL在数据库里代表“未知”,两个未知比较结果也是未知,不会被当作“真”。
第二部分:核心难点——多表连接查询
这是笔试中最爱考,也最容易让人头晕的部分,核心思想是:如何把分散在不同表里的信息,通过它们之间的关联字段拼凑在一起。

- 考点4:INNER JOIN(内连接)
- 题目示例:查询所有选了“数据结构”这门课的学生的姓名和成绩,假设有“学生表”、“课程表”和“选课表”。
- 解析:这是最常用的连接,它只返回两个表中连接字段能匹配上的行,思路是:
学生表和选课表通过学号连接,选课表和课程表通过课程号连接,然后过滤条件课程名 = ‘数据结构’,SQL写出来会涉及到两个JOIN ... ON ...,考官想看你能不能理清表之间的关系链。
- 考点5:LEFT/RIGHT JOIN(左/右外连接)
- 题目示例:查询所有学生的选课情况,包括一门课都没选的学生。(来源:常见的左连接应用题)
- 解析:内连接只能查出选了课的学生,要包括没选课的,就要用左连接,以“学生表”为左表,
LEFT JOIN“选课表”,那么即使某个学生在“选课表”里没有匹配的记录(即没选课),他也会出现在结果里,只是选课相关的字段会是NULL,这道题考的是你是否理解“主表”的概念,以及内连接和外连接的区别。
- 考点6:自连接
- 题目示例:在一张“员工表”里,有员工ID和其经理的ID(经理也是员工),找出所有员工及其经理的姓名。
- 解析:这需要把一张表当成两张不同的表来用,我们可以把员工表“复制”成两份,一份叫
e1(代表员工),一份叫e2(代表经理),然后连接条件就是e1.经理ID = e2.员工ID,这样就能从e2里取出经理的名字,这个考点在于思维的转换。
第三部分:进阶挑战——聚合与分组 里出现“每个”、“各种”、“统计”等字眼时,就要立刻想到分组聚合。
- 考点7:GROUP BY 和 HAVING
- 题目示例:统计每门课程的平均分,并只显示平均分大于80分的课程。
- 解析:步骤是:1)按
课程ID或课程名进行GROUP BY分组,2)对每组的成绩字段用AVG()函数求平均,3)这里的关键!WHERE是在分组前过滤行,而HAVING是在分组后过滤组,平均分大于80”这个针对分组结果的条件,必须放在HAVING子句里,不能放在WHERE里,这是最高频的考点之一。
- 考点8:综合难题——聚合+连接
- 题目示例:查询选修了超过3门课程的学生姓名。
- 解析:这是经典难题,综合了连接和分组聚合,思路是:1)先用“学生表”连接“选课表”,得到每个学生的选课记录,2)然后按
学生ID或姓名``GROUP BY,3)在HAVING子句里用COUNT(课程ID) > 3来过滤,难点在于如何组合这些子句。
第四部分:其他常见考点
- 考点9:子查询
- 解析:就是把一个查询的结果作为另一个查询的条件,找出比平均工资高的员工”,需要先写一个子查询
(SELECT AVG(工资) FROM 员工表)算出平均工资,再把它放在外层查询的WHERE 工资 > (子查询)中,要注意子查询返回的结果是一个值还是一组值,来决定用、IN还是EXISTS。
- 解析:就是把一个查询的结果作为另一个查询的条件,找出比平均工资高的员工”,需要先写一个子查询
- 考点10:UNION 合并结果集
- 解析:用于合并两个或多个SELECT语句的结果,要求是这些结果集的列数和数据类型必须兼容。
UNION会自动去重,如果不想去重要用UNION ALL,常考它和JOIN的区别:JOIN是左右拼接列(变宽),UNION是上下拼接行(变长)。
- 解析:用于合并两个或多个SELECT语句的结果,要求是这些结果集的列数和数据类型必须兼容。
总结一下:
做数据库笔试题,别慌,先仔细读题,明确要查什么,然后识别考点:是单表过滤?多表连接?还是分组统计?接着画个简单的思维导图,理清表之间的关系,一步步地把SQL子句搭起来,特别注意WHERE、GROUP BY、HAVING的执行顺序和区别,多练习几种经典题型,就能快速抓住要害。
本文由召安青于2026-01-13发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/79866.html
