SQL Patterns 是一个面向常见 SQL 模式的快速参考技能,整理 CTE、窗口函数、JOIN、分页、事务隔离级别与索引等常用写法。
一、CTE(公共表表达式) 提供 WITH 子句的基础用法,并给出链式 CTE 示例:先筛选活跃用户,再统计用户订单数,最后通过 LEFT JOIN 与 COALESCE 合并结果。
二、窗口函数快速参考 以表格形式列出常用函数及用途:ROW_NUMBER() 唯一连续编号、RANK() 有间隔排名(1, 2, 2, 4)、DENSE_RANK() 无间隔排名(1, 2, 2, 3)、LAG(col, n) 上一行值、LEAD(col, n) 下一行值、SUM() OVER 累计合计、AVG() OVER 移动平均。并给出示例:在 daily_sales 上按日期排序,取前一天收入(LAG)与累计收入(SUM OVER)。
三、JOIN 参考 说明 INNER JOIN 仅返回匹配行、LEFT JOIN 返回左表全部加右表匹配行、RIGHT JOIN 返回右表全部加左表匹配行、FULL JOIN 返回所有行且无匹配处为 NULL。
四、分页 给出两种方式:OFFSET/LIMIT 简单但大偏移量较慢;Keyset 分页通过 id > 42 ORDER BY id LIMIT 20 实现快速且可扩展的分页。
五、事务隔离级别 以表格列出 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE 四级在脏读、不可重复读、幻读上的表现与适用场景:READ UNCOMMITTED 很少使用(PostgreSQL 将其视为 READ COMMITTED);READ COMMITTED 是多数数据库默认;REPEATABLE READ 适合一致的多语句读取;SERIALIZABLE 适合关键不变量(序列化失败时需重试)。并提示:全局保持默认 READ COMMITTED,仅在逻辑需要时按事务提升级别;示例使用 BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE 并在 COMMIT 时准备重试。
六、索引快速参考 列出索引类型及最佳用途:B-tree 适合范围查询与 ORDER BY;Hash 仅适合精确等值;GIN 适合数组、JSONB、全文检索;Covering 用于避免回表查询。
七、反模式与修复 SELECT * 应显式列出列;WHERE YEAR(date) = 2024 应改为 WHERE date >= '2024-01-01';NOT IN 含 NULL 时改用 NOT EXISTS;N+1 查询改用 JOIN 或批量处理。
八、附加资源 提示可按需加载更详细的模式:./references/window-functions.md(完整窗口函数模式)、./references/indexing-strategies.md(索引类型、覆盖索引、优化)。
本技能为快速参考性质,未提供安装命令、版本要求、收费信息或具体数据库兼容性说明。