---
name: sql
description: >
  编写或审查标准 SQL 与跨库查询。
  Use when: 写 SELECT/DML/DDL、查询优化、跨 MySQL/PostgreSQL/Oracle/SQL Server 的 SQL。
  Do not use when: 仅某一方言专属运维——改读 mysql/postgresql/oracle/sqlserver；Redis 改读 redis；金蝶 KSQL 改读 kd-ksql。
---

# SQL（方言路由 + 标准写法）

先判定方言，再加载对应方言 skill。本 skill **不是角色扮演**。

## When / Do not

**Use when**：写/改查询、跨库兼容、通用 SQL 风格与索引意识。  
**Do not use when**：单一方言专属能力已明确 → 直接方言 skill；KSQL/苍穹查询 API → kd-ksql / ok-cosmic。

## Input / Output

| Input | Output |
|-------|--------|
| 方言（若已知）、表/字段、查询目标 | 可执行 SQL + 方言假设 + 索引/性能注意 |

## Steps

```
- [ ] 1. 判定方言 → 明确则 read 对应方言 SKILL 全文
- [ ] 2. 明确 SELECT 字段；禁止无说明的 SELECT *
- [ ] 3. JOIN 写清类型；WHERE 避免对列套函数导致索引失效
- [ ] 4. UPDATE/DELETE 必须有 WHERE（或用户确认全表意图）
- [ ] 5. 参数化，禁止拼接用户输入
- [ ] 6. 需要方言特性时只在该方言约束下使用
```

## 失败策略

| 失败 | 动作 |
|------|------|
| 方言不明且强依赖方言 | 先确认方言或读项目连接配置 |
| 与金蝶 ORM/KSQL 混用 | 改走产品线 skill |

## 方言路由

| 信号 | Skill |
|------|-------|
| MySQL / LIMIT / InnoDB | [../mysql/SKILL.md](../mysql/SKILL.md) |
| PostgreSQL / JSONB | [../postgresql/SKILL.md](../postgresql/SKILL.md) |
| Oracle / DUAL / ROWNUM | [../oracle/SKILL.md](../oracle/SKILL.md) |
| SQL Server / T-SQL | [../sqlserver/SKILL.md](../sqlserver/SKILL.md) |
| Redis | [../redis/SKILL.md](../redis/SKILL.md) |

细则：[references/details.md](references/details.md)（若存在）

## 验证

- 给出方言假设、关键 WHERE/索引说明、是否可 EXPLAIN
