关于 writing-sql
writing-sql 是一项用于编写和审查 SQL 的技能,规定统一的纵向排版与大写关键字。它适用于需要规范短查询和复杂查询格式的项目,也涵盖嵌入 PHP 的 SQL。
主要功能
- 01SQL 关键字使用大写
- 02每个子句独占一行
- 03子句内容缩进排列
- 04每行书写一个列名
- 05JOIN 与条件的排版规则
- 06按 SQL 场景提供参考
适用场景
- 01统一短查询与复杂查询格式
- 02检查 SQL 是否符合排版规则
- 03编写 PHP 字符串中的 SQL
- 04查阅 DDL 或 DML 规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ borkweb/ skills --skill writing-sql安装后在 Claude Code 中输入/writing-sql确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/complex.mdddl.mddml.mdphp.md详细介绍
编写 SQL
概述
本项目中的所有 SQL 都遵循严格的纵向排版风格:每个顶层关键字单独占一行,其下的内容均缩进。
短查询也不例外。 单列、单表、单条件的查询,排版方式与包含 10 个 JOIN 的复杂查询相同。
规则
关键字大小写
所有 SQL 关键字均使用大写:SELECT、FROM、WHERE、JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN、ON、AND、OR、NOT、IN、EXISTS、BETWEEN、LIKE、IS NULL、IS NOT NULL、INSERT INTO、VALUES、UPDATE、SET、DELETE FROM、ORDER BY、GROUP BY、HAVING、LIMIT、OFFSET、AS、CASE、WHEN、THEN、ELSE、END、UNION、UNION ALL、EXCEPT、INTERSECT、WITH、RECURSIVE、OVER、PARTITION BY、ROWS、RANGE、ON DUPLICATE KEY UPDATE、CREATE TABLE、ALTER TABLE、DROP TABLE、ADD COLUMN、DROP COLUMN、MODIFY COLUMN、DEFAULT、NOT NULL、PRIMARY KEY、FOREIGN KEY、REFERENCES、AUTO_INCREMENT、ENGINE、CHARSET、COLLATE、INDEX、UNIQUE KEY、IF EXISTS、IF NOT EXISTS、CASCADE。
纵向布局
每个顶层子句关键字都必须单独占一行,左侧不缩进。属于该子句的所有内容都应在其下方缩进一级(4 个空格)。
顶层子句关键字:SELECT、FROM、WHERE、ORDER BY、GROUP BY、HAVING、LIMIT、SET、VALUES、ON DUPLICATE KEY UPDATE。
列
每行一个列,缩进并在末尾加逗号:
SELECT
a.name,
a.weight_kg,
a.birth_date
FROM 和 JOIN
JOIN 应缩进在 FROM 下方。ON 应缩进在 JOIN 下方。内连接使用裸 JOIN(INNER 关键字多余)。需要外连接时,明确使用 LEFT JOIN 或 RIGHT JOIN:
FROM
animals a
JOIN species s
ON a.species_id = s.id
LEFT JOIN habitats h
ON a.habitat_id = h.id
多条件 JOIN——每个条件单独占一行,并以 AND 开头:
FROM
animals a
JOIN observations o
ON a.id = o.animal_id
AND o.observed_at >= :start_date
AND o.status = 'confirmed'
WHERE
第一个条件缩进。后续行保持相同缩进,并以 AND/OR 开头:
WHERE
s.class = :class
AND h.region = :region
AND a.released_at IS NULL
ORDER BY / GROUP BY
ORDER BY
a.name ASC
GROUP BY
s.id,
h.name
LIMIT / OFFSET
LIMIT
:limit
OFFSET
:offset
条件示例
只阅读与正在编写或审查的 SQL 相关的参考文档:
- 复杂查询:子查询、CTE、CASE、窗口函数和集合运算。
- DML:INSERT、UPDATE 和 DELETE。
- DDL:迁移中的 CREATE、ALTER 和 DROP。
- PHP 中的 SQL:PDO、heredoc、wpdb、Laravel 和动态片段。
宿主语言字符串中的 SQL 也遵循相同的纵向布局,包括短查询。保留参数绑定和查询语义;格式调整不代表可以执行查询或更改架构。