考虑以下关系模式:
Suppliers(sid:integer, sname:string, city:string, street:string)
Parts(pid:integer, pname:string, color:string)
Catalog(sid:integer, pid:integer, cost:real)
考虑对上述数据库的以下关系查询:
SELECT S.sname
FROM Suppliers S
WHERE S.sid NOT IN (SELECT C.sid
FROM Catalog C
WHERE C.pid NOT IN (SELECT P.pid
FROM Parts P
WHERE P.color<> 'blue'))
假设上述模式对应的关系不为空。以下哪一项是上述查询的正确解释?
(A)找出所有供应过非蓝色零件的供应商的名称。
(B)找出所有未提供非蓝色零件的供应商的名称。
(C)找出所有只供应蓝色零件的供应商的名称。
(D)找出所有不只供应蓝色零件的供应商的名称。答案: (D)
说明: None 选项匹配,因为给定的查询返回没有提供任何蓝色部件的供应商。这意味着它可以包含蓝色以外的部分。
(A):错误,因为这可能包括蓝色部分,可能不包括“空”部分。
(B):显然是错误的,因为它返回的不是任何蓝色部分。
(C):显然是错误的,因为它不返回 this。
(D):正确。请在这里尝试:http://sqlfiddle.com/#!9/9ae12d/1/0
此解释由Archit Garg 提供。
这个问题的测验