理解 t-sql 中 AND 和 WHERE 的逻辑
understanding the logic of AND and WHERE in t-sql
我正在处理 Transact-SQL,Microsoft Azure。
我试图理解为什么在某些连接查询中 WHERE
和 AND
都可以使用并给出相同的结果(或者至少在我的数据库中看起来是相同的结果)和其他查询 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 语句语法会变得更加复杂 - 但目前,基本语法应该足以让您入门。
我正在处理 Transact-SQL,Microsoft Azure。
我试图理解为什么在某些连接查询中 WHERE
和 AND
都可以使用并给出相同的结果(或者至少在我的数据库中看起来是相同的结果)和其他查询 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
toAND
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 语句语法会变得更加复杂 - 但目前,基本语法应该足以让您入门。