目次
1行に多くを詰め込むひどい SQL をいくつも見てきたので、 書かずにはいられませんでした。
はじめに
コーディングスタイルはひとつの決めごとなのでいろんなパターンがあります。 ここでは私が考えたものを紹介しています。
私のコーディングスタイルにあわせる必要はありません、 でも見やすい SQL を書くように心がけてください。 他人の SQL を見る側としての、 とても切実な願いです。
全般
- 予約後は大文字にする。
SELECT
,CREATE
,AS
,CASE
など。- 行中のカンマの後にはスペースをつける。
COALESCE(a, b, c)
など。- 左6文字と右を意識して分ける。 (例参照)
- 条件を羅列するときの
AND
,OR
は行頭にくるようにする。 - 1行にいくつもの条件を並べると、見にくくなるため。
BETWEEN
に必要なAND
はここには含まれない。- 括弧で囲む時で、 次行の先頭に
AND
,OR
がくる場合は括弧(
よりも右にAND
,OR
が配置されるようにする。 UNION
,UNION ALL
はそれだけで1行にする。FROM
,JOIN
の後にサブクエリを用いるときは、 その行から始める。- テーブル別名にはできるだけ単語の頭文字を用いる。
SELECT のスタイル
SELECT
で抽出するカラムを区切るカンマは行末に配置する。SELECT
句では1行に2つ以上のカラム名を書かない。
サンプル
まずはちょっと崩した例を示します。
1 2 3 4 5 6 7 8 |
select ft.column_a, ft.column_b, tt.column_a tt_a, tyt.name from first_table ft join second_table st on st.id = ft.second_table_id left join third_table tt on tt.id = st.third_table_id and tt.type = 9 left join type_table tyt on tyt.id = tt.type_id where ft.value_1 <= 2 and ft.value_3 = 3 and ft.value_5 in (select st.value from sample_table st where st.weight > 100) order by ft.id, st.id desc, tt.id limit 10; |
これを上のガイドに沿って修正すると次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
SELECT ft.column_a ft_a, ft.column_b ft_b, tt.column_a tt_a, tyt.name type_name FROM first_table ft JOIN second_table st ON st.id = ft.second_table_id LEFT JOIN third_table tt ON tt.id = st.third_table_id AND tt.type = 9 LEFT JOIN type_table tyt ON tyt.id = tt.type_id WHERE ft.value_1 <= 2 AND ft.value_3 = 3 AND ft.value_5 IN (SELECT st.value FROM sample_table st WHERE st.weight > 100) ORDER BY ft.id, st.id DESC, tt.id LIMIT 10; |