副問合せは、複数部分の問合せに応答します。たとえば、Taylorの部門で働いている人を判断するには、まずTaylorが働く部門を判断する副問合せを使用できます。その後、親SELECT
文で元の問合せに応答することができます。SELECT
文のFROM
句の副問合せは、インライン・ビューとも呼ばれます。任意の数の副問合せをインライン・ビュー内にネストできます。また、SELECT
文のWHERE
句の副問合せは、ネストした副問合せとも呼ばれます。ネストした副問合せには、最大255レベルの副問合せをネストできます。
副問合せは、別の副問合せを含むことができます。トップレベル問合せのFROM
句内の副問合せレベルの数には、制限がありません。WHERE
句には、最大255レベルの副問合せをネストできます。
副問合せにある列が、含まれる文の列と同じ名前を持つ場合、含まれる文の表の列に表名または別名で参照の接頭辞を付ける必要があります。文をさらに読みやすくするには、常に、表、ビューまたはマテリアライズド・ビューの名前または別名で副問合せの列を修飾します。
ネストした副問合せが、その副問合せから1レベル上位の親である文で参照する表の列を参照する場合、Oracleは相関副問合せを行います。親である文は、副問合せがネストしているSELECT
、UPDATE
またはDELETE
文のいずれかです。概念的に、相関副問合せは、親である文によって処理される行ごとに1回評価されます。しかし、オプティマイザは、問合せを結合として書き換えるか、他のなんらかの手法を使用して意味的に同等の問合せを形成することを選択する可能性があります。Oracleは、副問合せで指定された表内を検索した後、親である文で指定された表内を検索することによって、副問合せ内の未修飾列を解決します。
相関副問合せは、応答が親である文によって処理された各列の値に依存する複数部分の問合せに応答します。たとえば、相関副問合せを使用して、部門内で給与が平均給与以上の従業員を判断することができます。この場合、相関副問合せは独自で各部門の平均給与を計算します。
副問合せは、次の用途に使用します。
INSERT
またはCREATE
TABLE
文のターゲット表に挿入する一連の行を定義します。
CREATE
VIEW
またはCREATE
MATERIALIZED
VIEW
文のビューまたはマテリアライズド・ビューに含める一連の行を定義します。
UPDATE
文の既存の行に割り当てる1つ以上の値を定義します。
SELECT
、UPDATE
およびDELETE
文のWHERE
句、HAVING
句またはSTART
WITH
句における条件に対する値を定義します。
含まれる問合せによって操作される表を定義します。
表名を指定する場合と同様に、問合せを含むFROM
句に副問合せを指定することによってこれらのことを行います。INSERT
、UPDATE
およびDELETE
文においても、このようにして表のかわりに副問合せを使用することができます。
このように使用された副問合せには、相関変数を指定できますが、外部参照ではなく、その副問合せ内に定義された相関変数のみを指定できます。詳細は、「table_collection_expression」を参照してください。
1つの行から1つの列の値を戻すスカラー副問合せは、有効な書式の式です。構文でexpr
をコールするほとんどの場合に、スカラー副問合せ式を使用できます。詳細は、「スカラー副問合せ式」を参照してください。