構文:
operand
comparison_operator
ANY (subquery
)operand
IN (subquery
)operand
comparison_operator
SOME (subquery
)
比較演算子のあとに指定する必要のある
ANY
キーワードは、比較が、サブクエリーが返すカラム内の値の
ANY
に対して
TRUE
である場合に
「TRUE
を返すことを指定します。」次に例を示します。
SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
テーブル (10)
を含むテーブル t1
内に行があると仮定してください。10
以下である値 7
が
t2
の中にあるので、もしテーブル
t2
が
(21,14,7)
を含むなら、その式は
TRUE
です。もしテーブル
t2
が
(20,10)
を含むか、テーブル
t2
が空であれば、その式は
FALSE
です。この式は、テーブル
t2
に
(NULL,NULL,NULL)
が含まれている場合は不明です。
サブクエリーと共に利用されるとき、IN
という言葉は = ANY
のエイリアスとなります。従って、これら 2
つのステートメントは同じになります。
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
式のリストと共に利用されるとき、IN
と = ANY
は同義語ではありません。IN
は式のリストを取ることができますが、=
ANY
はできません。項7.2.3. 「比較関数と演算子」
を参照してください。
NOT IN
は
<> ANY
のエイリアスではありませんが、<>
ALL
のエイリアスです。項8.2.9.4. 「ALL
を持つサブクエリー」
を参照してください。
SOME
という言葉は
ANY
のエイリアスです。従って、これら 2
つのステートメントは同じになります。
SELECT s1 FROM t1 WHERE s1 <> ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);
SOME
が利用されることはほとんどありませんが、なぜこれが役に立つのか、この例が表しています。通常、英語で
「a はどの b とも同等ではない」
と言うと、「 a と等しい b はない」
と解釈されますが、SQL
構文ではそのような意味ではないのです。この構文は、「a
に等しくない b
がいくつか存在する」ことを示します。代わりに
<> SOME
を使用すると、すべての人がこのクエリーの本当の意味を理解しやすくなります。