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の図をまとめようと思います。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?