作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设关系数据库中有三个表:
Customer(Id, Name, City),
Product(Id, Name, Price),
Orders(Cust_Id, Prod_Id, Date)
我的第一个问题是执行查询的最佳方式是什么:“获取所有订购产品的客户”。有些人建议使用 EXISTS
作为查询:
Select *
From Customer c
Where Exists (Select Cust_Id from Orders o where c.Id=o.cust_Id)
上面的查询是否等同(可以写成?)为:
Select *
From Customer
Where Exists (select Cust_id from Orders o Join Customer c on c.Id=o.cust_Id)
除了性能之外,当我们使用 IN
而不是 EXISTS
时还有什么问题:
Select *
From Customer
Where Customer.Id IN (Select o.cust_Id from Order o )
以上三个查询是否返回完全相同的记录?
更新: EXISTS 评估在第二个查询(或第一个)中是如何工作的,考虑到它只检查子查询是否返回 true 或 false?查询的“解释”是什么?
Select *
From Customer c
Where Exists (True)
最佳答案
前两个查询不同。
第一个有一个相关的子查询,将返回您想要的——关于有订单的客户的信息。
第二个有一个不相关的子查询。它将返回所有客户或不返回任何客户,具体取决于是否有客户下订单。
第三个查询是表达您想要的内容的另一种方式。
我能想到的唯一可能的问题是 cust_id
可能具有 NULL 值。在这种情况下,第一个和第三个查询可能不会返回相同的结果。
关于sql - SQL 中 IN 和 EXISTS 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546778/
我是一名优秀的程序员,十分优秀!