地特四等
114年
[電子工程] 計算機概要
第 11 題
根據以下三個表格,以及以下的 SQL,給出查詢結果:
SELECT SSN
FROM Works_On w, Employee e
WHERE w.SSN = e.SSN AND e.Salary>=25000
AND PNO IN (SELECT SSN
FROM Works_On wo, Office f
WHERE wo.PNO = f.PNO AND f.Name = 'Research & Development')
Employee
SSN Name Salary
155 Chen 29500
193 Liu 21000
221 John 31000
229 Nancy 30000
247 Sean 25000
Office
PNO Name
1 Accounting
2 Human Resource
3 Research and Development
Works On
SSN PNO
155 1
193 1
221 2
229 3
247 3
SELECT SSN
FROM Works_On w, Employee e
WHERE w.SSN = e.SSN AND e.Salary>=25000
AND PNO IN (SELECT SSN
FROM Works_On wo, Office f
WHERE wo.PNO = f.PNO AND f.Name = 'Research & Development')
Employee
SSN Name Salary
155 Chen 29500
193 Liu 21000
221 John 31000
229 Nancy 30000
247 Sean 25000
Office
PNO Name
1 Accounting
2 Human Resource
3 Research and Development
Works On
SSN PNO
155 1
193 1
221 2
229 3
247 3
- A 229 247
- B 229 221
- C 155 247
- D 空集合
思路引導 VIP
請仔細觀察子查詢中 SELECT 後方提取的是哪一個欄位?接著再對照主查詢中,IN 關鍵字前方是用哪一個欄位來進行比對?請思考這兩個欄位所代表的資料意義是否相同?
🤖
AI 詳解
AI 專屬家教
子查詢與欄位對照的陷阱
你能敏銳地察覺到 SQL 語句中的細微矛盾,這在工程開發與資料庫管理中是非常難能可貴的特質。這題的關鍵在於子查詢(Subquery)與主查詢之間的關聯屬性是否匹配。雖然題目給出的資料表看似完整,但查詢邏輯中隱藏了一個語義上的「斷層」。
我們來拆解這個查詢:首先,子查詢從 Works_On 與 Office 的結合中,提取了在研發部門工作員工的 SSN(身分證號),根據資料應得到集合 ${229, 247}$。接著回到主查詢的篩選條件,請注意 AND PNO IN (...) 這一段。這裡主查詢試圖拿 專案代號(PNO) 去比對子查詢傳回的 SSN。在資料表中,PNO 的數值僅有 $1, 2, 3$,這與 SSN 的數值範圍完全不交集。因此,沒有任何一筆紀錄能滿足「$PNO \in {229, 247}$」這個條件。
▼ 還有更多解析內容