EXISTS は サブクエリが1行でも結果を返すかどうか を確認するときに使います。
返り値は boolean型 (true / false) です。
-
基本構文
SELECT EXISTS (
SELECT 1
FROM a
WHERE 条件
);
EXISTS の中のサブクエリが 1行でも返せば true、返さなければ false
SELECT 内の列は実際には何でもよく、通常は 1 を書くことが多い
条件に合う行が存在するかどうかを確認する用途 -
例1: 特定の行が存在するか確認
-- table a に id=10 の行が存在するか
SELECT EXISTS (
SELECT 1
FROM a
WHERE id = 10
);
もし id=10 が存在すれば true、なければ false -
例2: 別テーブルとの関連で存在チェック
-- table b の user_id が table a に存在するかをチェック
SELECT b.user_id, EXISTS (
SELECT 1
FROM a
WHERE a.id = b.user_id
) AS exists_in_a
FROM b;
b の各行ごとに、対応する a.id が存在するか boolean を返す -
EXISTS と NOT EXISTS
EXISTS → 行があれば true
NOT EXISTS → 行がなければ true
-- table a に id=10 の行がなければ true
SELECT NOT EXISTS (
SELECT 1
FROM a
WHERE id = 10
); -
ポイント
EXISTS は サブクエリの行が1行でも存在するかどうか だけをチェック
サブクエリ内の列は何でもよく、SELECT 1 が一般的
JOIN よりも効率的に「存在確認」ができる場合が多い