ここでは、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文の書き方:サンプル多数あり」で解説していますのでぜひ参考にしてください。