求助: 一个简单的SQL语句
这是清华版本的数据库教材上的一个题目,有4种不同的解答,我看了后彻底晕菜了。
有4个关系: 供应商关系: S(SNO,SNAME,STATUS,ADDR)
零件关系: P(PNO,PNAME,COLOR,WEIGHT)
工程项目关系;J(JNO,JNAME,CITY,BALANCE)
供应情况关系:SPJ(SNO,PNO,JNO,PRICE,QTY)
检索没有使用编号为P3零件的工程编号JNO和名称JNAME。
方法1: SELECT JNO,JNAME
FROM J
WHERE JNO NOT IN
(SELECT JNO
FROM S,SPJ
WHERE S.SNO=SPJ.SNO AND PNO=‘P3’);
方法2: SELECT JNO,JNAME
FROM J
WHERE JNO <> JNO
(SELECT JNO
FROM SPJ
WHERE PNO=‘P3’);
方法3: SELECT JNO,JNAME
FROM J
WHERE NOT EXISTS
(SELECT *
FROM SPJ
WHERE J.SNO=SPJ.SNO AND PNO=‘P3’);
方法4:SELECT JNO,JNAME
FROM J
WHERE JNO NOT IN
(SELECT JNO
FROM SPJ
WHERE PNO=‘P3’);
请教众位大仙,(1) 方法1能不能直接用方法4代替?
(2) 方法1和3中的子查询里为什么一个是S.SNO=SPJ.SNO ,另一个是J.SNO=SPJ.SNO?
是例题答案错误还是什么?