FROM句は、SELECT、UPDATE、DELETEステートメントのターゲット テーブルを指定します。
Syntax
FROM table [[AS] alias]FROM table1 [INNER|LEFT OUTER|RIGHT OUTER|FULL OUTER] JOIN table2 ON join-criteriaFROM table1 CROSS JOIN table2FROM (subquery) [AS] aliasFROM TABLE(subquery) [AS] aliasFROM LATERAL(subquery) [AS] aliasFROM table1 JOIN /*+ MAKEDEP */ table2 ON join-criteriaFROM table1 JOIN /*+ MAKENOTDEP */ table2 ON join-criteriaFROM /*+ MAKEIND */ table1 JOIN table2 ON join-criteriaFROM /*+ NO_UNNEST */ vw1 JOIN table2 ON join-criteriaFROM table1 left outer join /*+ optional */ table2 ON join-criteriaFROM ARRAYTABLE...FROM JSONTABLE...FROM OBJECTTABLE...FROM TEXTTABLE...FROM XMLTABLE...FROM ( SELECT ...FROM source_table(subquery) [AS] alias UNPIVOT (value_column FOR pivot_column IN (first_header_name, ..., last_header_name) ) [AS] unpivot_alias
FROM Clause Hints
MAKEINDMAKEDEPおよび は、 Dependent Join の振る舞いを制御するために使用されるヒントです。MAKENOTDEP これらは、OptimizationsがQuery構造、メタデータ、コスト情報に基づいて最適な計画を選択しない場合にのみ使用されるべきです。ヒントは、FROM句に続くコメントで表示することができます。ヒントは名前付きテーブルだけでなく、FROM句に対して指定することができます。
- Be sure that there is no whitespace between
/*and+when using e.g./*+ MAKEDEP */; - Configure your SQL client not to remove multi-line comments ( in Squirrel: Session -> Session Properties -> SQL -> Remove multi-line comment ( /* ... */ )
NO_UNNESTはSQL ClausesやViewからのSubqueryに対して指定することができ、入れ子になったSQLを周囲のQueryで結合しないようにプランナに指示することができます。このヒントは CData Virtuality Server プランニングにのみ適用され、ソースクエリには渡されません。NO_UNNESTは、FROM句を進めるコメントで表示されることがあります。
Joining Stored Procedures, Nested Table References, and Lateral Joins
プロシージャによる結合は、直接定義することも、サブクエリによる結合の特殊なケースとして定義することもできます:
SELECT * FROM t1, proc() t2;; /*normal syntax*/SELECT * FROM t1, (CALL proc()) t2;; /* subquery syntax */特殊なケースとして、テーブルからの出力を結合の反対側のプロシジャにパラメータとして渡す必要がある場合があります。この場合、ネストされたテーブル構文が使用されます。
TABLEキーワードを指定すると、FROM句に入れ子テーブルが出現します。これは、通常の結合セマンティクスを持つビューを使用する代替手段です。ネストされたテーブルに含まれるコマンドから投影された列は、他のFROM句から投影された列と同様に、結合条件やWHERE句などで使用することができます。
INNERとLEFT OUTERの結合が使用されている限り、入れ子テーブルは直前のFROM句列参照への相関参照を持つことができます。これは、入れ子になった式がプロシージャや関数の呼び出しである場合に特に便利です。
これがその例です:
SELECT * FROM t1, TABLE(CALL proc(t1.x)) t2FROM句のネストされたテーブルの後にt1があるため、無効な例です:
SELECT * from TABLE(CALL proc(t1.x)) t2, t1Using a correlated nested table may result in multiple executions of the table expression - once for each correlated row.
CData Virtuality Server では、TABLEキーワードの代わりにANSI 標準キーワードLATERALを使用できます:
SELECT * FROM t1, LATERAL(SELECT col1 FROM t2 WHERE t2.col2 = t1.x) t2