【OracleSQL】WITH句の書き方や使い方


ここでは、ORACLEデータベースのSQLで、WITHの書き方や使い方を紹介します。

WITH句を使うことで、複数回記述されているサブクエリを1つにまとめることが出来ます。

複数回書かれているサブクエリを1つにまとめることが出来るので、可読性が高くなると言われています。

WITHは非常に便利な反面、使い方を間違えるとパフォーマンス悪化の原因ともなります。WITHを使ったSQLのチューニングについては↓で解説しておりますので参考にしてください。
>>WITHを使って遅い場合のチューニング方法

WITHを使ったSQLサンプル

WITHを使うことで複数回書かれている副問合せを1つにまとめて記述することが出来ます。

WITH句はSELECT句の前に「WITH 別名 AS (SELECT )列名 FROM テーブル名)」として使います。具体的には↓のように使います。

次のSQLでは「(SELECT * FROM tab2 )」という副問合せが2回登場しています。

select
    a.*
from
    tab1 a
    inner join (SELECT * FROM tab2 ) b on a.col1 = b.col1
    inner join (SELECT * FROM tab2 ) c on a.col1 = c.col1
;

上記のSQLをWITH句を使って、サブクエリを1つにまとめてみました。

WITH句を使うことで、2回記述されていた副問合せを「wt1 AS (SELECT * FROM tab2)」として1つにまとめることが出来ました。

WITH
    wt1 AS (SELECT * FROM tab2)
select
    a.*
from
    tab1 a
    inner join wt1 b on a.col1 = b.col1
    inner join wt1 c on a.col1 = c.col1
;

まとめ

WITH句を使うことで、複数回コーディングされているサブクエリを1つにまとめて記述することが出来ます。

WITH句は多用すると、逆にSQLが読みづらくなることもあるので、注意が必要です。

この他にも、SELECT文には様々な機能や使い方があります。
詳しくは「【SQL】SELECT文の書き方:サンプル多数あり」で解説していますのでぜひ参考にしてください。