这两个语句之间有什么区别?

时间:2019-11-08 00:52:19

标签: sql-server

我是SQL的学生,并且正在Northwind数据库上运行这两个查询。以下两个查询都在获取不同的数据集。我认为它们都是相同的,但我无法掌握的是如何获取不同的数据集。

select o.*
from dbo.Orders o
where 36 < (
    select Quantity
    from [Order Details] od
    where ProductID = 17
    and od.OrderID = o.OrderID
)

这将检索9条记录。

select o.*
from Orders o
join [Order Details] od on od.OrderID = o.OrderID
where Quantity < 36
and ProductID = 17

这将检索27条记录。

有人可以向我解释这个难题吗?

2 个答案:

答案 0 :(得分:3)

简单。

第一个测试是否

36 < Quantity

第二个测试是否

Quantity < 36

答案 1 :(得分:1)

如果我们可以看到您正在使用的数据,将会更容易。

但是在我看来,第一个查询(除非我误读了它,因为它的结构非常不常规)选择了36 < Quantity所在的行,第二个查询选择了Quantity < 36所在的行。

36 < Quantity与编写Quantity >= 36相同...因此希望您可以看到这些条件是相反的。我猜你的两个结果集包含彼此完全不同的行,而不仅仅是行数不同