求助 先 where条件过滤 还是先 join on
oracle 在做多表关联查询的时候 是先 进行 where 条件的过滤 还是先进行 表之间的连接呢。
一直以来 我都 认为 是要先进行 where 过滤之后 才进行表之间的关联的。然而今天做了一个实验
测试数据如下。
如果先执行 where后面的条件 在执行 on 的话 应该会报错的。但是现在没有报错。 那是不是 说明 先执行表之间的关联等关联出结果之后 在进行where条件过滤
一直以来 我都 认为 是要先进行 where 过滤之后 才进行表之间的关联的。然而今天做了一个实验
测试数据如下。
WITH TEMP_TAB1 AS
(
SELECT 1 ID , 'MINGMING' NAME ,0 SCORE FROM DUAL UNION ALL
SELECT 9 ID , 'MINGMING' NAME ,20 SCORE FROM DUAL UNION ALL
SELECT 2 ID , 'HUAHUA' NAME , 80 SCORE FROM DUAL UNION ALL
SELECT 3 ID , 'NIUNIU' NAME, 90 SCORE FROM DUAL UNION ALL
SELECT 4 ID , 'MEI' NAME ,70 SCORE FROM DUAL UNION ALL
SELECT 5 ID , 'YOU' NAME, 40 SCORE FROM DUAL
) ,TEMP_TAB2 AS
(
SELECT 1 ID , 'REN' NAME , 20 SCORE FROM DUAL UNION ALL
SELECT 3 ID , 'NIUNIU' NAME ,30 SCORE FROM DUAL UNION ALL
SELECT 4 ID , 'RURU' NAME ,60 SCORE FROM DUAL UNION ALL
SELECT 5 ID , 'HONGHONG' NAME ,0 SCORE FROM DUAL
) SELECT *
FROM TEMP_TAB1 A
inner JOIN TEMP_TAB2 B
ON A.ID = B.ID
and b.score <> 0
--and 10/a.score = 0.25
where 10/b.score = 0.5 如果先执行 where后面的条件 在执行 on 的话 应该会报错的。但是现在没有报错。 那是不是 说明 先执行表之间的关联等关联出结果之后 在进行where条件过滤
...全文
相关推荐
left join 过滤条件写在on后面和写在where 后面的区别
left join 过滤条件写在on后面和写在where 后面的区别
mysql中left join设置条件在on与where时的用法区别分析
主要介绍了mysql中left join设置条件在on与where时的用法区别,结合实例形式分析了mysql中left join设置条件在on与where时的相关用法区别与操作注意事项,需要的朋友可以参考下
MySQL left join操作中on和where放置条件的区别介绍
优先级 两者放置相同条件,之所以可能会导致结果集不同,就是因为优先级。on的优先级是高于where的。 首先明确两个概念: LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在left join下,两者的区别: on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (table_name1) 的行。 where则是在生成临时表之后使用的条件,此时已经不管是否使
sql语句join中on和where的区别
本文简单描述了sql语句join中on和where的区别以及其原理
深入Oracle的left join中on和where的区别详解
本篇文章是对Oracle的left join中on和where的区别进行了详细的分析介绍,需要的朋友参考下


