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

Tsql 理解t-sql中AND和WHERE的逻辑,tsql,join,where-clause,Tsql,Join,Where Clause,我正在使用Transact-SQL、Microsoft Azure。 我试图理解为什么在一些连接查询中WHERE和和都可以使用,并给出相同的结果(或者至少在我的数据库中看起来是相同的结果),而在其他查询中WHERE不起作用并且确实起作用 在这里,我将加入两个表: select c.customerID, ca.addressID, ca.addressType from salesLT.customer as c join salesLT.customerADdress as ca on c.c

我正在使用Transact-SQL、Microsoft Azure。 我试图理解为什么在一些连接查询中
WHERE
都可以使用,并给出相同的结果(或者至少在我的数据库中看起来是相同的结果),而在其他查询中
WHERE
不起作用并且确实起作用

在这里,我将加入两个表:

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表中类型为“Main Office”的行。更改单词WHERE to和会得到完全相同的结果

现在,查询基于上一个表,但我正在尝试连接3个表。这里的
,其中
不起作用,我必须放一个

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
更改为
并且
正常工作。为什么?2个表的联接与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' 
;
如果我将
WHERE
更改为
并且
正常工作。为什么?

因为使用
是将条件添加到
on
子句中,但是使用
其中
是一个新子句

以下是完整的解释:使用多个联接时,语句的基本语法是:

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

如果您转到链接,您将看到select语句语法可能会变得更加复杂-但目前,基本语法应该足以让您开始学习。

第二个
JOIN
应该在
WHERE
子句之前,这就是为什么您要在尝试编写/修改代码之前检查文档中的语言语法,而不仅仅是在随机的地方粘贴新的位,然后感到困惑。@underline\d在随机的地方粘贴新的位被称为通过手学习。如果这让你很生气,就不需要帮助别人。很好的尝试,但我不生气。我不明白为什么这么多人认为试错法是一种很好的学习方式,或者至少是一种其他人应该支持他们的方式。考虑到这些攻击性的评论在这里如此普遍,我甚至不知道我为什么要费心回答,但也许有人会从这次对话中学到一些东西。你的问题的答案在于问题本身——你不明白为什么人们认为某种特定的方法是学习的好方法。试着想象一些人的思维和学习方式与你不同,我知道这很难,但你可能会从你周围的人身上学到一些东西。。再说一次,如果你不想支持,就不要。。
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';