如果我有这样的查询:
SELECT
A.ID,
A.Name,
A.Type,
B.FirstName,
B.LastName,
B.DateOfBirth,
C.OfficeName
FROM A
INNER JOIN B ON A.ContactID = B.ID
INNER JOIN C ON B.OfficeID = C.ID
WHERE
A.Type = 1
Run Code Online (Sandbox Code Playgroud)
何时应用A.Type = 1过滤器?是在连接之后,还是查询查找'A',确定它是否通过过滤器,然后只加入B和C(如果是)?
希望这是有道理的.谢谢.
Joh*_*Woo 12
首先,下面是SQL操作顺序:
在一个简单的查询中,过滤发生在FROM子句之后(在此部分找到连接).你上面所做的是它主要是将表连接到定义它们之间关系的链接列.在设置记录(连接的结果)之后,WHERE然后发生子句以过滤掉Type等于1的位置.
这是另一个使用的例子LEFT JOIN,
第一个查询:
SELECT A.ID,
A.Name,
A.Type,
B.FirstName,
B.LastName,
B.DateOfBirth
FROM A
LEFT JOIN B
ON A.ContactID = B.ID AND
B.LastName = 'Michaels'
Run Code Online (Sandbox Code Playgroud)
vs第二次查询:
SELECT A.ID,
A.Name,
A.Type,
B.FirstName,
B.LastName,
B.DateOfBirth
FROM A
LEFT JOIN B ON A.ContactID = B.ID
WHERE B.LastName = 'Michaels'
Run Code Online (Sandbox Code Playgroud)
第一个查询返回表中的所有记录A.是什么B.LastName = 'Michaels'做的是面前的桌子B将与表加入A,它过滤掉所有的记录中,其中LastName等于Michaels.因此,表A中没有匹配表的记录B将在Table 的列上具有NULL值B.
第二个查询不会与第一个查询产生相同的结果,并且执行完全相同,INNER JOIN因为在记录加入后,将对结果执行另一个过滤,并且只接受LastName等于Michaels的记录.