返回 網站動態
DevTool 團隊

SQL 排版與格式規範指南:縮排、關鍵字大小寫與團隊風格統一

為什麼團隊的 SQL 總是格式混亂?這篇給出一套可直接落地的格式化規範:關鍵字大小寫怎麼選、縮排多寬合適、JOIN 與子查詢怎麼排、長欄位清單怎麼折行,以及用線上工具和編輯器外掛把規範自動執行起來的做法。

為什麼 SQL 格式化值得定規範

一段典型的「事故 SQL」長這樣:從日誌裡拷出來的單行查詢,兩三個 JOIN、五六個條件全擠在一起,改一個條件要在三百個字元裡找位置。而同一段查詢格式化後,JOIN 關係、條件分組、欄位清單一眼可讀——格式化的價值不是好看,是把查詢的結構顯性化,讓 review 的人能看懂邏輯。

但「格式化」沒有唯一正確答案:大寫還是小寫、縮排 2 還是 4、逗號在行首還是行尾,每支團隊都有自己的偏好。沒有規範時,程式碼庫裡會並存五種風格,diff 噪音淹沒真實改動。這篇給一套可直接落地的預設規範,並說明如何用工具自動執行——規範的最高形態是「不用人記得」。

先給工具入口:SQL 格式化線上工具支援 20 種方言(MySQL、PostgreSQL、SQLite、ClickHouse、Snowflake 等),關鍵字大小寫、縮排寬度、語句間空行都可調,貼上即出結果,還能一鍵壓縮回單行。下面的規範建議都可以用它當場驗證。

關鍵字大小寫:選一派,然後自動化

兩大流派的真實差異:

流派 主張 常見於
大寫(SELECT … FROM) 關鍵字醒目,與欄位名/表名區分強 傳統 DBA、Oracle 系、教材
小寫(select … from) 現代等寬字型下大寫反而降低可讀性,輸入成本低 新興團隊、ORM 混用場景

我們的建議:跟隨團隊主流,沒有主流就選大寫——它與後續要講的「欄位小寫」形成最大對比度。落地的關鍵不是選哪派,而是讓工具貫徹:線上工具的關鍵字大小寫選項選「大寫」,貼進去的任何風格出來都統一;編輯器側配 SQL Formatter 類外掛(多數底層是同一個 sql-formatter 引擎),儲存時自動格式化。

注意一個邊界:大小寫選項只作用於關鍵字,不動你的資料——WHERE name = 'Apple' 裡的 'Apple' 原樣保留。

縮排與折行:2 還是 4,以及欄位清單怎麼排

  • 縮排寬度:2 空格對 SQL 更友好——JOIN 與子查詢的層級天然深,4 空格會快速把欄位推到螢幕右側。跟隨程式碼庫主流約定時另說。
  • 欄位清單一列一行:SELECT 後多個欄位各佔一行,尾隨逗號(行尾逗號)——增刪欄位時 diff 只有一行。
  • JOIN 條件進 ON,過濾條件進 WHERE:ON o.user_id = u.id 管 JOIN 關係,WHERE u.status = 'active' 管結果過濾——格式化後這兩類條件各自歸位,混寫是 review 時最常抓的壞味道。
  • 子查詢整體縮排一級,別名對齊在外層。

這些規則在格式化工具裡大多自動完成(線上工具的預設輸出就是上述排版),要自訂的只有縮排寬度與語句間空行。

壓縮:格式化的反向需求真實存在

「把 SQL 壓回單行」聽起來反潮流,但兩個場景高頻:日誌與監控裡嵌入查詢(一行好檢索)、動態拼接 SQL 的程式碼審查(拉平看全貌)。壓縮的正確性有個隱蔽坑:-- 行註解的換行被抹掉後,註解會吞掉後面整條語句——合格的工具會先把行註解轉成 /* ... */ 塊註解再摺疊,語義不變。壓縮時字串裡的連續空格也會合併為一個,含精確空格的比對條件要用格式化而非壓縮。

把規範固化下來

一套完整的落地動線:

  1. 定規範:用本文預設值(關鍵字大寫、2 空格、欄位一列一行)或團隊投票微調,寫進 CONTRIBUTING 一頁紙。
  2. 工具執行:臨時場景用線上 SQL 格式化按方言選好選項;日常場景配編輯器外掛自動格式化。
  3. 存量遷移:老指令碼批次貼進線上工具統一風格,再按 diff review——格式化不改變執行計畫,效能零風險。
  4. 配套動線:查詢結果的 JSON 用站內 JSON 格式化整理;資料回填表格用 JSON 轉 CSV;CSV 資料要進查詢試跑用 CSV 轉 JSON。

Frequently Asked Questions

SQL 格式化用什麼工具好?

看場景:臨時貼上一段查詢用線上工具最快——本站的 SQL 格式化工具支援 20 種方言、關鍵字大小寫與縮排可調,還能一鍵壓縮回單行;日常寫程式碼則配編輯器外掛(VS Code 的 SQL Formatter 系外掛底層與線上工具同源),把規範固化進儲存動作。

SQL 關鍵字用大寫還是小寫?

兩種流派都能自圓其說:大寫派認為關鍵字醒目、與欄位名區分強,是傳統 DBA 風格;小寫派認為現代等寬字型下大寫反而降低可讀性,輸入成本低。關鍵是全團隊統一——格式化工具的關鍵字大小寫選項(保持原樣/大寫/小寫)能一鍵貫徹,比口頭約定可靠。

SQL 縮排用 2 空格還是 4 空格?

跟隨所在程式碼庫的主流約定:前端倉庫常是 2 空格,後端 Java/Go 倉庫常是 4。單獨維護的 SQL 檔案推薦 2 空格——JOIN 層級深時 4 空格會快速把欄位擠到螢幕右側。工具裡縮排寬度可調,遷移存量指令碼時選與原檔案一致的最省 diff。

格式化會改變 SQL 的執行效能嗎?

不會。格式化只動空白、換行與關鍵字大小寫,資料庫解析後的執行計畫完全相同;字串內容原樣保留。唯一要注意的是壓縮(摺疊為單行)時行註解會被轉成塊註解,語義等價但形態變化。