2017-08-21 16 views
1

私はいくつかのSQLコマンドを実行すると結果が変わる理由を理解していないため、W3の学校にいて、自分の脳を傷つけていました。joinステートメントのANDとWHEREの相違点

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; 

出力結果は次のとおりです:

は、これはW3の学校の一例であるので、

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

ここで何が起こっているのですか、適切なe 196年の注文のフラーがANDに変更されたときになぜそれが表示されるのかについての説明、なぜ違いがありますか?

+0

参加条件2番目のクエリの中に括弧がありません。現在のものは次のとおりです: 'Orders.EmployeeID = Employees.EmployeeID and LastName = 'Davolio' OR LastName = 'Fuller'';このクエリでは、姓が「Fuller」の場合、条件全体が真となります。 'Orders.EmployeeID = Employees.EmployeeID (LastName = 'Davolio' OR LastName = 'Fuller') – Lamak

答えて

2

第2のケースであなたのロジックは次のとおりです。

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

あなたは括弧と同じ結果になるだろう:単純IN

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

以上:

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

興味深い....括弧について知りませんでした。実際の結果は20なので、なぜ196が登場するのですか? – PlayPhil1

関連する問題