EXISTS述語とは?イグジストじゅつご
EXISTS述語とは、副問合せが行を1件でも返すかどうかだけを真偽で返す述語。件数も値も見ないため、1件見つかった時点で評価を打ち切れる。NOT EXISTSと組み合わせて「条件に合う行が1件も存在しない」を表す書き方が、試験でも実務でも定番になっている。
最終更新:2026-10-06
この語が出る過去問を解く →背景
「すべての商品を注文したことがある顧客」のような全称の条件を、SQLは直接書けない。用意されているのは「注文していない商品が存在しない」という二重否定への言い換えだけで、その道具がNOT EXISTSである。関係代数の差演算に対応する操作としても使われ、集合の引き算をSQLで表現する基本形になっている。
具体例
1度も予約していない会員を出すなら、WHERE NOT EXISTS (SELECT * FROM 予約 WHERE 予約.会員番号 = 会員.会員番号) と書く。外側の1行ごとに評価される相関副問合せである。
試験での引っ掛け
行の有無しか見ないので、副問合せのSELECT句に何を書いても結果は変わらない。INとの決定的な違いはNULLの扱いで、NOT INは候補にNULLが1つ混じるだけで1行も返らなくなるが、NOT EXISTSはその影響を受けない。
関連用語
出た過去問
出典:平成28年度 春期 データベーススペシャリスト試験 午前Ⅱ 問9(IPA)解説で登場
次のSQL文と同じ検索結果が得られるSQL文はどれか。 SELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE COL1 IN (S…
正解:SELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE EXISTS (SELECT * FROM TBL2 WHERE TBL1.COL1 = TBL2.COL1)
要点:IN述語の副問合せは相関EXISTSに等価変換できる
IN述語による副問合せは、外側の行の値が副問合せの結果集合に含まれるかを判定するもので、相関副問合せを使ったEXISTS述語に書き換えられる。どちらもTBL2に同じCOL1の値が1件でもあればその行を残すという意味になり、結果は一致する。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。