首先,以下是 SQL 操作顺序:
- FROM 子句
- WHERE 子句
- GROUP BY 子句
- HAVING 子句
- 选择子句
- ORDER BY 子句
在一个简单的查询中,过滤发生在FROM
子句之后(在这部分找到连接)。您上面的查询所做的是主要将表与定义它们关系的链接列连接起来。设置记录后(连接的结果),WHERE
然后执行子句以过滤掉Type
is 等于 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'
与第二个查询:
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'
第一个查询返回 table 中的所有记录A
。什么B.LastName = 'Michaels'
是在表B
将与表连接之前A
,它会过滤掉所有LastName
等于的记录Michaels
。因此,A
在 Table 上的过滤记录上没有匹配的 table 中的记录将在 Table的列上B
具有NULLB
值。
第二个查询将不会产生与第一个查询相同的结果,并且执行完全相同的结果,INNER JOIN
因为在连接记录后,将对结果执行另一个过滤,并且只获取LastName
等于Michaels的记录。