構文
<operand> <comparison operator> ALL (<subquery>)
ALL
という語は比較演算子の後に指定するもので、``サブクエリが返すレコードの
ALL
(すべて)に対して比較が
TRUE
の場合 TRUE
を返す'' ことを表します。
次に例を示します。
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
テーブル t1
に {10}
という値を含むレコードがあるとします。
テーブル t2
に含まれている値が
{-5,0,+5} の場合、この式は TRUE
になります。なぜなら t2
に含まれている値はすべて 10
より小さいからです。 テーブル
t2
に含まれている値が
{12,6,NULL,-100} の場合、この式は
FALSE
になります。なぜなら
t2
に、10 よりも大きい 12
という値が 1 つ存在するからです。 テーブル
t2
に含まれている値が {0,NULL,1}
の場合、この式は UNKNOWN
になります。
最後に、テーブル t2
が空の場合、結果は TRUE
になります。 この場合、結果は
UNKNOWN
になると考えたくなりますが、実際には
TRUE
です。わかりにくいかもしれませんが、
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
上の例の場合、テーブル t2
が空なら TRUE
になりますが、
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
上の例の場合、テーブル t2
が空なら結果は UNKNOWN
になります。
SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
さらに、上の例の場合も、テーブル
t2
が空なら結果は
UNKNOWN
になります。
一般に、NULL
値を持つテーブルと空のテーブルは、境目のケースです。サブクエリのコードを書くときには、この
2
つの可能性を常に念頭に置くようにしてください。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.