構文:
operand
comparison_operator
ALL (subquery
)
比較演算子のあとに指定する必要のある単語
ALL
は、比較が、サブクエリーが返すカラム内の値の
ALL
に対して
TRUE
である場合に
「TRUE
を返すことを示します。」次に例を示します。
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
テーブル (10)
を含むテーブル t1
内に行があると仮定してください。10
は t2
の中の 3
つの値すべてよりも大きいので、もし
t2
が
(-5,0,+5)
を含むなら、その式は
TRUE
です。10
よりも大きい単一値
12
がテーブル
t2
にあるので、もしテーブル
t2
が
(12,6,NULL,-100)
を含むなら、その式は
FALSE
です。もしテーブル
t2
が
(0,NULL,1)
を含むなら、その式は 不明
(NULL
) です。
最後に、もしテーブル
t2
が空なら、その結果は
TRUE
です。従って、テーブル
t2
のとき、次のステートメントは
TRUE
です。
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
しかし、テーブル t2
が空のとき、このステートメントは
NULL
です。
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
そして、テーブル t2
が空のとき、次のステートメントは
NULL
です。
SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
一般に、NULL
値を含むテーブルと空のテーブルは「まれなケースです。」サブクエリーのコードを記述する場合は、この
2
つの可能性を考慮に入れているかどうかを常に考えてください。
NOT IN
は
<> ALL
のエイリアスです。従って、これら 2
つのステートメントは同じになります。
SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);