SQL
入门预计上手 2-4 周星团 数据
岗位需求
3 核心 · 0 加分
在职岗位将其列为技能要求
核心岗位薪资带
18k-45k
核心要求岗位的月薪区间
需求趋势
上升 1稳定 2收缩 0
核心要求岗位的趋势分布
面试题库
高频真题 · 参考答案随题展开1. 内连接、左外连接、右外连接与全外连接有什么区别?
连接按匹配规则组合两表行。内连接只保留两表都能匹配上的行;左外连接保留左表全部行,右表无匹配处填 NULL;右外连接对称保留右表全部;全外连接保留两表所有行,各自无匹配处补 NULL(MySQL 不支持 FULL JOIN,需左连接 UNION 右连接模拟)。关键理解点:外连接的结果行数可能多于内连接(一对多匹配)也可能等于左表行数;WHERE 条件写在外连接的右表列上(如 右表.id 不为 NULL)会退化成内连接,筛选右表要放 ON 子句。笛卡尔积是无连接条件的全组合(行数等于两表行数之积),显式写 JOIN ON 永远优于逗号连接混 WHERE。能举两表小例子画结果集并讲 ON 与 WHERE 的差异即满分。
2. WHERE、GROUP BY、HAVING 的执行顺序是怎样的?
逻辑执行顺序为 FROM 加 ON 加 JOIN 生成数据集、WHERE 逐行过滤、GROUP BY 分组、聚合计算、HAVING 过滤组、SELECT 表达式、DISTINCT、ORDER BY、LIMIT。由此推出高频结论:WHERE 里不能用 SELECT 起的别名(多数数据库)也不能用聚合函数,因为它先于分组执行;HAVING 专管聚合后的组级条件(如 HAVING COUNT(星号) 大于 5),非聚合条件应尽量放 WHERE 提前减少参与分组的行数;GROUP BY 后 SELECT 的非聚合列必须在分组键里(SQL 标准如此,MySQL 宽松模式会随机取值造成隐患);ORDER BY 可用 SELECT 别名因为它在其后执行。经典题:统计每个部门平均工资并筛出大于一万的部门,按逻辑顺序口述一遍执行即可答好。
3. 窗口函数是什么?和 GROUP BY 有何不同?
窗口函数形如 函数() OVER (PARTITION BY 列 ORDER BY 列 ROWS BETWEEN...),它在不折叠行的前提下按窗口计算:分组聚合把每组压成一行,窗口函数保留每行并附上聚合或排名结果,这是本质区别。三类常用:排名类 ROW_NUMBER、RANK、DENSE_RANK(并列时是否跳号、是否唯一是考点);聚合类 SUM、AVG、COUNT 加 OVER 做累计求和与移动平均(ROWS 与 RANGE 边界的差别);偏移类 LAG、LEAD 取前后行算环比、NTILE 分桶。典型场景:每组 Top N(按分区排序取行号等于一,聚合与连接都难写)、去重保留最新一条、累计指标、连续登录判断(日期减行号分组)。窗口函数在 GROUP BY 之后、SELECT 阶段执行,不能出现在 WHERE,需套子查询。能现场写出每组 Top N 即达标。
4. 子查询与 JOIN 如何互相转换?各有什么坑?
标量子查询(返回单值)与相关子查询直观但可能逐行执行退化性能,现代优化器多数能改写为连接或半连接,但相关子查询无索引时仍是 O(n 平方)。IN 子查询与 EXISTS 语义等价(可转半连接),习惯口诀是小表驱动大表:外层小用 IN(先算子查询),外层大且子查询可走索引用 EXISTS(对外层每行探测);NOT IN 遇 NULL 语义坑(子查询含 NULL 则整表空结果),应改 NOT EXISTS。JOIN 的坑:一对多匹配导致行数放大与聚合重复计数(先聚合再连接),多表连接中间结果膨胀要小结果集驱动并过滤前置;逗号连接漏 ON 条件出笛卡尔积。CTE(WITH 子句)让多层嵌套可读,递归 CTE 处理树与图遍历。答出 NOT IN 的 NULL 坑与行数放大两点即体现实战。
5. EXISTS 与 IN 有什么区别?什么时候用哪个?
语义都判断集合非空,执行层面:IN 通常把子查询物化成集合(或哈希)再对外层行做成员判断,适合子查询结果集小、外层大的场景;EXISTS 是相关子查询的半连接,对外层每行执行子查询探测,依赖子查询表上有索引,适合外层小、子查询表大或有索引可用时。NULL 陷阱必须讲:当子查询可能返回 NULL 时,NOT IN 的结果直接为空集(NOT IN 遇 NULL 恒为 UNKNOWN),必须用 NOT EXISTS 替代;IN 的 NULL 只是不匹配该行,不影响其他值。性能建议以执行计划为准,优化器常把两者改写成相同的 semi join,写可读性好的即可;大数据量下 JOIN 加 DISTINCT 或 GROUP BY 也可表达半连接。给出「小驱大」原则与 NOT IN 陷阱的反例即完整。
官方文档
2 条服务器与 SQL 语法权威手册,5.7 与 8.0 版本齐备
教程写得最好的数据库文档之一,附中文翻译线索
推荐教程
2 条中文语法速查与示例,零成本过一遍语句
分析向 SQL 免费课程,从查询到窗口函数进阶
推荐课程
1 条浏览器内即时反馈的交互式课程,边学边练
上手实践
2 条免费分级练习集,从基础到递归与窗口函数全覆盖
经典在线题库,评测即写即得分
难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。

