3.6.8. FROM 句
FROM 句は SELECT、UPDATE、DELETE ステートメントのターゲットテーブルを指定します。
構文の例:
- FROM table [[AS] alias]
- FROM table1 [INNER|LEFT OUTER|RIGHT OUTER|FULL OUTER] JOIN table2 ON join-criteria
- FROM table1 CROSS JOIN table2
- FROM(subquery)[AS] エイリアス
- FROM TABLE(subquery)[AS] エイリアス。詳細は、「 ネストされたテーブル」を参照してください。
- FROM table1 JOIN /*+ MAKEDEP */ table2 ON join-criteria
- FROM table1 JOIN /*+ MAKENOTDEP */ table2 ON join-criteria
- FROM /*+ MAKEIND */ table1 JOIN table2 ON join-criteria
- FROM /*+ NO_UNNEST */ vw1 JOIN table2 ON join-criteria
- FROM table1 left outer join /*+ optional */ table2 ON join-criteria詳細は、「 Federated optimizations 」の オプションで参加 します。
- FROM TEXTTABLE… 詳細は、TEXTTABLE を参照してください。
- FROM XMLTABLE… 詳細は「 XMLTABLE 」を参照してください。
- FROM ARRAYTABLE… 詳細は、ARRAYTABLE を参照してください。
- FROM OBJECTTABLE… 詳細は、「 OBJECTTABLE 」を参照してください。
- FROM JSONTABLE… 詳細は JSONTABLE を参照してください。
- FROM SELECT… 詳細は「 Subqueries 」の「 Inline views 」を参照してください。
From 句のヒント
from 句のヒントは、通常、影響を受ける句の前にあるコメントブロックに指定されます。MAKEDEP および MAKENOTDEP は、影響を受ける句の後にはcomment でない形式でも表示される可能性があります。複数のヒントをその句に適用する場合は、ヒントを同じコメントブロックに配置する必要があります。
ヒントの例
FROM /*+ MAKEDEP PRESERVE */ (tbl1 inner join tbl2 inner join tbl3 on tbl2.col1 = tbl3.col1 on tbl1.col1 = tbl2.col1), tbl3 WHERE tbl1.col1 = tbl2.col1
FROM /*+ MAKEDEP PRESERVE */ (tbl1 inner join tbl2 inner join tbl3 on tbl2.col1 = tbl3.col1 on tbl1.col1 = tbl2.col1), tbl3 WHERE tbl1.col1 = tbl2.col1
依存する結合ヒント
MAKEIND
、MMAKEDEP
、および MAKENOTDEP
は、依存する結合動作を制御するのに使用できるヒントです。オプティマイザーがクエリー構造、メタデータ、および費用情報に基づいて最も最適な計画を選択しない場合にのみ使用してください。このヒントは、FROM
キーワードに続くコメントに表示されます。このヒントは、名前付きテーブルだけでなく、FROM
句に対して指定できます。
- MAKEIND
- 句が依存する参加の独立(実行)側のものである必要があることを示します。
- MAKEDEP
- 句が参加に依存する(フィルターされた)側でなければならないことを示します。
- MAKENOTDEP
- 句が参加に依存する(フィルター処理)されないようにします。
MAKEDEP
および MAKEIND
で以下のオプションの MAX
引数および JOIN
引数を使用できます。
- MAKEDEP(JOIN)
- 結合全体をプッシュする必要があることを示します。
- MAKEDEP(NO JOIN)
- 結合全体をプッシュしないことを示します。
- MAKEDEP(MAX:val)
- 独立した結合は、独立した側からの値の最大数より少ない場合にのみ実行する必要があります。
他のヒント
NO_UNNEST は、サブクエリー FROM 句またはビューに対して指定でき、周りのクエリーでネストされた SQL をマージしないよう planner に指示します。このプロセスは、ビューフラット化 と呼ばれます。このヒントは、Data Virtualization の計画にのみ適用され、ソースクエリーに渡されません。NO_UNNEST は、FROM キーワードに続くコメントに表示されます。
PRESERVE ヒントは、ANSI 結合ツリーに対して使用して、Data Virtualization オプティマイザーが結合を並べ替えることができるようにするのではなく、結合の構造を保持することができます。これは、Oracle ORDERED または MySQL STRAIGHT_JOIN ヒントと同様に機能します。
PRESERVE ヒントの例
FROM /*+ PRESERVE */ (tbl1 inner join tbl2 inner join tbl3 on tbl2.col1 = tbl3.col1 on tbl1.col1 = tbl2.col1)
FROM /*+ PRESERVE */ (tbl1 inner join tbl2 inner join tbl3 on tbl2.col1 = tbl3.col1 on tbl1.col1 = tbl2.col1)
3.6.8.1. ネストされたテーブル リンクのコピーリンクがクリップボードにコピーされました!
ネストされたテーブルは、TABLE
キーワードを含む FROM
句で表示できます。これらは、通常の join セマンティクスでビューを使用する代わりに使用されます。ネストされたテーブルに含まれるコマンドから展開された列は、結合基準、WHERE 句、およびその他のコンテキストで使用できます。ここでは、FROM 句を展開された列を使用できます。
ネストされたテーブルは、INNER
および LEFT OUTER
結合が使用される限り、前述の FROM
句の列参照に相関させることができます。これは、ネストされた式が手順または関数呼び出しである場合に特に便利です。
有効なネストされたテーブルの例
select * from t1, TABLE(call proc(t1.x)) t2
select * from t1, TABLE(call proc(t1.x)) t2
無効なネストされたテーブルの例
以下のネストされたテーブルの例は無効です。これは、t1
は FROM 句のネストされたテーブルの後に表示されるためです。
select * from TABLE(call proc(t1.x)) t2, t1
select * from TABLE(call proc(t1.x)) t2, t1
相関ネストされたテーブルを使用すると、相関行ごとに複数のテーブル式の実行が可能になります。