SQL

入门预计上手 2-4 周

星团 数据

学习定位零前置,可直接入门→ SQL →数据仓库

岗位需求

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 陷阱的反例即完整。

🔒 解锁完整面试题库与参考答案(Pro)

含高频追问与作答要点,系统准备面试。

官方文档

2 条

推荐教程

2 条
  • 中文语法速查与示例,零成本过一遍语句

  • Mode SQL 教程EN免费+付费

    分析向 SQL 免费课程,从查询到窗口函数进阶

推荐课程

1 条

上手实践

2 条

🔒 完整前置链分析 + 逐岗位引用明细

本页已免费展示学习定位与市场聚合;Pro 深读补齐完整前置依赖链分析与逐岗位引用明细 (核心/加分与深度档、岗位画像)。

知识分享

社区经验 · 管理员审核后展示

暂无分享——第一个来聊聊你的经验和踩坑吧。

有经验想分享?登录后可提交你的知识分享,管理员审核通过后将署名展示。

难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。