← ClaudeAtlas

sql-querylisted

SQL 撰寫規範:參數化查詢、���引���善寫法、效能陷阱迴避與可讀性格式要求,涵蓋 SQL Server(T-SQL)與 Oracle 雙資料庫的語法差異與語意陷阱。當撰寫或審查原生 SQL 時自動套用。
CloudyWing/ai-dotfiles · ★ 0 · API & Backend · score 70
Install: claude install-skill CloudyWing/ai-dotfiles
# SQL 撰寫規範 本規範涵蓋 SQL Server(T-SQL)與 Oracle 兩種資料庫的原生 SQL 撰寫,內容包含查詢、DML、交易與可讀性格式。規範分三層,先列兩庫共通規範,再分列 SQL Server 專屬與 Oracle 專屬語法。撰寫或審查原生 SQL 時自動套用。 ## 共通規範 以下規範對 SQL Server 與 Oracle 皆適用。 ### 查詢格式與可讀性 - **關鍵字大寫**:`SELECT`、`FROM`、`WHERE`、`JOIN`、`ON`、`GROUP BY`、`ORDER BY`、`INSERT`、`UPDATE`、`DELETE` 等 SQL 關鍵字一律大寫。 - **內建函式名大寫**:`COUNT`、`SUM`、`SYSDATE`、`NVL`、`SUBSTR` 等內建函式名一律大寫,與關鍵字風格一致。 - **縮排**:使用 4 個空格,不使用 Tab。 - **每個子句獨立一行**:`SELECT`、`FROM`、`WHERE`、`JOIN`、`GROUP BY`、`ORDER BY`、`HAVING` 各佔一行。 - **逗號前置**:多欄位 `SELECT` 時,逗號置於行首以利增刪欄位時的 diff 乾淨度。 ```sql SELECT o.OrderId ,o.OrderDate ,c.CustomerName ,SUM(d.Quantity * d.UnitPrice) AS TotalAmount FROM Orders o INNER JOIN Customers c ON o.CustomerId = c.CustomerId INNER JOIN OrderDetails d ON o.OrderId = d.OrderId WHERE o.OrderDate >= @StartDate AND o.Status = @Status GROUP BY o.OrderId ,o.OrderDate ,c.CustomerName HAVING SUM(d.Quantity * d.UnitPrice) > @MinAmount ORDER BY o.OrderDate DESC; ``` ### 識別字大小寫 - 資料表名與欄位名照定義時的原始大小寫書寫,不刻意全大寫或全小寫。 - SQL Server 預設依 collation 判斷識別字,一般不區分大小寫;Oracle 對未加雙引號的識別字有折疊行為,見 Oracle 專屬節的「識別字大小寫折疊」。 ### 資料表與欄位別名 兩種別名採不同規則,此組合在 SQL Server 與 Oracle 皆合法且行為一致。 - **資料表別名一律不加 `AS`**:寫 `FROM Orders o`,不寫 `FROM Orders AS o`。Oracle 的資料表別名禁止加 `AS`(加了會回 `ORA-00933`),SQL Server 則加不加皆可,因此統一不加以求雙庫一致。 - **欄位別名一律加 `AS`**:寫 `SUM(...) AS TotalAmount`。`AS` 在此處是防呆哨兵,漏寫逗號時多欄位不會被靜默併成別名,而是直接語法錯誤,便於即時發現。 - **別名簡短且有意義**:資料表別名通常取名稱首字母小寫(如 `Orders o`、`CustomerAddresses ca`)。 ```sql -- ❌