ヘッダーをスキップ

Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド リリース6.0 B25770-01 |
| 目次 | 索引

前へ | 次へ |

## 副問合せ

TimesTenでは、検索条件のSELECT文、CREATE VIEW文、DELETE文、UPDATE文またはUPDATEのSET句で、導出された表として副問合せがサポートされます。サポートされるのは、表の副問合せおよびスカラー副問合せです。行の副問合せはサポートされません。副問合せでは、HAVING句または結合表を使用して集計を指定できます。副問合せは相関も可能です。

説明

TimesTenでは、次のような特性を持つ問合せがサポートされています。

表の副問合せ:

- 副問合せは、マテリアライズド・ビューを作成する文を除き、任意の文のWHERE句に指定できます。表の副問合せは、1つの条件に1つのみ指定できます。これらの条件は、WHERE句、WHERE句内のOR式または結合された表のON句に指定できます。CASE式、HAVING句、マテリアライズド・ビューまたは外部結合のために+演算子を使用するWHERE句には指定できません。
- 副問合せは、EXISTSまたはNOT EXISTS条件、ANYまたはALLを使用する限定条件または比較条件に指定できます。比較条件および限定条件の両方に使用できる演算子は、=、<、>、<=、>=、<>です。UNIQUEまたはNOT UNIQUE演算子を使用して、副問合せを外部問合せに連結することはできません。
- 限定条件または比較条件に指定できる副問合せは1つのみであり、右側のオペランドとして指定する必要があります。
- 副問合せにORDER BY句を指定することはできません。
- FIRST NumRowsは、副問合せの文ではサポートされていません。
- 副問合せは、UNIONを指定できません。
- 限定条件または比較条件に指定された問合せでは、基礎となるSELECTの選択リストは単一の式にする必要があります。比較条件で指定される問合せの場合に、基礎となるSELECTが単一の行を戻すときは、その戻り値が選択結果になります。基礎となるSELECTが行を戻さない場合、戻り値はNULLです。副問合せが複数の行を戻す場合はエラーになります。

スカラー副問合せ（スカラー副問合せは単一の値を返します）:

- 外部問合せの各行に1行のみを戻すことを、コンパイル時にオプティマイザが検出できないような条件を含むスカラー副問合せは、検証できません。OR式にこのような副問合せを指定することはできません。
- 外部問合せおよびスカラー副問合せに、DISTINCT修飾子は指定できません。

SQL構文

[NOT] EXISTS | [NOT] IN (Subquery)

Expression {= | <> | > | >= | < | <= } [ANY | ALL] (Subquery)

Expression [NOT] IN (ValueList | Subquery)

例

次に、1件以上の未発送の発注を含む顧客リストの副問合せの例を示します。

##### 例11.5

SELECT customers.name FROM customers
WHERE EXISTS (SELECT 1 FROM orders
WHERE customers.id = orders.custid

        AND orders.status = 'un-shipped');

##### 例11.6

    SELECT customers.name FROM customers
    WHERE customers.id = ANY

(SELECT orders.custid FROM orders

    WHERE orders.status = 'un-shipped');

##### 例11.7

SELECT customers.name FROM customers
WHERE customers.id IN
(SELECT orders.custid FROM orders

    WHERE orders.status = 'un-shipped');

##### 例11.8

この例では、発注日と同じ日付に発送されたアイテムをリストします。

    SELECT line_items.id FROM line_items

WHERE line_items.ship_date =
(SELECT orders.order_date FROM orders

    WHERE orders.id = line_items.order_id);