Re: [课业] 列出参与所有专案的供应商名称 SQL巢状查询

楼主: t2244424 (郑福九)   2018-09-02 22:11:09
这个题目是数据库关联式代数里面的非基本运算中的除法运算。
非基本运算的意思是可以用(其他)基本运算求出来。
一个(非基本)除法运算,必须用到基本运算的差集运算两次(外加join 等运算)才能
表达。
(两次)差集运算,在SQL语法就用到 not exist (两次), 这就是楼主说的 负负得正
(负两次)。
用 count 不保证一定会得到解。
用not exist两次虽麻烦但是是正道。
※ 引述《gn01398532 (GOA)》之铭言:
: 此题已有人问过,但我还是不解要如何构筑此两层巢状查询
: Q1:列出参与所有专案的供应商名称?
: 题目所给表格:https://imgur.com/FqDfBeX
: 解法是用:不存在任何专案是没有参与的
: 解答就像此网站的解析:https://goo.gl/fZwjDj
: 巢状查询是要视为FROM后面的表格一起看吗?
: 为何第二个FROM后面是专案,最后一个FROM是看专案供应零件?
: 如果我先从最内层解析,
: 最后一个WHERE的条件是连结到两个更外层查询的表格(供应商和专案)
: 就代表我得同时看到最外层的 供应商.专案.专案供应零件 的表格
: 我的问题点在于要如何一步一步建立多层的巢状查询,
: 由内向外、由外向内,或是同时?
: 这种巢状查询要怎么练习呢?
:
作者: p19101910 (Sky)   2018-09-03 14:17:00
回原post, 除法等同于负负得正,要从从逻辑的两叙述相等理解(逻辑上恒等)。从实例内层推导,或从外层,或内外同时,都不好理解。若要理解,还是要从predicate logic 中的两叙述恒等着手比较好懂,从答案的例子推导,反而不好懂。

Links booklink

Contact Us: admin [ a t ] ucptt.com