『俺的コーディングルールSQL編』によせて
『俺的コーディングルール SQL編』に刺激を受けて
私のSQLの書き方を紹介します。
紹介されている書き方と比較したらわかりやすいと思うので、
まずは上記のサイトで紹介されている書き方を以下に。
select f1.ID, f1.ITEM1, f1.ITEM2, f2.ITEM3, m1.USER_ID, m1.USER_NAME from table_head f1, table_detail f2, user_master m1 where not exists ( select 1 from tableXXX s1 where s1.ID = f1.ID ) and f1.ID = f2.ID and f2.USER_ID = m1.USER_ID and f2.ITEM3 = 'xxx' order by m1.user_id, f1.id, f1.item, f2.item
同じSQLなら、私は以下のように書いています。
select thd.ID, thd.ITEM1, thd.ITEM2, tdl.ITEM3, ums.USER_ID, ums.USER_NAME from TABLE_HEAD thd inner join TABLE_DETAIL tdl on thd.ID = tdl.ID inner join USER_MASTER ums on tdl.USER_ID = ums.USER_ID where not exists( select * from TABLEXXX txx where txx.ID = thd.ID ) and tdl.ITEM3 = 'xxx' order by ums.USER_ID, thd.ID, thd.ITEM, tdl.ITEM
ポイントは以下のとおり。
- タブインデント
- 理由:慣れの問題ですが、私はこちらの方がインデント操作が早くできます。ユーザからの急な要望を受けてやっつけでクエリ発行するときでも、それなりの体裁が整えやすいので後から見てわかりやすいです。(でもエディタによってはタブをスペースに変換できたりするので、ここにこだわる必要はないかもしれません。)
- 結合はJOIN
- 後ろカンマ
- 理由:これも慣れでしょうか。私にとっては前カンマよりも後ろのほうが見やすく感じます。確かに後で項目を追加する場合にカンマを忘れたりすることはありますが(^_^;)、やっぱり前カンマはちょっと気持ち悪い。
- テーブルの別名はわかりやすく
- 理由:テーブルがUSER_MSTならumsとか、3文字の略字で表します。他の人から見ても可読性が工場します。3文字と決めているのは、項目を並べたときにツラをあわせるためです。