Oracle中on与where的区别
在SQL中,where 和 on 都是用于限制 select 查询结果的条件语句,但它们之间有一些区别。
- where:是在执行 select 语句之后,对结果集进行过滤的条件。它是对查询结果集进行筛选的条件,可以使用比较操作符、逻辑操作符等条件表达式对结果集进行过滤,对于不符合条件的行进行过滤,只返回满足条件的行。
- on:是用于连接两张或多张表的条件语句。它是在连接两张或多张表时,对连接的条件进行筛选。on 条件只会筛选连接的两张表中的匹配行,在这些匹配行中执行 select 语句,因此ON条件是在连接之前执行的。
on | where |
---|---|
先对表进行筛选,再生成关联表 | 先生成关联表,再对关联表进行筛选 |
执行的优先级高于 left join | 执行的优先级低于 left join |
用于在进行多表查询的时候确定两个表之间的连接关系 | 用于在单表查询或多表查询的时候筛选数据 |
- on:会先根据on后面的条件进行筛选,条件为真时返回该行,由于on的优先级高于left join,所以left join关键字会把左表中没有匹配的所有行也都返回,然后生成临时表返回
- where:对与行的筛选是在left join之后的,也就是生成临时表之后才会对临时表进行筛选
另外,在使用 outer join(外连接)时,on 和 where 条件的执行顺序可能会影响查询结果。如果将筛选条件放在where 子句中,那么在使用outer join 时,可能会丢失一些外连接表中的数据。因此,在使用outer join时,应该将筛选条件放在 on 子句中。
版权声明:本文为Libraxu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。