设供应商零件的关系模式为SP(Sno,Pno,Qty),其中Sno表示供应商号,Pno表示零件号,Qty表示零件数量。查询至少包含了供应商“168”所供应的全部零件的供应商号的SQL语句如下:
SELECT Sno
FROM SP SPX
WHERE (1)
(SELECT*
FROM SP SPY
WHERE (2) AND NOT EXISTS
(SELECT*
FROM SP SPZ
WHERE (3) ));
(3)处填()。
A.SPZ. Sno=SPY. Sno AND SPZ. Pno=SPY. Pno
B.SPZ. Sno=SPX. Sno AND SPZ. Pno=SPX. Pno
C.SPZ. Sno=SPX. Sno AND SPZ. Pno=SPY. Pno
D.SPY. Sno=’168’ AND SPZ. Pno=SPY. Pno
参考答案:C
解析:
问题要求的是至少包含了供应商’168’所供应的全部零件的供应商号,可以分解成两个否定形式:不存在这样的供应商,168号选了的商品,该供应商却没有选择。
根据以上分解,显然,第(1)空选择否定的表达,即用双重否定表示肯定。而IN/NOT IN的一般用法为:
SEL ECT *
FROM table_ namel
WHERE columnl IN/NOT IN
(SEL ECT columnl
FROM table_ name2 WHERE conditions);
也就是说,IN后面接的是一个集合,且前面有列名columnl。
EXISTS/NOT EXISTS指是否存在,一般用法为:
SELECT *
FROM table_ namel
WHERE EXISTS/NOT EXISTS
(SELECT *
FROM table_ name2 WHERE conditions);