比較演算子の後に続かなければいけない ANY キーワードは、
「もしサブクエリが返すカラム内の値の ANY に対する比較が TRUE であれば、
TRUE を返す」 という事を意味します。

operand comparison_operator ANY (subquery)
operand IN (subquery)
operand comparison_operator SOME (subquery)

(例) 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) を含むなら、その式は
UNKNOWN です。

サブクエリと共に利用される時、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);

■GROUP BYでまとめず単純に平均面積より大きいデータを選択した場合。

SELECT Continent, Name
FROM Country
WHERE SurfaceArea > (SELECT AVG(SurfaceArea)
FROM Country );

select_any_group_by

■”GROUP BY Continent”でANYを付けずにSELECTした場合は、複数列が返って
きてエラーになります。ANYを付ける事で複数行が返ってくるサブクエリーの処理も
問題無く処理できます。


SELECT Continent, Name
FROM Country
WHERE SurfaceArea > ANY (SELECT AVG(SurfaceArea)
FROM Country
GROUP BY Continent
);

select_any

    参考サイト


12.2.8.3. ANY、IN、そして SOME を持つサブクエリ

D.3. サブクエリの規制

Comments are closed.

Post Navigation