SQLの「WITH句」とは? - 複雑なクエリを読みやすくする
長くて複雑なSQLは、書くのも読むのも大変です。できるだけ見やすく分かりやすいクエリを書きたいですよね。
長いクエリでは、「サブクエリ」が使われていることが多いです。
そもそもサブクエリとは
サブクエリ(Subquery)とは、SQL文内に含まれる別のSQL文のことです。
先にサブクエリが実行され、その結果をメインクエリ(外部クエリとも呼ばれる)で使用します。サブクエリは、SELECT文、FROM句、WHERE句、HAVING句、IN句、EXISTS句など、SQL文のさまざまな箇所で使用できます。
複雑なサブクエリの問題
通常のサブクエリでも、単一の値を返すスカラーサブクエリなどなら、可読性や再利用性の点で大きな問題はありません。しかし、複雑な長いクエリになるほど、読みづらくなってしまいます。
複雑なサブクエリを「WITH句」で読みやすく!
冒頭のSLQをWITH句で書き直すと、以下のようになります。
// サブクエリ
WITH new_costomer_id AS (
SELECT
customer_id
FROM
orders
WHERE
orderdate > '2022-01-01'
)
// メインクエリ
SELECT
*
FROM
customers
WHERE
customer_id IN (
SELECT customer_id
FROM new_customer_id
);
構成がわかりやすくなり、理解しやすいクエリになります。
",(カンマ)"でつないで、複数のサブクエリも扱える
WITH句では、複数のサブクエリを扱うこともできます。複雑なデータ操作や条件指定を行うことができます。
WITH
一時的な名前1 AS (
サブクエリ1
),
一時的な名前2 AS (
サブクエリ2
)
SELECT 列名1, 列名2, ...
FROM 一時的な名前1
JOIN 一時的な名前2 ON 条件;
長いクエリに出会って理解の糸口がつかみにくい時でも、サブクエリの概念とWITH句の書き方をしっかり理解しておけば、紐解いていくことができるはずです。
明日は、JOINの図をまとめようと思います。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?