对空表执行不带 GROUP BY 的 SUM/COUNT 为什么返回一行而不是零行?
对空表执行不带 GROUP BY 的 SUM/COUNT 为什么返回一行而不是零行? 本文先给出可直接复述的结论,再用最小代码说明SQL 聚合 空表 SUM NULL COUNT 0 无 GROUP BY的工作方式、判断依据、项目边界和常见误区。
程序员面试题库第 81 页,收录第 4001–4050 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
对空表执行不带 GROUP BY 的 SUM/COUNT 为什么返回一行而不是零行? 本文先给出可直接复述的结论,再用最小代码说明SQL 聚合 空表 SUM NULL COUNT 0 无 GROUP BY的工作方式、判断依据、项目边界和常见误区。
查找「没有订单的客户」时 NOT EXISTS、NOT IN 和 LEFT JOIN ... IS NULL 哪个更稳妥? 本文先给出可直接复述的结论,再用最小代码说明SQL 反连接 NOT EXISTS NOT IN LEFT JOIN IS NULL的工作方式、判断依据、项目边界和常见误区。
COALESCE 和 NULLIF 分别解决什么问题,嵌套使用能实现什么常见转换? 本文先给出可直接复述的结论,再用最小代码说明COALESCE NULLIF 区别 空值转换的工作方式、判断依据、项目边界和常见误区。
相关子查询为什么可能很慢,什么条件下能被优化器改写为连接? 本文先给出可直接复述的结论,再用最小代码说明SQL 相关子查询 性能 改写 join的工作方式、判断依据、项目边界和常见误区。
SQL 的 CROSS JOIN 在什么场景下是正确选择而不是误用? 本文先给出可直接复述的结论,再用最小代码说明SQL CROSS JOIN 使用场景 笛卡尔积的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 的 WITH (CTE) 在什么版本后默认内联,MATERIALIZED 关键字何时该用? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL CTE MATERIALIZED 内联 12的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 的 DISTINCT ON 如何按指定排序取每组第一条,和标准 DISTINCT 有何不同? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL DISTINCT ON 每组第一条 ORDER BY的工作方式、判断依据、项目边界和常见误区。
只做去重时 DISTINCT 和 GROUP BY 语义是否完全等价,优化器如何看待它们? 本文先给出可直接复述的结论,再用最小代码说明DISTINCT GROUP BY 去重 等价 优化器的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 聚合函数的 FILTER (WHERE ...) 子句相比 CASE WHEN 条件聚合有什么优势? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL 聚合 FILTER WHERE 条件聚合的工作方式、判断依据、项目边界和常见误区。
如何用窗口函数把连续签到日期合并成连续区间(gaps and islands)? 本文先给出可直接复述的结论,再用最小代码说明SQL gaps and islands 连续区间 窗口函数的工作方式、判断依据、项目边界和常见误区。
SQL 中 WHERE 和 HAVING 的过滤顺序是什么,各自能引用什么? 本文先给出可直接复述的结论,再用最小代码说明SQL WHERE HAVING 区别 执行顺序的工作方式、判断依据、项目边界和常见误区。
为什么 MySQL 旧模式允许而 PostgreSQL 拒绝 SELECT 中未聚合也未分组的列? 本文先给出可直接复述的结论,再用最小代码说明GROUP BY 未分组列 ONLY_FULL_GROUP_BY PostgreSQL 报错的工作方式、判断依据、项目边界和常见误区。
ROLLUP、CUBE 和 GROUPING SETS 分别生成哪些分组层级,结果里的 NULL 如何区分? 本文先给出可直接复述的结论,再用最小代码说明SQL ROLLUP CUBE GROUPING SETS GROUPING 函数的工作方式、判断依据、项目边界和常见误区。
子查询结果含 NULL 时 NOT IN 返回空结果而 NOT EXISTS 正常,原因是什么? 本文先给出可直接复述的结论,再用最小代码说明NOT IN NULL 三值逻辑 NOT EXISTS 区别的工作方式、判断依据、项目边界和常见误区。
INTERSECT 和 EXCEPT 如何处理重复行,EXCEPT 的左右顺序为什么重要? 本文先给出可直接复述的结论,再用最小代码说明INTERSECT EXCEPT 集合运算 去重 顺序的工作方式、判断依据、项目边界和常见误区。
LEFT JOIN 的过滤条件写在 ON 里和写在 WHERE 里结果为什么不同? 本文先给出可直接复述的结论,再用最小代码说明LEFT JOIN ON WHERE 条件位置 区别的工作方式、判断依据、项目边界和常见误区。
多对多连接时 SQL JOIN 为什么会产生重复行,如何诊断并消除? 本文先给出可直接复述的结论,再用最小代码说明SQL JOIN 重复行 一对多 笛卡尔 诊断的工作方式、判断依据、项目边界和常见误区。
为什么 SQL 中 INNER JOIN 换成 LEFT JOIN 后结果行数可能变多也可能不变? 本文先给出可直接复述的结论,再用最小代码说明SQL INNER JOIN LEFT JOIN 结果行数 区别的工作方式、判断依据、项目边界和常见误区。
LAG/LEAD 在首行或末行返回 NULL,如何给出默认值并避免类型转换错误? 本文先给出可直接复述的结论,再用最小代码说明SQL LAG LEAD 默认值 NULL 偏移的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 的 LATERAL 连接如何简化「每组取最新一条」的查询? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL LATERAL join 每组 top N的工作方式、判断依据、项目边界和常见误区。
为什么只写 LIMIT 不写 ORDER BY 的查询结果不可依赖,即使多次执行看起来一样? 本文先给出可直接复述的结论,再用最小代码说明LIMIT 无 ORDER BY 结果不确定 顺序的工作方式、判断依据、项目边界和常见误区。
SQL SELECT 的逻辑执行顺序是什么,为什么 SELECT 里起的别名不能在同层 WHERE 用? 本文先给出可直接复述的结论,再用最小代码说明SQL 逻辑执行顺序 FROM WHERE SELECT 别名的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 的 MVCC 下,同一事务里两次相同的 SELECT 在什么隔离级别下结果可能不同? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL MVCC 隔离级别 不可重复读 快照的工作方式、判断依据、项目边界和常见误区。
为什么生产代码中通常不建议使用 NATURAL JOIN? 本文先给出可直接复述的结论,再用最小代码说明NATURAL JOIN 风险 隐式列匹配的工作方式、判断依据、项目边界和常见误区。
NTILE 和 PERCENT_RANK 都表达相对位置,分桶结果在什么数据下差异明显? 本文先给出可直接复述的结论,再用最小代码说明NTILE PERCENT_RANK 区别 分位数的工作方式、判断依据、项目边界和常见误区。
为什么 NULL = NULL 不成立,SQL 的三值逻辑如何让 WHERE 条件「静默丢行」? 本文先给出可直接复述的结论,再用最小代码说明SQL NULL 三值逻辑 UNKNOWN WHERE 丢行的工作方式、判断依据、项目边界和常见误区。
聚合函数遇到 NULL 列时各自如何处理,AVG 的分母是否包含 NULL 行? 本文先给出可直接复述的结论,再用最小代码说明聚合函数 NULL AVG SUM COUNT 忽略的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 排序时 NULL 默认排在哪,NULLS FIRST/LAST 如何影响分页? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL ORDER BY NULLS FIRST LAST 默认的工作方式、判断依据、项目边界和常见误区。
如何用 PostgreSQL 递归 CTE 查询组织架构下某节点的所有下级并防止环? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL 递归 CTE WITH RECURSIVE 层级 环检测的工作方式、判断依据、项目边界和常见误区。
ROW_NUMBER、RANK、DENSE_RANK 在并列值时分别返回什么名次? 本文先给出可直接复述的结论,再用最小代码说明ROW_NUMBER RANK DENSE_RANK 并列 区别的工作方式、判断依据、项目边界和常见误区。
用 SUM() OVER 算累计和时,默认窗口帧为什么会在排序值重复时算错? 本文先给出可直接复述的结论,再用最小代码说明SUM OVER 累计和 默认窗口帧 RANGE ROWS的工作方式、判断依据、项目边界和常见误区。
标量子查询返回多行时报错,而返回零行时得到 NULL,这一语义如何使用和防御? 本文先给出可直接复述的结论,再用最小代码说明SQL 标量子查询 多行报错 零行 NULL的工作方式、判断依据、项目边界和常见误区。
如何用 SQL 自连接查询员工及其直属上级的姓名? 本文先给出可直接复述的结论,再用最小代码说明SQL 自连接 self join 层级 员工上级的工作方式、判断依据、项目边界和常见误区。
集合运算对两侧 SELECT 的列有什么要求,结果列名和数据类型如何确定? 本文先给出可直接复述的结论,再用最小代码说明UNION 列数 类型匹配 结果列名 类型解析的工作方式、判断依据、项目边界和常见误区。
用子查询改写 JOIN 时为什么有时必须加 DISTINCT 才能保证结果一致? 本文先给出可直接复述的结论,再用最小代码说明SQL 子查询 改写 join DISTINCT 去重 语义等价的工作方式、判断依据、项目边界和常见误区。
如何用窗口函数实现「每个部门工资最高的两名员工」,并处理并列工资? 本文先给出可直接复述的结论,再用最小代码说明SQL 每组 Top N 窗口函数 ROW_NUMBER 并列的工作方式、判断依据、项目边界和常见误区。
UNION 和 UNION ALL 结果何时相同,为什么能确定无重复时应优先用 UNION ALL? 本文先给出可直接复述的结论,再用最小代码说明UNION UNION ALL 区别 去重 性能的工作方式、判断依据、项目边界和常见误区。
SELECT 里同时有 GROUP BY 和窗口函数时,窗口函数能看到哪些行? 本文先给出可直接复述的结论,再用最小代码说明窗口函数 GROUP BY 执行顺序 聚合后的工作方式、判断依据、项目边界和常见误区。
窗口帧的 ROWS BETWEEN 和 RANGE BETWEEN 在分组对等行处理上有什么区别? 本文先给出可直接复述的结论,再用最小代码说明窗口帧 ROWS RANGE GROUPS 区别 peer 行的工作方式、判断依据、项目边界和常见误区。
为什么窗口函数不能写在 WHERE 里,想要过滤窗口结果该怎么办? 本文先给出可直接复述的结论,再用最小代码说明窗口函数 WHERE 不能用 子查询过滤的工作方式、判断依据、项目边界和常见误区。
窗口函数和 GROUP BY 都按分组计算,结果集结构上有什么本质区别? 本文先给出可直接复述的结论,再用最小代码说明窗口函数 GROUP BY 区别 保留明细行的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 显式事务中一条语句报错后,为什么后续语句都报 current transaction is aborted 错误? 本文先给出可直接复述的结论,再用最小代码说明current transaction is aborted错误原因与处理的工作方式、判断依据、项目边界和常见误区。
数据库事务的 ACID 四个属性分别保证什么,哪些属性在并发下会打折扣? 本文先给出可直接复述的结论,再用最小代码说明事务 ACID 隔离性 并发的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 咨询锁(advisory lock)与行锁的本质区别是什么,适合哪些应用场景? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL advisory lock 咨询锁 应用层互斥的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 会话级与事务级咨询锁在释放时机上有什么区别,选错会导致什么问题? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL advisory lock 会话级 事务级 区别的工作方式、判断依据、项目边界和常见误区。
定位到阻塞其他会话的长事务后,pg_cancel_backend 与 pg_terminate_backend 该如何选择? 本文先给出可直接复述的结论,再用最小代码说明pg_cancel与pg_terminate杀会话区别的工作方式、判断依据、项目边界和常见误区。
先 SELECT 判断余额再 UPDATE 扣款为什么在高并发下可能超扣,有哪几种修复方式? 本文先给出可直接复述的结论,再用最小代码说明超卖 超扣 并发 检查再更新 竞态的工作方式、判断依据、项目边界和常见误区。
为什么给 PostgreSQL 大表加列默认值或建普通索引可能长时间锁表,有什么低影响的替代方案? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL 大表 DDL 锁表与在线建索引的工作方式、判断依据、项目边界和常见误区。
PostgreSQL 如何检测死锁,deadlock_timeout 参数控制的是什么? 本文先给出可直接复述的结论,再用最小代码说明PostgreSQL deadlock_timeout 死锁检测的工作方式、判断依据、项目边界和常见误区。
数据库死锁形成需要哪些条件,两个事务更新两张表的什么顺序会触发死锁? 本文先给出可直接复述的结论,再用最小代码说明数据库死锁 产生条件 更新顺序的工作方式、判断依据、项目边界和常见误区。