小编典典

什么时候进行过滤?

sql

如果我有这样的查询:

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(如果通过)?

希望这是有道理的。谢谢。


阅读 159

收藏
2021-04-15

共1个答案

小编典典

首先,下面是SQL的操作顺序:

  • FROM子句
  • WHERE子句
  • GROUP BY子句
  • HAVING子句
  • SELECT子句
  • ORDER BY子句

在一个简单的查询中,过滤发生在FROM子句之后( 在此部分找到了联接 )。您上面的要求是,它首先将表与定义其关系的链接列连接在一起。在设置了记录(
joins的结果 )之后,该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'

与第二个查询:

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。因此,来自Table的记录A与在Table的过滤记录上不匹配的记录在Table的列B上将具有
NULLB

第二个查询将不会产生与第一个查询相同的结果,并且执行的结果也将完全相同,INNER JOIN因为在将记录合并之后,将对结果执行另一个过滤,并且仅接受LastName等于 Michaels的 记录。

2021-04-15