Sql join语句中的AND和WHERE有什么区别

Sql join语句中的AND和WHERE有什么区别,sql,Sql,我一直坐在W3学校,不明白为什么在执行一些SQL命令时结果会发生变化,这让我抓狂不已 这是W3学校的例子: SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID where LastName = 'Davolio' OR LastName = 'Fuller' GR

我一直坐在W3学校,不明白为什么在执行一些SQL命令时结果会发生变化,这让我抓狂不已

这是W3学校的例子:

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
where LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
输出结果是:Davolio 29

所以我的问题是,当我将代码更改为

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
and LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
输出结果为:Davolio 29 Fuller 196


这里发生了什么,我没有找到一个恰当的解释,来解释为什么在将196个订单中的Fuller更改为时出现,以及为什么会有差异?

您在第二种情况下的逻辑是:

ON (Orders.EmployeeID = Employees.EmployeeID and LastName = 'Davolio') OR
   (LastName = 'Fuller')
使用括号可以得到相同的结果:

ON Orders.EmployeeID = Employees.EmployeeID and
   (LastName = 'Davolio' OR LastName = 'Fuller')
或者更简单地使用中的

ON Orders.EmployeeID = Employees.EmployeeID and
   LastName IN ('Davolio', 'Fuller')

第二个查询中的联接条件缺少括号。当前的是:
Orders.EmployeeID=EmployeeID和LastName='Davolio'或LastName='Fuller'
;因此,在这个查询中,如果姓氏是
Fuller
,那么整个条件变为true。它应该是:
Orders.EmployeeID=EmployeeID和(LastName='Davolio'或LastName='Fuller')
interest。。。。我不知道括号的事。既然实际结果是20,那么为什么会出现196呢。