構文:
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);