PDF (US Ltr)
- 26.8Mb
PDF (A4)
- 26.8Mb
構文:
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)
が含まれている場合、10
が t2
内の 3 つのすべての値より大きいため、この式は TRUE
です。テーブル t2
に (12,6,NULL,-100)
が含まれている場合、テーブル t2
には 10
より大きい単一値 12
が存在するため、この式は 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);