gpt4 book ai didi

sql - SQL 中 IN 和 EXISTS 的使用

转载 作者:行者123 更新时间:2023-12-02 05:04:08 25 4
gpt4 key购买 nike

假设关系数据库中有三个表:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com