Re: [SQL ] 新手請教EXISTS語法問題

作者: sagwow (不是我)   2019-06-02 10:20:30
→ neweom: 還是說WHERE EXISTS後方都不起作用?
沒錯喔,你兩種寫法的差別在於,
上面寫法的子查詢有參考到外部的Suppliers表,
下面寫法的子查詢沒有參考到外部的Suppliers表。
※ 引述《neweom (新哥)》之銘言:
: 在w3schools這題 https://bit.ly/2D7WLmn 範例中
: SELECT SupplierName
: FROM Suppliers
: WHERE EXISTS (SELECT ProductName FROM Products
: WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
這裡的子查詢會一一比對外部的Suppliers資料,有點像巢狀迴圈的感覺。
: 會得到 24 個 SupplierName的結果
: 但是如果我改寫成
: SELECT SupplierName
: FROM Suppliers
: WHERE EXISTS (SELECT ProductName FROM Products,suppliers
: WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
這裡子查詢完全沒用到外面的Suppliers,所以會先比對出子查詢的結果,才看外查詢。
子查詢只要比對出來有結果,外部查詢就會被全部列出來;
反之子查詢比對出來沒結果,外部查詢就都不會被列出來。
因為你EXISTS內的查詢有資料,因為Suppliers的名稱就全部被印出來,總數剛好29個。
: 會得到 29 個 SupplierName的結果
: 多出來的五筆資料Price都 > 20
: 不知道兩個SQL語法的差別在哪裡,懇請大大指導
https://www.1keydata.com/tw/sql/sql-exists.html
這裡的範例有對你這個情形的說明。
試著回答看看,不知道有沒有解答到。
如果我的想法有誤,還請高手指正^ ^a

Links booklink

Contact Us: admin [ a t ] ucptt.com