ROW_NUMBER、RANK、DENSE_RANK 在并列值时分别返回什么名次?
围绕“ROW_NUMBER、RANK、DENSE_RANK 在并列值时分别返回什么名次”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确三者对并列和后续名次的编号规则差异。
SQL专题面试题第 3 页,显示第 101–148 题,共找到 148 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“ROW_NUMBER、RANK、DENSE_RANK 在并列值时分别返回什么名次”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确三者对并列和后续名次的编号规则差异。
围绕“用 SUM() OVER 算累计和时,默认窗口帧为什么会在排序值重复时算错”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确默认 RANGE UNBOUNDED PRECEDING 把同值行并入同帧的语义及改 ROWS 的修复。
围绕“标量子查询返回多行时报错,而返回零行时得到 NULL,这一语义如何使用和防御”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确标量子查询 0/1/N 行三种结果的语义及用 LIMIT 或聚合防御。
围绕“如何用 SQL 自连接查询员工及其直属上级的姓名”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确同表两次取别名并按外键连接的写法与 NULL 上级的处理。
围绕“集合运算对两侧 SELECT 的列有什么要求,结果列名和数据类型如何确定”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确列数相等、对应类型可隐式统一到公共类型、列名取第一个查询的规则。
围绕“用子查询改写 JOIN 时为什么有时必须加 DISTINCT 才能保证结果一致”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确一对多连接导致主表行重复而 IN/EXISTS 半连接不重复的语义差别。
围绕“如何用窗口函数实现「每个部门工资最高的两名员工」,并处理并列工资”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 PARTITION BY + ROW_NUMBER/RANK 子查询过滤模式及并列时选 RANK 还是加决胜排序键的决策。
围绕“UNION 和 UNION ALL 结果何时相同,为什么能确定无重复时应优先用 UNION ALL”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 UNION 隐式去重排序的开销及等价条件判断。
围绕“SELECT 里同时有 GROUP BY 和窗口函数时,窗口函数能看到哪些行”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确窗口在分组聚合之后、基于聚合结果行求值的逻辑顺序。
围绕“窗口帧的 ROWS BETWEEN 和 RANGE BETWEEN 在分组对等行处理上有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 RANGE 按值、ROWS 按物理行、GROUPS 按对等组的纳入规则。
围绕“为什么窗口函数不能写在 WHERE 里,想要过滤窗口结果该怎么办”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 WHERE 在窗口求值之前执行的顺序原因及外层子查询/CTE 过滤的写法。
围绕“窗口函数和 GROUP BY 都按分组计算,结果集结构上有什么本质区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确窗口函数不折叠行、在每行上附加组级计算的结构差异,不列举所有窗口函数。
围绕“PostgreSQL 显式事务中一条语句报错后,为什么后续语句都报 current transaction is a”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释事务进入失败状态必须回滚或用保存点恢复的设计理由。
围绕“PostgreSQL 咨询锁(advisory lock)与行锁的本质区别是什么,适合哪些应用场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕强调其不绑定具体行、按应用语义取锁的特性与典型用途,不列出全部咨询锁函数。
围绕“PostgreSQL 会话级与事务级咨询锁在释放时机上有什么区别,选错会导致什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答连接复用(连接池)下会话级锁泄漏的风险。
围绕“为什么给 PostgreSQL 大表加列默认值或建普通索引可能长时间锁表,有什么低影响的替代方案”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答 ACCESS EXCLUSIVE 锁的阻塞效果与 CONCURRENTLY 等低锁方案的取舍。
围绕“PostgreSQL 如何检测死锁,deadlock_timeout 参数控制的是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答等待超时后做环检测并选牺牲事务中止的机制与参数含义。
围绕“拿到 PostgreSQL 死锁日志后,如何从中还原出是哪些语句按什么顺序持锁造成的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要求会读日志中的进程、等待关系与涉及语句,给出固定加锁顺序的预防结论。
围绕“PostgreSQL 中把隔离级别设为 Read Uncommitted 会发生什么,脏读真的存在吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要指出 PostgreSQL 将其映射为 Read Committed 的实现决策。
围绕“为什么 PostgreSQL 提供 FOR NO KEY UPDATE 这种行锁,它比 FOR UPDATE 弱在哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要指出不修改键列的更新可用更弱锁从而减少与外键检查的冲突。
围绕“为什么更新父表主键或删除父表行时可能被子表外键检查阻塞,涉及哪些锁”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明外键检查在父行上取 KEY SHARE 锁与更新锁的冲突关系。
围绕“PostgreSQL 中每条单语句自动成事务与显式 BEGIN 多语句事务在错误处理上有何差别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较单语句失败即整体回滚与显式事务出错后只能 ROLLBACK 的状态差异。
围绕“PostgreSQL 的 ACCESS SHARE、ROW EXCLUSIVE、ACCESS EXCLUSIVE 这”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要能判断 DDL 与 DML 常见组合是否互斥,不深入每种子模式的罕用场景。
围绕“PostgreSQL 的 lock_timeout 与 statement_timeout 分别在哪一阶段中断语句,”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分等锁阶段与执行阶段的超时及设置顺序的建议。
围绕“长事务对 PostgreSQL 有哪些具体危害,为什么会让 VACUUM 无法回收死元组”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答快照持有所致的最小可见事务边界阻塞清理。
围绕“MVCC 带来的表膨胀是怎么形成的,PostgreSQL 靠什么机制回收旧版本”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答死元组来源与 VACUUM/autovacuum 的作用。
围绕“PostgreSQL 判断一个行版本对某事务是否可见时依据哪些信息”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说出 xmin/xmax、事务提交状态与快照的关系。
围绕“Read Committed 下单条 SQL 语句执行期间,其他事务提交的修改对该语句可见吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答语句级快照在语句开始时确定、执行中不受新提交影响的保证。
围绕“PostgreSQL 中 Read Committed 与 Repeatable Read 在同一事务多次读同一行时”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确每条语句取新快照与事务级快照的差别。
围绕“PostgreSQL 的只读可延迟事务(READ ONLY DEFERRABLE)在 Serializable 下能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答等待到安全快照从而避免只读事务序列化失败的条件与限制。
围绕“PostgreSQL 中行级锁和表级锁分别在什么操作下产生,如何互相影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明意向表锁与行锁的层级关系及冲突矩阵的基本思路,不列出全部锁模式细节。
围绕“PostgreSQL 保存点(SAVEPOINT)允许事务内部分回滚,它与重试整条语句的方案有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕用单条语句失败后保留已做工作的场景回答,并指出子事务的性能成本。
围绕“高频冲突场景下用 SAVEPOINT 包住语句逐条处理,为什么会带来子事务性能问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释子事务 ID 分配与可见性判断变复杂带来的开销及批量提交的替代。
围绕“PostgreSQL Serializable 隔离级别下事务可能因为什么失败,应用必须做什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确写偏序等序列化异常与错误码 40001 的重试要求。
围绕“PostgreSQL 中 SET TRANSACTION 与 SET SESSION CHARACTERISTICS”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分仅当前事务与会话默认两个作用域及在事务开始后不可更改的限制。
围绕“用 SELECT FOR UPDATE SKIP LOCKED 实现数据库任务队列时如何保证同一任务不被两个 wor”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答领取-处理-提交的事务边界与锁配合。
围绕“PostgreSQL 导出事务快照(pg_export_snapshot)解决的是什么一致性问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明多个并行连接共享同一快照做一致性读取的场景。
围绕“PostgreSQL 的 snapshot_too_old 参数为什么会让长事务报错,解决了什么运维问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答限制快照保留时间以避免无限膨胀的取舍。
围绕“PostgreSQL 的事务 ID 回卷问题是怎么产生的,为什么要求定期 VACUUM FREEZE”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答 32 位事务 ID 比较机制失效的风险与冻结旧元组的防护。
围绕“PostgreSQL 预备事务(PREPARE TRANSACTION)解决什么问题,为什么残留预备事务很危险”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答跨系统两阶段提交的用途及持锁阻塞 vacuum 的运维风险。
围绕“INSERT ON CONFLICT DO UPDATE 相比先查再插为什么能避免并发下的重复键错误”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答单条语句的原子性消除查插间隙的原理。
围绕“PostgreSQL 中两个事务并发更新同一行时,后到的事务会经历什么过程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分 Read Committed 下等待并重读最新版本与 Repeatable Read 下直接报错的差异。
围绕“权限系统的数据范围如“本部门可见”如何在 SQL 层稳定生效,又不拖垮列表查询”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确谓词下推、组织路径物化与索引匹配。
围绕“命令注入和 SQL 注入的共同根源是什么,调用系统命令时如何安全传参”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须归纳为「数据被拼进解释器」这一共性,并给出避免 shell、参数数组调用的做法。
围绕“除 SQL 外,LDAP、XPath、模板引擎注入的共同防御思路是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须抽象出「不可信输入进入表达式解释器」的统一模型与各类型的参数化/沙箱手段,不逐一展开语法。
围绕“页面不回显报错和数据时,如何识别与理解布尔型、时间型盲注的危害”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明通过响应差异与延迟推断数据的原理以建立危害认知,不给出可操作的注入工具用法。
围绕“参数化查询无法绑定表名和 ORDER BY 列名时,如何安全地支持动态排序”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确标识符不能作为参数绑定的限制并给出枚举白名单映射方案。
围绕“参数化查询为什么能根治 SQL 注入,它和字符串转义有什么本质区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明代码与数据分离、执行计划先定的机制及转义在字符集边界下的失效。