假设一个关系数据库中有三个表:
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 评估在第二个查询(或第一个)中是如何工作的?查询的“解释”是什么?
Select *
From Customer c
Where Exists (True)