資料庫基礎
客戶表格(客戶編號, 姓名)中有(C1, 青木)、(C2, 井上)、(C3, 上田)、(C4, 江藤)共4筆資料列。訂單表格(訂單編號, 客戶編號, 金額)中有(O1, C1, 3000)、(O2, C2, 8000)、(O3, C1, 6000)、(O4, C3, 2000)、(O5, C2, 9000)共5筆資料列。SELECT 姓名 FROM 客戶 WHERE 客戶編號 IN (SELECT 客戶編號 FROM 訂單 WHERE 金額 > 5000) 的結果有幾筆資料列?
- A1筆
- B2筆
- C3筆
查看答案與解析
正確答案:B. 2筆
首先,括號中的子查詢會傳回金額超過5000之訂單的客戶編號。符合的是O2(C2)、O3(C1)、O5(C2)共3筆,因此客戶編號的集合為 C2、C1、C2。外層查詢對客戶表格的每筆資料列,檢查其客戶編號是否包含在這個集合中。包含在內的是青木(C1)與井上(C2),井上即使在集合中出現2次,也只會以客戶表格中的一筆資料列傳回一次,因此結果為2筆。3筆是像把客戶表格與訂單表格連結後再以金額篩選那樣,認為每筆符合的訂單都會產生一筆資料列時的數目。1筆是只計算所有訂單都超過5000的客戶(井上)時的數目。
- A. 這是只計算所有訂單都超過5000之客戶的情況。IN只要有一筆符合的訂單就會納入。
- B. 正確。有超過5000之訂單的青木與井上,共2筆。
- C. 這是連結後每筆訂單各產生一筆資料列時的數目。使用IN時,同一客戶只傳回一次。