データベース
「注文をしたことがない顧客」を取得するSQL文として正しいものはどれか。
ア.SELECT * FROM 顧客 WHERE NOT EXISTS (SELECT * FROM 注文 WHERE 注文.顧客ID = 顧客.顧客ID)正解
イ.SELECT * FROM 顧客 WHERE 顧客ID NOT IN (SELECT MAX(顧客ID) FROM 注文)
ウ.SELECT * FROM 顧客 LEFT JOIN 注文 ON 顧客.顧客ID = 注文.顧客ID WHERE 注文.顧客ID IS NOT NULL
エ.SELECT * FROM 顧客 WHERE EXISTS (SELECT * FROM 注文 WHERE 注文.顧客ID != 顧客.顧客ID)
解説
NOT EXISTSは「引き出しに何も入っていない人を探す」検索。その顧客に対応する注文が存在しないことを確認する。
なぜ ア が正解か
NOT EXISTS (SELECT * FROM 注文 WHERE 注文.顧客ID = 顧客.顧客ID) は、各顧客についてその顧客IDを持つ注文レコードが存在しない場合にTRUEを返す。これが「注文をしたことがない顧客」の正確な定義。
出典: AI生成問題(学習用)