数据模型如下:
商品:P(PNO,PNAME,PRICE),分别表示商品号、名称、单价。
售货员:S(SNO,SNAME,SXB),分别表示售货员号、姓名、性别。
销售记录:R(PNO、SNO、NUM),分别表示商品号、售货员号、销售数量。
要求用SQL查询完成:
1、所有售货员都出售过的商品名称。(6分)
SELECT PNAME
FROM P
WHERE NOT EXIST
( SELECT *
FROM S
WHERE NOT EXIST
( SELECT *
FROM R
WHERE PNO=P.PNO AND SNO=S.SNO
)
);
不太理解这个答案的思路,不知道怎么拆分进行分步分析,请各位大神赐教
也就是说:
1。最内层查询出来的是所有售货员售出的商品的集合;
2。中间层是对最内层的否定,也就是你说的,没有卖出过的所有商品的售货员的集合;
3。最外层的查询就是对中间层的否定,这样就变成了卖出过的所有商品的售货员的集合。
不知道我这样理解对不对?