Web竜の巣

知ってることを、知ってるだけ。

WITH句を使って、SQL再入門

SQL is Hard...

SQL。ふわっふわの言語であり、シンプルでありながら難しい言語。

 

自分もそうだったが、SQL嫌いな人はサブクエリの存在が一番の敵だと思う。

なので、サブクエリの存在を忘れてSQLについて一回再入門する記事を書こうと思う。

 

キーワードは「WITH」。

 

まず、サブクエリを捨てる

サブクエリが混ざるとSQLは途端にアレルゲンになる。

なぜかといえば、定義してる途中で定義が混ざってくるのが何よりよくない。

思考が上から下に流れていく途中で横に流れて戻ってきて……。

といった感じになってしまう。これが良くない。

 

そこで、まずサブクエリを忘れて、WITH句を使ってSQLを組もう。

裏を返せば、これがわかればサブクエリは簡単になる。

 

WITH sample_name AS (
SELECT
FROM
WHERE
)

SELECT

FROM

XXX JOIN
ON

WHERE

ORDER BY

 

これだけ。中身も書かないくらい簡単だが、こんな感じで書いてしまえばいいのだ。

サブクエリが上に来る、それだけのことともいえるが、これでいい。

「上で定義されたものを下で使う」というほとんどの言語で使われている構造に、

SQLの側を当てはめて書いてしまえばいいのだ。

FROM句の中でさらにサブクエリを書くことがなくなるだけで、

ぐっとSQLは読みやすく、簡単になる。

 

WITH句を使えば、入れ子SQLなんて醜い物はもう見る必要がない。

自分も読む気がないし、読まされるのも苦痛だ。

できる限り読みやすく、平易に書いていこう。高速化の心配は後でもできる。

 

また、読みやすいSQLは高速化も容易だし、

使わないでサブクエリにするのは後からでもできる。

読みにくいSQLはまず手を入れること自体が難しい。それを思えば万倍マシだ。

 

あとは、これをひな型に現場に応じて手を加えればいいと思う。

難しいことを一切投げ捨てて、そこからゆっくりと、小さく進めればいい。

 

小さく作って大きく膨らませていこう。