ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
複雑なSQLの可読性を高める(WITH句)
スポンサード リンク

ORACLE9iから、WITH句がサポートされました。

WITH句で指定したSQLの結果は、VIEWの様にSQL内部から参照することができます。

これにより、インランインビュー、や、内部結合、外部結合を使った複雑なSQLを分かりやすく見せることが出来ます。

構文は、WITHキーワードの後に、副問合せSQL結果のVIEW名と、ASキーワードに続いて括弧内にSQLを指定します。

以下の例では、副問合せ結果の「view01」と表「table01」を内部結合しています。
  with  
   view01 as
      ( select column99 from table99 where column01 = '01' )
  select
   view01.column99, table01.column77
   from
    table01, view01
   where
     table01.column99 = view01.column99


副問合せが複数ある場合は、viewの結果をカンマ(,)で区切って指定します。
SQLは上から順番に実行されていきます。
  with  
   view01 as
      ( select column99, from table99 where column01 = '01' ) ,
   view02 as
      ( select column33 from table88 where table88.column01 = view01.column01 )
  select
   view02.column33, table01.column77
   from
    table01, view02
   where
     table01.column33 = view02.column33


例1) インラインビューを使用したSQLとWITH句を使用したSQL
   表「dept」の列「dept_kbn」が「B」のレコードの列「dept_id」と表「emp」の列「dept_id」を内部結合します

 ・インラインビューでSELECTした場合
SQL> select
  2   a.emp_id, a.emp_name, b.dept_id, b.dept_name
  3  from emp a, (select dept_id,dept_name from dept where dept_kbn = 'B') b
  4  where
  5   a.dept_id = b.dept_id;


 ・WITH句でSELECTした場合
SQL> with dept_view as
  2   (select dept_id,dept_name from dept where dept_kbn = 'B')
  3 select
  4  a.emp_id, a.emp_name, b.dept_id, b.dept_name
  5 from emp a, dept_view b
  6 where
  7  a.dept_id = b.dept_id;


スポンサード リンク


内部結合(INNER JOIN)
外部結合(OUTER JOIN、(+))
インラインビューの利用
複雑なSQLの可読性を高める(WITH句)
スカラー副問合せ
複数のSELECT文の結果をマージする(UNION、UNION ALL)
2つのSELECT文の結果の差異を取得する(MINUS)
2つのSELECT文の結果の重複データを取得する(INTERSECT)

SQL(DML2) へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ