|
スポンサード リンク
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;
|
スポンサード リンク
|