SQL文の副問い合わせについて
SQLの勉強をし始めて間もありませんが、以下のSQLについて教えてください。
実はこの問題は昭晃堂発行の北川博之先生が書いた「データベースシステム」という本に乗っている問題です。以下のようなデータベースがあります。
部門(_部門番号,部門名)
部品(_部品番号,部品名)
業者(_業者番号,業者名,住所,電話番号)
従業員(_従業員番号,従業員名,氏名,住所,年齢)
供給(_部門番号,_部品番号,_業者番号,単価,数量) _がついているのは主キー
この中で、登録されているすべての部品の供給を受けている部門の部門番号を表示するSQLを記せという問題があります。
つまり、部品表の供給テーブルの中の部門番号ごとに、供給テーブルのなかに含まれる部品番号と部品テーブルの部品番号がすべて一致するかを調べるSQLを書かなければならないということです。
まったく歯が立たないので、いろいろと調べた結果、
SELECT DISTINCT 部門番号 FROM 供給 AS 供給1
WHERE NOT EXISTS(
SELECT *
FROM 部品
WHERE NOT EXISTS(
SELECT *
FROM 供給 AS 供給2
WHERE 部品.部品番号=供給2.部品番号
AND 供給1.部門番号=供給2.部門番号
));
が正解であるということでした。
しかし、NOT EXISTSが2回も出てくるばかりか、副問い合わせの連続で頭が混乱してよく理解できません。
このSQL文について、具体的にはどのようなことをやっているのでしょうか?教えてください。お願いします。
お礼
遅くなりましたが回答ありがとうございます! 大変参考になります。 何度も申し訳ないのですが、これは工場の話なので、「工場は~の問題を持っている」という風に文をまとめたらおかしいですか? よろしければまた回答をお願いします(>_<)