2014-12-19 56 views
2

Considerf having the following tabesSQL EXISTS,而不是與不平等

考慮讓這兩個表和下面的查詢存在?

1.第一個查詢將生成兩個條目,因爲代碼中有兩個P_code行與Product中的行不同。 2.子查詢將返回兩個條目,但它們將被主查詢中的NOT條件消除,該條件將返回零行。

我不確定這些查詢中的推理是如何工作的。我可以很容易地預測查詢何時打印出2或3行,但我不知道它如何在可能打印0行或5行的情況下工作(取決於EXISTS/NOT EXISTS條件和相等/不等號) 。

有人可以詳細說明或給我一個很好的閱讀?謝謝!

回答

2

你的推理

參考是不正確的。但是,這很容易驗證,所以你應該自己運行查詢。

第一個查詢將返回Product中的所有行。爲什麼?因爲對於每個代碼,至少有一行在Codes中不等式成立。例如,代碼'P_01''P_03'不匹配,所以存在不匹配的代碼。

第二個查詢將不會在Product中返回任何行。爲什麼?因爲每個產品代碼都有一個不匹配的代碼。由於存在這樣的代碼,因此not exists失敗。

我建議你堅持在你的existsnot exists聲明中的平等條件。邏輯更容易遵循,不易出錯。

+0

謝謝!由於我的期末考試,我需要了解這些查詢背後的推理,所以在實踐中我很可能不會使用這種格式(帶有不平等標誌)。 – 2014-12-19 06:49:32

1

如果內部查詢返回至少一條記錄,則EXISTS返回TRUE。

因此,在第一個查詢中,EXISTS對於所有產品都返回TRUE,因爲CODES中至少有一條記錄與PRODUCT中的產品代碼不匹配。

下面給出了一個簡單的可視化。

enter image description here

相比之下,NO EXISTS返回TRUE,如果沒有行從內部查詢返回。 Inn上例中沒有這種情況,並且什麼也沒有返回。從oracle

+0

重新讀取sql - 查詢包含不等式,而不是等式。 'Product.P_code <> Codes.P_code' – Sonic 2014-12-19 02:47:09

+0

謝謝。編輯評論 – kamoor 2014-12-19 02:51:30