備忘録

本の中の食べ物や日々の道具などについて書いたり消したり直したり

SQLのコーディングスタイル

はじめに

 プログラミング言語でソースの書き方にこだわりについての話題って良く見る。
メジャーどころは字下げスタイルあたりだろう。Wikipediaに記事があるくらいにメジャー。
http://ja.wikipedia.org/wiki/%E5%AD%97%E4%B8%8B%E3%81%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB

 SQLのコーディングスタイルって、わりとプロジェクトごとのこだわりが強いわりに明文化されていない。納得するものもあれば微妙だなあというものも。

改行しない

 短いものであれば可読性が低くていいし、他の言語から生成してるなら生成元を見られれば問題無し。

SELECT id,name,age FROM users

それでも改行無しで長いものを書かれると辛い。これが苦もなく読める人はなんなのだろう。

予約語ごとの塊で改行

 少しは見やすいスタイル。ある程度複雑なクエリになるとこれでも苦しくなってくるはず。

SELECT id,name,age 
FROM users

 これらの問題点はSELECTの所にCOUNTや計算などが入っり、複数のテーブルを参照したり条件が複雑化した場合に、視認性が一気に悪くなるところ。

カンマは前に

 なんとなく合理的なものなのだけどなんとなく不思議な気分になる前カンマ。

SELECT id
    ,name
    ,age
FROM users    

利点としては選択する項目を増やしたい場合、後ろにカンマがある場合だと

SELECT
    id,
    name,
    age
FROM
    users   

SELECT
    id,
    name,
    age,     --後ろにカンマを追加
    sex      --項目追加
FROM 
    users

と言った具合に、二行分変更する事になるが、前にカンマをうつスタイルになら一行分だけで済むからだ。

SELECT id
    ,name
    ,age
    ,sex     --カンマと項目の追加
FROM
    users    

 この場合、最初に選択してる項目がselectと同じ行なのは

SELECT
    id
    ,name
    ,age
FROM 
    users    

こんなかんじだと微妙だからなのかな。

空白スペースを置いて揃える

 そろってる感が大事な人がいるとこんな感じに。

SELECT id,name,age 
  FROM users

二つ目の予約語FROMの前に半角スペース2個いれてSELECTと長さを合わせる。

SELECT id,
       name,
       age 
  FROM users

 こちらも予約語SELECTのおしりに合わせる方向のスタイル。
見やすいなとは思うのだけどORDER BY等が入ると微妙に違和感を感じてしまって、ここまでして揃えなくても…と思う。

SELECT id,
       name,
       age 
  FROM users
 ORDER BY id
 WHERE age > 18

自分が書きがちなスタイル

 ざっと自分で書くときは「予約語のあとは改行、その範囲内の項目(SELECTなら選択項目名称、FROMなら参照テーブル名称)はインデント後に記述、カンマは後ろ」といった単純なスタイルで記述している。

SELECT 
    id,
    name,
    age 
FROM
    users
ORDER BY 
    id
WHERE 
    age > 18

おわりに

 改行なしは厳しいけどあとのスタイルは特に善し悪し無くて、そのプロジェクトごとに揃ってさえいれば問題ないかな、という認識だ。