考慮讓這兩個表和下面的查詢存在?
1.第一個查詢將生成兩個條目,因爲代碼中有兩個P_code行與Product中的行不同。 2.子查詢將返回兩個條目,但它們將被主查詢中的NOT條件消除,該條件將返回零行。
我不確定這些查詢中的推理是如何工作的。我可以很容易地預測查詢何時打印出2或3行,但我不知道它如何在可能打印0行或5行的情況下工作(取決於EXISTS/NOT EXISTS條件和相等/不等號) 。
有人可以詳細說明或給我一個很好的閱讀?謝謝!
考慮讓這兩個表和下面的查詢存在?
1.第一個查詢將生成兩個條目,因爲代碼中有兩個P_code行與Product中的行不同。 2.子查詢將返回兩個條目,但它們將被主查詢中的NOT條件消除,該條件將返回零行。
我不確定這些查詢中的推理是如何工作的。我可以很容易地預測查詢何時打印出2或3行,但我不知道它如何在可能打印0行或5行的情況下工作(取決於EXISTS/NOT EXISTS條件和相等/不等號) 。
有人可以詳細說明或給我一個很好的閱讀?謝謝!
你的推理
參考是不正確的。但是,這很容易驗證,所以你應該自己運行查詢。
第一個查詢將返回Product
中的所有行。爲什麼?因爲對於每個代碼,至少有一行在Codes
中不等式成立。例如,代碼'P_01'
與'P_03'
不匹配,所以存在不匹配的代碼。
第二個查詢將不會在Product
中返回任何行。爲什麼?因爲每個產品代碼都有一個不匹配的代碼。由於存在這樣的代碼,因此not exists
失敗。
我建議你堅持在你的exists
和not exists
聲明中的平等條件。邏輯更容易遵循,不易出錯。
如果內部查詢返回至少一條記錄,則EXISTS返回TRUE。
因此,在第一個查詢中,EXISTS對於所有產品都返回TRUE,因爲CODES中至少有一條記錄與PRODUCT中的產品代碼不匹配。
下面給出了一個簡單的可視化。
相比之下,NO EXISTS返回TRUE,如果沒有行從內部查詢返回。 Inn上例中沒有這種情況,並且什麼也沒有返回。從oracle
謝謝!由於我的期末考試,我需要了解這些查詢背後的推理,所以在實踐中我很可能不會使用這種格式(帶有不平等標誌)。 – 2014-12-19 06:49:32