資料庫的 子查詢和 NOT EXISTS 關念求教 - 考試

Table of Contents

各位好, 小弟想請教一下各位

有關於子查詢中的 EXISTS 和 NOT EXISTS 的關念

底下的題目出自於唐箏資料庫應用第二回 P91頁

小弟雖然有講義, 但是沒有DVD, 所以是自己從文字中去理解

但是還是有些疑惑在, 所以麻煩各位指點一下


1.題目:列出所有不供應零件 P1 的供應商名稱
SELECT 供應商名稱
FROM 供應商
WHERE NOT EXISTS
(
SELECT *
FROM 專案供應零件
WHERE
供應商.供應商代號 = 專案供應零件.供應商代號 AND
零件代號 = 'P1'
)

這題小弟的理解,
先用子查詢, 找出所有有供應P1零件的供應商
在透過外面的 NOT EXIST 去找出 不供應零件P1 的供應商

舉例:
供應商中有 R1 = ( A, B, C, D, E),
供應 P1 零件的供應商有 R2 = (A, B, D)
不供應P1的零件商就是, C 和 E
R1 - R2 = ( C, E )


題目: 列出參與所有專案的供應商名稱

SELECT 供應商名稱
FROM 供應商
WHERE NOT EXISTS
(
SELECT *
FROM 專案
WHERE NOT EXISTS
(
SELECT *
FROM 專案供應零件
WHERE
供應商.供應商代號 = 專案供應零件.供應商代號 AND
專案.專案代號 = 專案供應零件.專案代號
)
)


這題小弟覺得連從題目變成這樣解的概念都沒有

不曉得是不是哪裡沒念到

麻煩各位了

謝謝

--

All Comments

Donna avatarDonna2014-03-09
把供應商沒有提供零件的專案踢掉,就是答案。
Yedda avatarYedda2014-03-11
少說一個,在把這種供應商踢掉。
Hedda avatarHedda2014-03-13
謝謝 O大, 只是小弟想瞭解 二題是怎麼去思考的
因為二題不像一題那麼直覺, 小弟轉不過來
Anthony avatarAnthony2014-03-18
第二題老師是把它改寫成
Irma avatarIrma2014-03-20
沒有專案是供應商沒有參與的 這種負負得正的方法
Liam avatarLiam2014-03-21
類似的題目我記得老師說都是因為沒有正面直接的寫法
所以都是用樓上說的負負得正巢狀的寫法