求助: 一个简单的SQL语句

chaoliu1980 2013-03-31 06:43:27
这是清华版本的数据库教材上的一个题目,有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?
是例题答案错误还是什么?
...全文
263 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaoliu1980 2013-04-07
  • 打赏
  • 举报
回复
不管怎么说都谢谢两位了
叶子 2013-03-31
  • 打赏
  • 举报
回复
方法一可以用方法四代替。
chaoliu1980 2013-03-31
  • 打赏
  • 举报
回复
可是方法1里 表S用不到啊,只要SPJ不就可以了吗?他这里用表S的意义是什么呢?
  • 打赏
  • 举报
回复
做一遍比看十遍更有效。 这个题目用方法4最简单,所以,应该可以代替。 方法1括号里是个子查询,而且是两个表(S 和 SPJ)的联合查询。所以会有S.SNO=SPJ.SNO 方法3J.SNO=SPJ.SNO中的J是外层查询的表J

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧