最終更新日:2026年8月16日
ds sql
DS検定トップ
> EXISTSとは?サブクエリの存在判定を理解する【DS検定】
まず結論
EXISTSは、サブクエリが1行でも結果を返すかを判定するSQL構文です。
DS検定では、値そのものを比較するのではなく「該当データが存在するか」を見る点が重要です。
直感的な説明
「注文したことがある顧客だけを出したい」とします。
このとき知りたいのは、注文金額そのものではありません。
その顧客に対応する注文が1件でもあるか?
を確認できれば十分です。
これがEXISTSの考え方です。
定義・仕組み
基本形は次の通りです。
SELECT *
FROM customers A
WHERE EXISTS (
SELECT 1
FROM orders B
WHERE A.customer_id = B.customer_id
);
このSQLでは、各顧客について対応する注文が1件でも見つかれば、その顧客を残します。
SELECT 1 の意味
EXISTSが見るのは、サブクエリの返す値ではなく、行が存在するかどうかです。
そのため、存在判定という意味では SELECT 1 の値そのものに意味はありません。
NOT EXISTS
該当する行が1件も存在しないことを確認したい場合は NOT EXISTS を使います。
SELECT *
FROM customers A
WHERE NOT EXISTS (
SELECT 1
FROM orders B
WHERE A.customer_id = B.customer_id
);
これは「注文履歴がない顧客」を探す例です。
どんな場面で使う?
関連データがある行だけ残したい
- 注文がある顧客
- 在庫がある商品
- 対応履歴がある問い合わせ
関連データがない行を探したい
NOT EXISTS を使います。
- 注文がない顧客
- 未処理の案件
よくある誤解・混同
❌ EXISTSとINは同じ
目的が似る場合はありますが、判断軸が違います。
| 構文 | 見ているもの |
|---|---|
EXISTS |
条件を満たす行が存在するか |
IN |
値が候補集合に含まれるか |
❌ サブクエリが返す値が重要
EXISTSでは、行が返るかどうかが重要です。
❌ EXISTSは常に全行を最後まで調べる
実装最適化はDBMSに依存しますが、EXISTSの論理上の目的は「存在確認」です。試験では、1件でも存在すれば条件を満たすと理解すれば十分です。
❌ NOT EXISTSは値の不一致を調べる
NOT EXISTSは、条件を満たす行が存在しないことを確認します。
まとめ(試験直前用)
EXISTS= 存在判定- サブクエリが1行でも返ればTRUE
- 値ではなく「行があるか」を見る
NOT EXISTS= 該当行が存在しない- EXISTS = 存在 / IN = 値で切り分ける
対応スキル項目(データエンジニアリング力シート)
- データ基盤
- データ操作
- ★ SQLを用いた基本的なデータ操作(検索・集計・結合等)ができる
🔗 関連記事
- ビューとは?元の表との違い・SELECT権限・更新可能ビュー【基本情報技術者試験】
- LEFT JOINとWHEREの関係とは?(SQLのひっかけ問題)【DS検定】
- 参照整合性とは?外部キーの追加・削除で判断するポイント【基本情報技術者試験】
- 自己結合とは?同じテーブルを結合する理由を理解する【DS検定】
- SQLの集計関数とは?COUNT・SUM・AVG・MAXとWHEREの違い【基本情報技術者試験】