目次

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

フォーマットというか、コーディング規約というか、インデントというか・・・

SQLってメインでやるよりもちょこっとやるって感じの人のほうが多いからあんまりみなさま思い入れがないせいで様々なスタイルが・・・ぐちゃぐちゃになっている

俺流メモ

今のところこんな感じがわかりやすくかつ読みやすいのではないのかと。 コレに近い SQLスタイルガイド - Qiita, 分析SQLのコーディングスタイル - クックパッド開発者ブログ カッコ位置に関しては再考の余地あり。

後からの見たときの視認性、後から編集するときの容易性、を重視しているつもり。

結果として行数がかなり増える記述となるが、通常のプログラミングに比べれば全然少ないので特に問題無いと考えている

この条件を加味するとこのようになる。

SELECT
    hogehoge.id AS hoge,
    hogehoge.name AS piyo,
    piyopiyo.age AS fuga
FROM
    hogehoge
LEFT JOIN
    piyopiyo
    ON
        hogehoge.id = piyopiiyo.id
LEFT JOIN
    (
        SELECT
            fugafuga.id
        FROM
            fugafuga
        WHERE
            fugafuga.name = 'tanaka'
    ) AS f
    ON
        hogehoge.id = f.id
WHERE
    hogehoge.name = 'Yamada'
    AND
    (
        piyopiyo.name = 'ya'
        OR
        piyopiyo.name = 'ma'
        OR
        piyopiyo.name = 'da'
    )
    AND
    piyopiyo.age > 10
GROUP BY
    hogehoge.address,
    piyopiyo.mail
HAVING
    hogehoge.address = 'tokyo'
ORDER BY
    hogehoge.id ASC,
    piyopiyo.age DESC

様々な流派

縦穴式住居人式

各句のキーワードのケツとパラメータの頭を揃えるスタイル。キーワード右揃えスタイルとも言うか。 古いタイプのプログラマに多い感じ。

結構昔から一定人数意味不明に存在している。結果的にスペースの位置がまっすぐ下までズボっと揃う縦穴スタイルになる。 英語ではこの間を水が流れるようなので「リバー」と言うらしい。

書きにくいし読みにくいのになぜ支持されているか不明なスタイル。 単なる思考停止の惰性と思われる。

非常に短い単純な SQL がなんとなく綺麗に書ける以外にメリットが無いので今後は廃れていくだろう。

SELECT *
  FROM hoge AS a
 WHERE a.id = 1
   AND a.name = "あああ"

問題として

SQLスタイルガイド · SQL style guide by Simon Holywell ここにもちゃんとしたスタイルとして乗っている

百歩譲って各句で揃えるのはわかるが AND とかが左側に来るのはそれはいいの?

挙げ句の果てには、BY だけが右側に飛び出るとか、何を考えているのか?理由はキーワードにスペースが入っているからのみ。

SELECT *
  FROM hoge AS a
 WHERE a.id = 1
   AND a.name = "あああ"
 GROUP BY a.age

「何がリバーだ、右揃えだ、読みやすい?、このクソばか野郎!あいつら死ね! あいつらが死んだら俺が墓に糞ぶっかけてやる!」

セクション流独立派

各句をセクションとして分断し、そのパラメータをインデントして列挙していく流派

SELECT
    id, name
FROM
    hoge AS a
WHERE
    a.id = 1 AND a.name = "あああ"

セクション流同一派

独立派と同じように句ごとで分けるのだが、句と最初のパラメータを同一行に書く流派。

SELECT id,
       name
FROM hoge AS a
WHERE a.id = 1 AND
      a.name = "あああ"

パラメータの開始位置がガタガタするのであまりすきじゃないな

細かい

大文字小文字のゆらぎ

コンマ前インデント揃え流

このように前に書くけど、インデントのレベルは他と揃える派。

SELECT
    hogehoge.id AS hoge
    , hogehoge.name AS piyo
    , piyopiyo.age AS fuga
FROM
    hogehoge

コンマ前穴ぼこ流

縦穴式住居に済む右揃え人に多いやり方で このように前に書くけど、コンマがキーワード側に行く派

SELECT hogehoge.id AS hoge
     , hogehoge.name AS piyo
     , piyopiyo.age AS fuga
  FROM hogehoge

少ないインデントで書けるもんこじらせ派

穴ぼこ流の人間が、インデントが深くなるから使えないに反論する記述

SELECT hogehoge.id AS hoge
     , hogehoge.name AS piyo
     , piyopiyo.age AS fuga
  FROM hogehoge
  LEFT JOIN piyopiyo
    ON hogehoge.id = piyopiyo.id

キーワードの1単語分だけ揃えるという・・・馬鹿だと思うが結構やるやつが居るから困る。

タグ