menu
書いてる野郎
orebike@gmail.com
フォーマットというか、コーディング規約というか、インデントというか・・・
SQLってメインでやるよりもちょこっとやるって感じの人のほうが多いからあんまりみなさま思い入れがないせいで様々なスタイルが・・・ぐちゃぐちゃになっている
今のところこんな感じがわかりやすくかつ読みやすいのではないのかと。 コレに近い SQLスタイルガイド - Qiita, 分析SQLのコーディングスタイル - クックパッド開発者ブログ カッコ位置に関しては再考の余地あり。
後からの見たときの視認性、後から編集するときの容易性、を重視しているつもり。
結果として行数がかなり増える記述となるが、通常のプログラミングに比べれば全然少ないので特に問題無いと考えている
FROM
キーワードは独立させてこの行にはそれ以外書かないJOIN
キーワードは独立させてこの行にはそれ以外書かないON
キーワードは独立させてこの行にはそれ以外書かないON
キーワードは JOIN
に対して一段インデントするON
に対してさらに一段インデントするAND
OR
キーワードは独立させてこの行にはそれ以外書かないORDER BY
キーワードは独立させてこの行にはそれ以外書かないこの条件を加味するとこのようになる。
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単語分だけ揃えるという・・・馬鹿だと思うが結構やるやつが居るから困る。