「SQL Fix」を紹介したついでに、私がSQLを書く際のフォーマットをご紹介。
基本的なルールは、以下の5つ。
- SELECT、FROM、WHEREなどのキーワードは、単品で1行。
- 「,」、AND、ORなどの接続系のものは行頭に配置。
- 1カラム1行。
- SELECT、UPDATE ~ SET等の後のカラム列挙はインデントなし。
- 副問い合わせなど()で囲まれた箇所は1レベルインデント。
具体的な例は以下の通り。(Syntax Hightlighterだとうまく表示できなかったので、ただのpreタグにて)
SELECT
IV.Col1
,IV.Col2
,IV.ColName
FROM
(
SELECT
T1.Col1
,T1.Col2
,T2.ColName
FROM
Table1 T1
INNER JOIN Table2 T2 ON
T2.Col1 = T1.Col1
AND T2.Col2 = T1.Col2
WHERE
T1.Col1 = 'hoge'
AND (
@Fuga IS NULL
OR T1.Fuga = @Fuga
)
ORDER BY
T1.DispOrder
) IV
入社後から6年間。色々と試行錯誤してきて、最終的に今の形に落ち着きました。
特に2の接続系のものを行頭に持ってくるというのは、仕様変更でカラム追加となった場合、たとえば「,」を行末にしていると、1行変更1行追加となってしまってどうも嫌だったので、1行追加で済む今の形が気に入っています。
例をあげると以下の通り。
行末の場合
こんなのに
SELECT
Col1,
Col2
FROM
~
Col3を追加したい
SELECT
Col1,
Col2, -- 変更
Col3 -- 追加
FROM
~
行頭の場合
こんなのに
SELECT
Col1
,Col2
FROM
~
Col3を追加したい
SELECT
Col1
,Col2
,Col3 -- 追加
FROM
~
SQLのフォーマットは、結構人によってまちまちで、それぞれこだわりがあって使っているような気がします。
皆さんはどんなSQLフォーマットを使っていますか?