Sql join语句中的AND和WHERE有什么区别
我一直坐在W3学校,不明白为什么在执行一些SQL命令时结果会发生变化,这让我抓狂不已 这是W3学校的例子: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
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呢。