RM-BLOG

IT系技術職のおっさんがIT技術とかライブとか日常とか雑多に語るブログです。* 本ブログに書かれている内容は個人の意見・感想であり、特定の組織に属するものではありません。/All opinions are my own.*

【Oracle】WITH句について

OracleのWITH句の使い方


 

 
WITHを使うと副問い合わせ部分を別に切り出して定義することができる。
たとえば

select a.*
from (select sysdate as SYSDATE_DATE
            ,to_char(sysdate,'yyyy/MM/dd HH24:mi:ss') as SYSDATE_CHAR
      from dual
      ) a


は、
副問い合わせ部分の表別名aをWITHで切り出して

with b as 
(select sysdate as SYSDATE_DATE
       ,to_char(sysdate,'yyyy/MM/dd HH24:mi:ss') as SYSDATE_CHAR
 from dual
) 
select
  b.*
from b

と記述することができる。
両方とも結果は同じ。
※「WITH b」にしたのは流行に乗っかったネタです。意味はありません

この程度ならいちいちWITHにする必要もない気がするが、
同一の副問い合わせとの結合を複数個必要としている場面などで、
毎回同じ副問い合わせを書いていると、
効率や保守性が悪いので、こうやってWITHで切り出すやり方を使うとその辺がクリアになる。

個人的にはあまりなじみがないのだが、
この前ちょっと遭遇したので備忘録で残してみる。