Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » サブクエリの使用 » サブクエリのテスト

 

サブクエリと ALL テスト

ALL テストは、SQL 比較演算子 (=、>、<、>=、<=、!=、<>、!>、!<) のいずれかと組み合せて使用して、1 つの値をサブクエリが生成するデータ値と比較します。テストを実行するには、SQL は指定された比較演算子を使用して、テスト値を結果セットのデータ値のそれぞれと比較します。すべての比較の結果が TRUE になる場合、ALL テストは TRUE を返します。

次の例は、注文番号 2001 のすべての製品が出荷された後に受けた注文の注文 ID と顧客 ID を検索します。

SELECT ID, CustomerID
FROM SalesOrders
WHERE OrderDate > ALL (
   SELECT ShipDate
   FROM SalesOrderItems
   WHERE ID=2001 );
ID CustomerID
2002 102
2003 103
2004 104
2005 101
... ...

このクエリを実行すると、メイン・クエリは、注文番号 2001 のすべての製品の出荷日に対して、各注文の注文日をテストします。注文日が注文番号 2001 のすべての出荷の出荷日より後であれば、SalesOrders テーブルの注文 ID と顧客 ID が結果セットに示されます。このように ALL テストは AND 演算子に似ています。前述のクエリは、「この注文は注文番号 2001 の最初の製品が出荷される前に受けたもので、なおかつ注文番号 2001 の 2 番目の製品が出荷される前に受けたもので、なおかつ ...」というように解釈できます。

ALL 演算子についての注意

ALL テストには、このほかに 3 つの重要な特徴があります。

  • 空のサブクエリの結果セット   サブクエリが空の結果セットを生成した場合、ALL テストは TRUE を返します。結果がない場合、比較テストが結果セットのどの値に対しても適用しているというのは真なので、これは理にかなっています。

  • サブクエリの結果セットの NULL 値   結果セットのいずれかの値に対する比較テストが FALSE の場合、ALL は FALSE を返します。すべての値が TRUE の場合は TRUE を返します。それ以外の場合は、UNKNOWN を返します。たとえば、サブクエリの結果セットに NULL 値があっても、NULL 以外のすべての値の探索条件が TRUE の場合などです。

  • ALL テストの否定   次の 2 つの式は同じではありません
    NOT a = ALL (subquery)
    a <> ALL (subquery)

    このテストの詳細については、ANY、ALL、または SOME に続くサブクエリを参照してください。