加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 何时进行WHERE过滤?

发布时间:2020-12-12 06:19:32 所属栏目:MsSql教程 来源:网络整理
导读:参见英文答案 SQL order of operations7个 如果我有这样的查询: SELECT A.ID,A.Name,A.Type,B.FirstName,B.LastName,B.DateOfBirth,C.OfficeNameFROM A INNER JOIN B ON A.ContactID = B.ID INNER JOIN C ON B.OfficeID = C.IDWHERE A.Type = 1 何时应用A.Ty
参见英文答案 > 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的记录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读