[课业] SQL观念问题

楼主: fightforlive (学历无用论是屁)   2016-04-01 00:41:34
小弟之前有问过关于SQL not exists观念问题,可能说明的不清楚,所以没得到答案
not exists观念我还不是非常清楚,如有蠢问题请见谅.
Q1. 列出所有没有销售黑色零件的供应商名称
以下是会用到的表格

书上给的答案为:

这个我可以理解,因为透过子查询,可以将零件表格连接到对应的专案供应代号表格
让专案供应代号表格可以有零件的资讯.
除此之外,子查询里可以透过外层表格(供应商)里的供应商代号来判断哪些供应商有提供
黑色零件
但是,以下题目为高考题目,却不需要外层表格的资讯来判断

子查询没用到外面的表格字段,"那他怎么判断王小明是不是有修那些课程" ?
在子查询里,student会和select结合而得到那些学生修了那些课程且找出王小明这个学生
所以如果有王小明这个学生,course每次到内层都不会是empty阿
所以变成是"如果有王小明这个学生就不印出课程资讯"
因此,需要改写成以下才是正确答案

不知道以上是否有误?
Q2. 关于在找"所有"的查询里不知道是否能改成只有一个not exists
例如: 列出参与所有专案的供应商名称
我的SQL语法如下,不知道是否正确? 或是考试这样写OK?
外层有供应商和专案的所有可能组合,然后到子查询里找是否有不存在的组合
如果有,代表有供应商没参加某个专案

谢谢~
作者: jachin (火腿哥)   2016-04-01 01:20:00
Q1.我觉得你的意思是对的,但是出题可能是出错,或要考exists和in的差别,所以答题写空白才是对的。Q2.大错,如果可以只用一层,又何必用2层?中文意思就是负负得正→列出不存在以下表格的供应商名称(没有参与任何专案的供应商代号)您搞错FROM的功能了,FROM没那么强大
作者: lei70200 (Lei)   2016-04-01 21:43:00
Q2怎么看都是"列出所有没参与任何专案的供应商名称"

Links booklink

Contact Us: admin [ a t ] ucptt.com