看板 Examination 關於我們 聯絡資訊
這個題目是資料庫關聯式代數裡面的非基本運算中的除法運算。 非基本運算的意思是可以用(其他)基本運算求出來。 一個(非基本)除法運算,必須用到基本運算的差集運算兩次(外加join 等運算)才能 表達。 (兩次)差集運算,在SQL語法就用到 not exist (兩次), 這就是樓主說的 負負得正 (負兩次)。 用 count 不保證一定會得到解。 用not exist兩次雖麻煩但是是正道。 ※ 引述《gn01398532 (GOA)》之銘言: : 此題已有人問過,但我還是不解要如何構築此兩層巢狀查詢 : Q1:列出參與所有專案的供應商名稱? : 題目所給表格:https://imgur.com/FqDfBeX : 解法是用:不存在任何專案是沒有參與的 : 解答就像此網站的解析:https://goo.gl/fZwjDj : 巢狀查詢是要視為FROM後面的表格一起看嗎? : 為何第二個FROM後面是專案,最後一個FROM是看專案供應零件? : 如果我先從最內層解析, : 最後一個WHERE的條件是連結到兩個更外層查詢的表格(供應商和專案) : 就代表我得同時看到最外層的 供應商.專案.專案供應零件 的表格 : 我的問題點在於要如何一步一步建立多層的巢狀查詢, : 由內向外、由外向內,或是同時? : 這種巢狀查詢要怎麼練習呢? : ---------------------------------------------------------------------------- -- : 另外,關於"所有"的sql語法,何時要用"負負得正"的方式來解(即不存在...沒有參與) : 何時要用正向的存在方式來解(即存在)? : 例如 Q2.列出所有有參與"一級棒供應商有參與的專案"的供應商 : 解答從"找出供應商其不存在任何一級棒參與的專案是沒有參與的" : 感謝各位,搞得我頭好痛= = -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.200.63.221 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1535897471.A.CCA.html
p19101910: 回原post, 除法等同於負負得正,要從 09/03 14:17
p19101910: 從邏輯的兩敘述相等理解(邏輯上恆等)。 09/03 14:18
p19101910: 從實例內層推導,或從外層,或內外同時,都不好理解。 09/03 14:20
p19101910: 若要理解,還是要從predicate logic 中的兩敘述恆等 09/03 14:21
p19101910: 著手比較好懂,從答案的例子推導,反而不好懂。 09/03 14:23