SQL这玩意儿,看十遍书不如自己敲二十条SQL。我这些年带过不少刚入门的新人,也帮同事冲刺过数据库岗位的面试,最后沉淀下来一套MySQL基础练习题,前前后后整理成100道。这套题不谈花哨技巧,就是围绕建表、查询、分组、连接、子查询这些基本功反复练。为什么要练?因为绝大多数人写不对SQL,不是缺乏智商,是缺“手感”——比如知道WHERE和HAVING都能过滤,却不清楚各自在什么时候生效;知道JOIN能把表合起来,遇到左连接为什么右表补了一堆NULL还是栽跟头。这套题覆盖的就是这些最容易被忽略的细节。
如果你刚学完MySQL语法,准备找工作或者做课程设计,这套题可以直接当热身场;如果离面试还有一周,我会建议你直接刷后面的综合模块,用题目把“快忘掉的知识点”重新拽回来。下面我会把题目设计思路、环境准备、核心考点、典型题解和避坑经验全部摊开讲,代码可以直接复制到本地跑。
1. 这套100道练习题的定位与设计思路
1.1 为什么是100道,不是20道也不是500道
一上来先聊一个大家肯定关心的问题:题量为什么偏偏是100道?
20道题肯定不够。SQL知识点看着不多,但每个知识点都有大量变体。一个普通的去重查询,直接DISTINCT是一种,GROUP BY是一种,COUNT(DISTINCT)又是一种;同一个业务需求,用关联子查询能写,用窗口函数也能写。如果没有足够数量的题目去反复刺激,你很难真正形成“一看到表结构,脑子里就浮现出几种可选写法”的条件反射。
500道又太多了。说实话,市面上动辄几百道、上千道的题库,很大一部分是重复题、偏题、炫技题。对于基础阶段的人来说,刷到最后就是机械劳动,边际收益非常低,还容易把信心磨没了。
100道是一个比较合适的数字。我按模块分摊,每个模块10道题,这样每一组都是一个独立的知识单元,练完一组休息一下,心理负担也小。题目难度分布大概遵循7:2:1——七成是基础语法和常见业务写法,两成是有点弯弯绕绕的组合场景,剩下一成是面试里容易出现的进阶写法。这样既能让你建立信心,又不会让整套题练完还在原地踏步。
1.2 十个模块的内容分布
这一百道题不是随手凑的,我按照SQL能力成长路径分成十个模块,每个模块解决一个具体能力点:
| 模块 | 题目范围 | 训练重点 |
|---|---|---|
| 1. 建库建表与约束 | 第1-10题 | 表结构设计、主键/外键/唯一约束、默认值、字符集 |
| 2. 增删改与基础维护 | 第11-20题 | INSERT、UPDATE、DELETE、事务回滚、TRUNCATE |
| 3. SELECT条件查询 | 第21-30题 | WHERE、IN、BETWEEN、LIKE、NULL判断 |
| 4. 排序与表达式 | 第31-40题 | ORDER BY、算术表达式、字符拼接、LIMIT分页 |
| 5. 聚合与分组 | 第41-50题 | COUNT/SUM/AVG/MAX/MIN、GROUP BY、HAVING |
| 6. 多表连接 | 第51-60题 | INNER JOIN、LEFT JOIN、RIGHT JOIN、自连接 |
| 7. 子查询 | 第61-70题 | IN/EXISTS子查询、标量子查询、FROM子查询 |
| 8. 日期与字符串函数 | 第71-80题 | 常用日期函数、文本处理函数、正则匹配 |
