我在學習SQL,很難理解EXISTS語句。我碰到這句話對「存在」和不明白的地方:SQL EXISTS語句如何工作?
使用exists操作,你的子查詢可以返回零個,一個或多個行,條件只檢查是否子查詢返回的任何行。如果您查看子查詢的select子句,您將看到它由單個文字(1)組成;由於包含查詢中的條件只需要知道返回了多少行,所以子查詢返回的實際數據是不相關的。
我不明白的是外部查詢如何知道子查詢檢查哪一行?例如:
SELECT *
FROM suppliers
WHERE EXISTS (select *
from orders
where suppliers.supplier_id = orders.supplier_id);
我明白,如果供應商和訂單表匹配ID,子查詢將返回true,所有從供應商表中的匹配行的列將被輸出。我沒有得到的是,如果僅返回true或false,那麼子查詢如何傳達哪個特定的行(可以說供應商ID爲25的行)應該被打印。
在我看來,外部查詢和子查詢之間沒有關係。
如果多個子記錄與父項相關聯,則內部聯接將產生與EXISTS不同的結果 - 它們不相同。 – 2011-05-01 06:49:37
我覺得我的混淆可能是我讀過子查詢與EXISTS返回true或false;但是這不可能是它返回的唯一的東西,對吧?子查詢是否也返回所有「在訂單表中具有相應行的供應商」?但如果是這樣,EXISTS語句如何返回布爾結果?我在課本中讀到的所有東西都只是說它只返回一個布爾結果,所以我很難將代碼的結果與我被告知返回的結果進行協調。 – Dan 2011-05-01 09:37:13
像函數一樣讀取EXISTS ... EXISTS(resultset)。如果結果集有行,則EXISTS函數將返回true,如果結果集爲空,則返回false。基本上就是這樣。 – 2011-05-01 19:49:49