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