從「飛行員與飛機」問題詳解Exists用法

2021-05-23 13:55:51 字數 1106 閱讀 7181

飛行員與飛機問題在我另一篇博文中:http://blog.csdn.net/iijse/archive/2010/11/12/6004332.aspx

exists和not exists 用法,很多人不太懂,特別涉及到巢狀查詢,比如以下幾問題:

12)查詢至少使用了j1工程所用的幾類零件的工程的工程號。

13)查詢至少使用了所有紅色零件的工程號。 

17)查詢至少使用了**商s1**的全部零件的工程號jno。 

18)查詢使用了全部上海產的零件的工程號jno。 

19)查詢沒有使用j2所使用的所有零件的工程號jno。

sql語言中沒有全稱量詞,所以沒有辦法直接比較「一些的一些值」都是「另一些的一些值」,諸如此類的問題,所以需要我們轉化一下問題:

不存在一些的一些值不在另一些的一些值範圍之內

有點拗,下面拿飛行員與飛機問題來詳細分析:

首先最外一層遍歷「飛行技巧表」中的每一條記錄,條件是:

遍歷飛機棚中的每一架飛機,條件是:對於某位飛行員(與最外層查詢連線)和飛機棚中的所有飛機,不存在他不會開的飛機。

如果有一架他不會開,那第二層巢狀查詢的條件(not exists)就為true了(因為最內層查詢至少有一條查詢結果),那麼這時第二層查詢所遍歷的這條記錄也就不符合條件,不被列入到第二層查詢的結果集中。

也就是說:第二層和第三層查詢的是針對於某位飛行員,列出飛機棚中的飛機他不會開的有哪幾架。

如果他全都會開,那麼最外層迴圈的條件(not exists)便會滿足,於是這名飛行員就會被列入到最終的結果集中。

弄清楚這個問題之後,這類的問題應該都能夠理解了。或者也可以試著像老師那樣畫三個表分析。

總結一句:不存在乙個元素不在那範圍之內,那麼就是所有元素都在這範圍裡.

ps:當然這種問題不止這一種解決方法(使用exists巢狀查詢),還可以通過數數的方式,比如這道飛行員與飛機的問題,另一種解決方法是:

通過比對執行查詢的開銷,發現這一種方法更節省。詳細的測試結果可以看這篇博文:http://blog.csdn.net/iijse/archive/2010/11/12/6004332.aspx

飛行員配對方案問題

題目描述 問題描述 第二次世界大戰時期,英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2名飛行員,其中1名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛行員...

飛行員配對方案問題

第二次世界大戰時期.英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛行員才能使一次派出最...

網路流 飛行員配對方案問題

題目描述 第二次世界大戰時期,英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛行員才能使...