SQL查询的顺序

时间:2018-03-17 15:24:13

标签: sql

我想找到sql查询的顺序。首先执行哪个查询。每个中间查询集的结果是什么。

    select 0 from
(
select lg.a.aid ,lg.c.number from lg.a
left join lg.c
on lg.a.aid=lg.c.aid

)
as t1
where t1.number is null

1 个答案:

答案 0 :(得分:1)

没有“第一”或“第二”的东西被执行。

SQL是一种描述性语言。 SQL查询描述结果集。从语义角度(理解查询的含义),有一些规则说“首先查看from子句,然后查看where,然后查看group by,依此类推”。但是,这只会解释查询的解析阶段。

实际执行的内容(几乎在所有SQL引擎中)都称为有向非循环图(DAG)。这表示执行处理的组件的数据流。 SQL编译器和优化器创建DAG。 DAG与原始查询之间的关系很简单:DAG的结果应该是查询的意图。

你的例子是:

select 0
from (select lg.a.aid, lg.c.number
      from lg.a left join
           lg.c
           on lg.a.aid = lg.c.aid
     ) as t1
where t1.number is null;

您的问题意味着什么并不清楚:“首先执行哪个查询?”此示例只有一个查询,尽管有一个子查询。在以任何合理的方式处理查询时,需要执行子查询的逻辑。但是,您的查询等同于:

 select 0
 from lg.a left join
      lg.c
      on lg.a.aid = lg.c.aid
 where lg.number is null;

在大多数数据库中,这将具有相同的执行计划。