副問合せの使用方法

副問合せは、複数部分の問合せに応答します。たとえば、Taylorの部門で働いている人を判断するには、まずTaylorが働く部門を判断する副問合せを使用できます。その後、親SELECT文で元の問合せに応答することができます。SELECT文のFROM句の副問合せは、インライン・ビューとも呼ばれます。任意の数の副問合せをインライン・ビュー内にネストできます。また、SELECT文のWHERE句の副問合せは、ネストした副問合せとも呼ばれます。ネストした副問合せには、最大255レベルの副問合せをネストできます。

副問合せは、別の副問合せを含むことができます。トップレベル問合せのFROM句内の副問合せレベルの数には、制限がありません。WHERE句には、最大255レベルの副問合せをネストできます。

副問合せにある列が、含まれる文の列と同じ名前を持つ場合、含まれる文の表の列に表名または別名で参照の接頭辞を付ける必要があります。文をさらに読みやすくするには、常に、表、ビューまたはマテリアライズド・ビューの名前または別名で副問合せの列を修飾します。

ネストした副問合せが、その副問合せ、またはネストした副問合せから1レベルまたは複数レベル上位の親である文で参照する表の列を参照する場合、Oracleは相関副問合せを行います。親である文は、副問合せがネストしているSELECTUPDATEまたはDELETE文のいずれかです。概念的に、相関副問合せは、親である文によって処理される行ごとに1回評価されます。しかし、オプティマイザは、問合せを結合として書き換えるか、他のなんらかの手法を使用して意味的に同等の問合せを形成することを選択する可能性があります。Oracleは、副問合せで指定された表内を検索した後、親である文で指定された表内を検索することによって、副問合せ内の未修飾列を解決します。

相関副問合せは、応答が親である文によって処理された各列の値に依存する複数部分の問合せに応答します。たとえば、相関副問合せを使用して、部門内で給与が平均給与以上の従業員を判断することができます。この場合、相関副問合せは独自で各部門の平均給与を計算します。

副問合せは、次の用途に使用します。

  • INSERTまたはCREATE TABLE文のターゲット表に挿入する一連の行を定義します。

  • CREATE VIEWまたはCREATE MATERIALIZED VIEW文のビューまたはマテリアライズド・ビューに含める一連の行を定義します。

  • UPDATE文の既存の行に割り当てる1つ以上の値を定義します。

  • SELECTUPDATEおよびDELETE文のWHERE句、HAVING句またはSTART WITH句における条件に対する値を定義します。

  • 含まれる問合せによって操作される表を定義します。

    表名を指定する場合と同様に、問合せを含むFROM句に副問合せを指定することによってこれらのことを行います。INSERTUPDATEおよびDELETE文においても、このようにして表のかわりに副問合せを使用することができます。

    このように使用される副問合せでは、その副問合せ内で定義した相関変数と、その副問合せを含む問合せのブロック内で定義した相関変数が使用できます。詳細は、table_collection_expression」を参照してください。

    1つの行から1つの列の値を戻すスカラー副問合せは、有効な書式の式です。構文でexprをコールするほとんどの場合に、スカラー副問合せ式を使用できます。詳細は、「スカラー副問合せ式」を参照してください。