平成28年秋期 午前問29について

らんさん  
(No.1)
表題で選択肢となっているSQL「EXISTS」と「NOT EXISTS」について教えてください。
https://www.ap-siken.com/kakomon/28_aki/q29.html

他のサイトを確認すると「EXISTS」では、副問合せのSQLに該当する行があればそれを出力する、「NOT EXISTS」では、副問合せのSQLに該当しない行があればそれを出力する動作に見えました。

1行でも該当するものがあれば、テーブルの内容を全て出力するといった旨の内容ではなく、副問合せの条件に合致する行(または合致しない行)のみ出力されていそうでした。

(例えばですが、令和5年 秋期 問29の問題は「NOT EXIST」によって対象レコードを抽出している例が解説に記載されています。
https://www.ap-siken.com/kakomon/05_aki/q29.html

この理解のうえで本問の解説を読んだのですが、ウの「中間表に対する相関副問合せの結果は常に1行になります」「1行以上あるときに真を返すため、中間表の全レコードが選択されます」やエの「副問合せの行は常に2行になります」「副問合せの結果が存在しないときに真を返すため選択されるレコードはありません」がよく分かりませんでした。

ウもエも、想定通りの対戦表を出力できるSQLに見えます。
「EXISTS」と「NOT EXISTS」はどのような動作をするものなのでしょうか。
2025.10.03 14:37
jjon-comさん 
AP プラチナマイスター
(No.2)
> 他のサイトを確認すると
> 「EXISTS」では、副問合せのSQLに該当する行があればそれを出力する、
> 「NOT EXISTS」では、副問合せのSQLに該当しない行があればそれを出力する
> 動作に見えました。

いいえ、違います。(そもそも上記の「それ」が何を指すのか曖昧です)

exist は「存在する」という意味の英単語ですから、
EXISTS (SQL文) は、そのSQL文の実行結果が存在するなら真[True]を返し、
NOT EXISTS (SQL文) は、そのSQL文の実行結果が存在しないなら真[True]を返します。

質問者の挙げた次の問題を例に説明します。

応用情報 令和5年 秋期 午前 問29
https://www.ap-siken.com/kakomon/05_aki/q29.html

製品番号 CC5001 の場合、これは製品表と在庫表にともに存在し、在庫数は30を越えますから、
内側のSQLを実行した時点で次のようになり、
SELECT DISTINCT 製品番号 FROM 製品 WHERE NOT EXISTS ('CC5001');
内側のSQLの実行結果が存在しますから次のようになります。
SELECT DISTINCT 製品番号 FROM 製品 WHERE 偽[False];
よって、外側のSELECT句の出力結果はありません。

製品番号 MZ1000 の場合、これは在庫表に存在しませんから、
内側のSQLを実行した時点で次のようになり、
SELECT DISTINCT 製品番号 FROM 製品 WHERE NOT EXISTS (空);
内側のSQLの実行結果が存在しませんから次のようになります。
SELECT DISTINCT 製品番号 FROM 製品 WHERE 真[True];
よって、外側のSELECT句の結果が出力されます。

冒頭で(そもそも上記の「それ」が何を指すのか曖昧です)と書きました。
> それを出力する
という「それ」が外側のSELECT句の実行結果を指しているのなら正しいです。
内側のSQLの実行結果を指しているのなら間違っています。
内側のSQLの実行結果は存在する/しないの判定に使われていますから。
2025.10.03 15:21
jjon-comさん 
AP プラチナマイスター
(No.3)
で、次の問題なのですが。

応用情報 平成28年 秋期 午後 問29
https://www.ap-siken.com/kakomon/28_aki/q29.html

EXISTS、NOT EXISTS に関係なく、不正解です。

外側のSQLのFROM句はこうであり、
FROM チーム AS A, チーム AS B, 審判 AS C

ウとエの内側のSQLのFROM句はこうです。
FROM 審判 AS D

AやBと結合をしているのはDだけで、Cは結合対象になっていません。
2025.10.03 15:46
jjon-comさん 
AP プラチナマイスター
(No.4)
表Cが登場せず、A・B・Dの3表だったとしたら ウ や エ はどうなる? については、次を参照のこと。
https://www.ap-siken.com/bbs/4266.html
2025.10.03 15:52
らんさん  
(No.5)
とても分かりやすかったです。
丁寧に教えていただきありがとうございます!
2025.10.04 03:55

返信投稿用フォーム

※SQL文は全角文字で記載してください。
※宣伝や迷惑行為を防止するため、当サイト、姉妹サイト、IPAサイト以外のURLを含む記事の投稿はできません。

投稿記事削除用フォーム

投稿番号:
パスワード:

その他のスレッド


Pagetop