参见英文答案 >
SQL order of operations7个
如果我有这样的查询:
如果我有这样的查询:
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
何时应用A.Type = 1过滤器?是在连接之后,还是查询查找’A’,确定它是否通过过滤器,然后只加入B和C(如果是)?
希望这是有道理的.谢谢.
解决方法
首先,下面是sql操作顺序:
> FROM子句
> WHERE子句
> GROUP BY子句
> HAVING子句
> SELECT子句
> ORDER BY子句
在一个简单的查询中,过滤发生在FROM子句之后(在此部分找到连接).你上面所做的是它主要是将表连接到定义它们之间关系的链接列.在设置了记录(连接的结果)之后,然后发生WHERE子句来过滤掉其中is等于1的Type.
这是使用LEFT JOIN的另一个例子,
第一个查询:
SELECT A.ID,B.DateOfBirth FROM A LEFT JOIN B ON A.ContactID = B.ID AND B.LastName = 'Michaels'
vs第二次查询:
SELECT A.ID,B.DateOfBirth FROM A LEFT JOIN B ON A.ContactID = B.ID WHERE B.LastName = 'Michaels'
第一个查询返回表A中的所有记录.B .LastName =’Michaels’做的是在表B与表A连接之前,它过滤掉LastName等于Michaels的所有记录.因此,表A中没有匹配表B上的过滤记录的记录将在表B的列上具有NULL值.
第二个查询不会产生与第一个查询相同的结果,并且与INNER JOIN执行完全相同,因为在记录加入后,将对结果执行另一个过滤,并仅获取LastName等于Michaels的记录.