sql – 何时进行WHERE过滤?

前端之家收集整理的这篇文章主要介绍了sql – 何时进行WHERE过滤?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > 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的记录.

原文链接:https://www.f2er.com/mssql/79520.html

猜你在找的MsSQL相关文章