本文為您介紹SQL編碼的基本原則和詳細的編碼規範。
編碼原則
SQL代碼的編碼原則如下:
代碼功能完善。
程式碼清晰、整齊,程式碼的整體層次分明、結構化強。
代碼編寫充分考慮執行速度最優的原則。
代碼中需要添加必要的注釋,以增強代碼的可讀性。
規範要求並非強制性約束開發人員的代碼編寫行為。實際應用中,在不違反常規要求的前提下,允許存在可以理解的偏差。
SQL代碼中應用到的所有SQL關鍵字、保留字都需使用全大寫或小寫,例如select/SELECT、from/FROM、where/WHERE、and/AND、or/OR、union/UNION、insert/INSERT、delete/DELETE、group/GROUP、having/HAVING和count/COUNT等。不能使用大小寫混合的方式,例如Select或seLECT等方式。
4個空格為1個縮排量,所有的縮排均為1個縮排量的整數倍,按照代碼層次對齊。
禁止使用
select *操作,所有操作必須明確指定列名。對應的括弧要求在同一列的位置上。
SQL編碼規範
SQL代碼的編碼規範如下:
代碼頭部
代碼頭部添加主題、功能描述、作者和日期等資訊,並預留修改日誌及標題列,以便後續添加修改記錄。注意每行不超過80個字元,模板如下。
-- MaxCompute(ODPS) SQL --************************************************************************** -- ** 所屬主題: 交易 -- ** 功能描述: 交易退款分析 -- ** 建立者 : 有碼 -- ** 建立日期: 20170616 -- ** 修改日誌: -- ** 修改日期 修改人 修改內容 -- yyyymmdd name comment -- 20170831 無碼 增加對biz_type=1234交易的判斷 --**************************************************************************欄位排列要求
SELECT語句選擇的欄位按照每行1個欄位的方式編排。
首個選擇的欄位與SELECT之間隔1個縮排量。
換行縮排2個縮排量後,添加逗號再輸入其它欄位名。
2個欄位之間的逗號分隔字元緊跟在第2個欄位的前面。
AS語句應與相應的欄位在同一行,多個欄位的AS建議盡量對齊在同一列上。

INSERT子句排列要求
INSERT子句寫在同一行,請勿換行。
SELECT子句排列要求
SELECT語句中所用到的from、where、group by、having、order by、join和union等子句,需要遵循如下要求:
換行編寫。
與相應的SELECT語句靠左對齊編排。
子句首個單詞後添加2個縮排量,再編寫後續的代碼。
WHERE子句下的邏輯判斷符and、or等,與WHERE靠左對齊編排。
超過2個縮排量長度的子句加1個空格後,再編寫後續代碼,例如order by和group by等。

運算子前後間隔要求
算術運算子、邏輯運算子前後要保留1個空格,並寫在同一行(超過每行80個字元長度的限制除外)。

CASE語句的編寫
CASE語句可以用於SELECT語句中對欄位值進行判斷取值的操作。CASE語句編排的規則如下:
WHEN子語在CASE語句的同一行,並縮排1個縮排量後開始編寫。
每個WHEN子句盡量在1行內編寫,如果語句較長可以換行。

CASE語句必須包含ELSE子句,ELSE子句與WHEN子句對齊。
查詢嵌套編寫規範
在資料倉儲系統ETL開發中經常使用子查詢嵌套,其編寫規範樣本如下。

表別名定義約定
一旦在SELECT語句中給動作表定義了別名,在整個語句中對此表的引用都必須以別名替代,所以需要給所有的表添加別名。
表別名採用簡單字元命名,建議按a、b、c、d…的順序進行命名,並避免使用關鍵字。
多層次的嵌套子查詢別名之前要體現層次關係,SQL語句的別名需要分層命名,從第1層次至第4層次,分別用P(Part) 、S(Segment)、 U(Unit) 和D(Detail)表示。您也可以用a、b、c、d來表示第1層次到第4層次。
對於同一層次的多個子句,在字母后加1、2、3、4……區分,並根據情況對錶別名添加註釋。

SQL注釋
每條SQL語句均應添加註釋說明。
每條SQL語句的注釋單獨成行,並放在語句的前面。
欄位注釋緊跟在欄位後面。
對不易理解的分支條件運算式添加註釋。
對重要的計算添加註釋,說明其功能。
過長的函數實現,應將其語句按實現的功能分段,添加註釋進行說明。
添加常量及變數的注釋時,應注釋被儲存值的含義(必選),合法取值的範圍(可選)。
將滑鼠放置對應SQL語句之後,使用
Ctrl+/或Cmd+/快速鍵即可注釋當前語句。如果您需要注釋多行語句,則可以選中需要注釋的語句,使用Ctrl+/或Cmd+/批量完成注釋。說明Windows系統僅支援使用
Ctrl+/快速鍵注釋SQL語句。Mac系統僅支援使用
Cmd+/快速鍵注釋SQL語句。