サブクエリーのもっとも一般的な使用の形式は次のとおりです。
non_subquery_operand comparison_operator (subquery)
ここで、comparison_operator
は次の演算子のいずれかです。
= > < >= <= <> != <=>
例:
... WHERE 'a' = (SELECT column1 FROM t1)
MySQL では、次の構造構文も許可されます。
non_subquery_operand LIKE (subquery)
以前は、サブクエリーの唯一の正当な場所は比較の右側であり、この方法にこだわったいくつかの古い DBMS がまだ見つかることもあります。
結合では実行できない一般的な形式のサブクエリー比較の例を次に示します。 これは、column1
値がテーブル t2
内の最大値に等しいテーブル t1
内のすべての行を検索します。
SELECT * FROM t1
WHERE column1 = (SELECT MAX(column2) FROM t2);
次に別の例を示します。これもまた、いずれかのテーブルに対する集約が含まれているため、結合では実行できません。 これは、特定のカラムに 2 回現れる値を含むテーブル t1
内のすべての行を検索します。
SELECT * FROM t1 AS t
WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
スカラーに対するサブクエリーの比較の場合、サブクエリーはスカラーを返す必要があります。 行コンストラクタに対するサブクエリーの比較の場合、サブクエリーは、その行コンストラクタと同じ数の値を含む行を返す行サブクエリーである必要があります。 セクション13.2.11.5「行サブクエリー」を参照してください。