sql中left join on 和where的执行顺序 ?
发布网友
发布时间:2022-04-08 07:06
我来回答
共4个回答
热心网友
时间:2022-04-08 08:35
(8)SELECT (9)DISTINCT (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>
逻辑查询处理阶段简介
FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian proct)(交叉联接),生成虚拟表VT1
ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
WHERE:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
HAVING:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
SELECT:处理SELECT列表,产生VT8.
DISTINCT:将重复的行从VT8中移除,产生VT9.
ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。
热心网友
时间:2022-04-08 09:53
http://www.cnblogs.com/qanholas/archive/2010/10/24/1859924.html
热心网友
时间:2022-04-08 11:28
看执行计划不就知道了,现在都是基于成本的优化器了,只有看计划才能知道先执行那部分
热心网友
时间:2022-04-08 13:19
先连接,应该是从from之后顺序执行,所以先连接
sql中left join on 和where的执行顺序 ?
(8)SELECT (9)DISTINCT (11)<Top Num> (1)FROM [left_table](3)<join_type> JOIN <right_table> (2)ON <join_condition> (4)WHERE <where_condition> (5)GROUP BY <group_by_list> (6)WITH <CUBE | RollUP> (7)HAVING <having_condition> (10)ORDER BY <order_by_list> 逻辑...
SQL 之 ON 和 WHERE执行顺序
我们可以看到,执行结果是一样的,inner join 查询的就是驱动表与被驱动表同时存在的记录,所以过滤条件不管放在 ON 里,还是放在 WHERE 里,执行结果是一样的 ON 和 WHERE 的生效时机 ON 后的关联条件与 WHERE 后的过滤条件,这两者的执行顺序是否如 SQL 执行顺序图中说的那样,ON 一定先与 WH...
MySql 中多个left join 之间的顺序问题
这样写是没有问题的,也可以这样写:SELECT * FROM post LEFT JOIN user ON...LEFT JOIN block ON...WHERE ...ORDER BY ...LIMIT ...(2)上面两个到底哪个效率高呢,应该是(1)效率较高,关于连接条件的优化在顺序上有个原则:数剧量少的条件尽量写在前面。一个论坛当中板块的数量要比用户...
Hive SQL语句执行顺序
Hive 中 sql 语句的执行顺序如下:from .. where .. join .. on .. select .. group by .. select .. having .. distinct .. order by .. limit .. union/union all 下面我们通过一个 sql 语句分析下:上面这条 sql 语句是可以成功执行的,我们看下它在 MR 中的执行顺序:Map 阶段 ...
sql left join 关联跟 直接用where 两个字段id相同关联有什么区别?
后面的是只有两个记录集能关联上的时候才会显示记录。 而前面的左外关联 是指以左表 为主,左表有的数据是必然会显示出来的,不论能不能和 第二个表 的数据关联上。
sql server 中筛选条件在有关联表时放在where后面和放在on后面有什么区...
区别大了,on 是用在 表与表间(left join 、right join 、inner join 、full join)的连接条件 ,where是查询条件,两个是可以一起用的。如:select a.*,b.from a left join b --a表 左连接 b表 on a.id=b.aid --连接条件 where a.name = "column" --查询条件 ...
如何使用left join on and查询
这时主表条件写在WHERE之后,辅表条件写在ON后面。二、总结:–sql语句1可见,left join 中左表的全部记录将全部被查询显示,on 后面的条件对它不起作用,除非再后面再加上where来进行筛选,这就是sql语句2了。–由sql语句3可见,on后面的条件中,右表的限制条件将会起作用。希望对你有帮助 ...
sql join (以left join为例)的表的先后顺序主要如何考虑?
您好,SQL语句有join是因为把优化后的数据重新联结完整,体现直观数据表达的作用.(这样讲可能还是太抽象).我们做数据优化的时候.一般要理清楚数据实体的关联关系.例如:E-R 所以先后顺序的问题.left join的话.第一张表就是主体表 后面的都是与这张表有关联关系的表(一般是明细表,辅表)把主体表与left ...
这SQL语句里的ON 是什么意思啊
on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后。有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的。但因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的。根据上面的分析,可以知道where也应该...
left join on 加条件和where加条件是什么?
1、在on后面加条件仅适合用于left join (right join未测,inner join与where类似)。2、不考虑where条件下,left join会把左表所有数据查询出来,on及其后面的条件仅仅会影响右表的数据(符合就显示,不符合全部为null)。3、where后面加条件与左连接本身无关,影响的是连接产生后的数据。4、所以左连接...