理解 t-sql 中 AND 和 WHERE 的逻辑

understanding the logic of AND and WHERE in t-sql

我正在处理 Transact-SQL,Microsoft Azure。 我试图理解为什么在某些连接查询中 WHEREAND 都可以使用并给出相同的结果(或者至少在我的数据库中看起来是相同的结果)和其他查询 where 行不通。

在这里,我加入了 2 tables:

select c.customerID, ca.addressID, ca.addressType
from salesLT.customer as c
join salesLT.customerADdress as ca
on c.customerID = ca.customerID
WHERE ca.addressType = 'Main Office';  --WHERE or AND works the same

这给了我我一直在寻找的东西 = 只有 customerAddress table 中类型为 'Main Office' 的行。将单词 WHERE 更改为 AND 会得到完全相同的结果。

现在,查询是基于之前的查询,但我正在尝试加入 3 tables。这里 WHERE 不起作用,我必须输入 AND:

select c.customerId, c.companyName, ca.addressID, ca.addressType, a.addressLine1, a. city
from salesLT.customer as c
join salesLT.customerAddress as ca
on c.customerID = ca.customerID
WHERE ca.addressType = 'Main Office' -- error: incorrect syntax near 'join'
join salesLT.address as a
on ca.addressId = a.addressID; 

如果我将 WHERE 更改为 AND,它就会起作用。为什么? 2 tables 和 3 的连接有什么区别? 谢谢

第二个 JOIN 应该在 WHERE 子句之前

select c.customerId, c.companyName, ca.addressID, ca.addressType, a.addressLine1, a. city
from salesLT.customer as c
join salesLT.customerAddress as ca
on c.customerID = ca.customerID
join salesLT.address as a
on ca.addressId = a.addressID
WHERE ca.addressType = 'Main Office' 
;

If I change the WHERE to AND it works. Why?

因为使用and是在on子句中添加条件,而使用where是一个新的子句。

这里是完整的解释:select语句在使用多重连接时的基本语法是:

SELECT <columns>
FROM <table 1>
JOIN <table 2> ON <condition>
JOIN <table 3> ON <condition>
WHERE <condition>

这意味着您的第二个查询应如下所示:

select c.customerId, c.companyName, ca.addressID, ca.addressType, a.addressLine1, a.city
from salesLT.customer as c
join salesLT.customerAddress as ca on c.customerID = ca.customerID
join salesLT.address as a on ca.addressId = a.addressID
WHERE ca.addressType = 'Main Office';

如果您转到 link,您会发现 select 语句语法会变得更加复杂 - 但目前,基本语法应该足以让您入门。