見やすい SQL を書くための Tips
blog
tech
tech-tips
tech-sql
dbt モデルやダッシュボード向けの SQL を書くことが多いので戒めの意味も込めて見やすい SQL を書くための Tips をまとめてみました。
因みに私がよく書くダッシュボード向けの SQL は基本的に select, sum, avg, 日付操作くらいでレコード数もそんなに多くないので重い長大な SQL を書くような方とは観点が異なるはずです。
勢いで書いたので思い出したらどんどん追記します
1. フォーマッタで整形する
フォーマッタを使って統一感のある SQL を書きましょう。
sqlfmt が個人的におすすめです。
2. with 句を使う
ネストすると認知負荷が高まるので使ったほうがいいと思ってます。
良い例が全然浮かびませんが、以下のように最後の select 文が単純になっていると SQL 文をちょっと書き換えて様子見がしやすいです。
with
as (select id, name from table_a),
a as (select id, common_id from table_b),
b out as (
select a.id as `顧客ID`, a.name as `顧客名`, b.common_id as `共通ID`
from a
left outer join b on a.id = b.id
order by a.id
)select *
from out
3. 1つのサブクエリに1つの目的を持たせる
もちろん with 句で名前をつけたサブクエリの話をしてます。
ごちゃごちゃとしたサブクエリは読みづらいし再利用しづらいので1つのサブクエリに1つの目的を持たせるようにしましょう。
例えば最終出力のためにカラムをリネームするのであれば、そのためだけのサブクエリを作るといいです。
4. 省略表現を減らす
これはもはや好みの問題かもしれません。
例えば
select * from table_a
と書いてしまうとデータカタログを参照してカラム名を確認する必要が出てくるので結果的に手間になることがあります。
私は初登場するカラム名は明記するようにしてます。
order by 1, 2
order by all
なども便利ではあるものの、再利用性を重視したい!と思ったら避けるのが吉です。
left outer join table_b using (id)
もそうですね。いつも同じ書き方ができるとは限らないので
left outer join table_b on table_a.id = table_b.id
と書いて書き味をいつも同じにしておきたいです。
これ重要な論点だと思うのですが、生成AIをコーディングの補助に使う場合は愚直にしつこく書いたほうが結果的に楽だったりします。