在SQL 中ON是用于设置多表连接时的连接条件的,不符合连表条件的数据不会生成对应的连接记录;而使用WHERE设置的过滤条件是作用于连表完成之后的连接记录的,因此当连表后的记录不符合过滤条件时,只有该条连接记录不会出现在查询结果中;对于使用HAVING设置的过滤条件是针对GROUP BY分组后的每组记录的,因此通常需要使用聚...
2. 内连接的on连接过滤条件等同于where过滤条件 当连接条件是 inner join内连接时, on连接的过滤条件 等同于 where 过滤条件 也就是说 你把过滤条件 放到 on 语句后面 或者放到 where 语句后面,效果是一致的 3.left join 外连接 on 连接条件 left join外连接的时候, on 连接条件过滤 和 where 条件过滤 区别...
On、Where的异同 这两个概念中也是绝大多数人无法区分到底它们两者之间有何区别,我什么时候使用On,什么时候使用Where,下面将分别展示两者的异同。 ON的使用无论是左右内全都使用到了On来进行关联: 对于Inner Join 的作用就是起到了与where相同的作用条件筛选: select * from Students s inner JOIN Class c on ...
1、on只能用于连接查询(内连接、外连接、交叉连接),在其他情况下使用on会报错,比如: 1 select* from test on id = 1; -- 报错,不能在普通查询里使用on,需要使用where 2、连接查询会产生一张中间表(临时表),on是在生成中间表时使用的条件;而where是在中间表生成后对中间表进行过滤使用的条件。比如: test1...
大家可以看到我们把条件放到on和放到where出现了完全不同的结果。 那么为什么会有这样的结果呢? 在left join中,基本规律是左表保留,右表按照左表的相同字段进行匹配,匹配不上就使用Null填充。 on 和 where 的本质差异体现在其运行顺序上。 1.on的运行顺序 ...
既然ON和WHERE都是过滤筛选条件的,那么能不能将WHERE后面的条件 a.城市='广州' 放在 ON条件后面呢? 这里要分情况来看: 如果是内连接(inner join)是可以直接放ON后面的,与放在WHERE后面的效果是相同的。 我们还是以上一章的例题来讲解: 因为在sql的内连接阶段,左表(a)和右表(b)通过笛卡尔积生成的虚表VT-A1...
神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(一)中,我们讲到了 3 种联表算法:SNL、BNL 和 INL,了解了数据的查询方式是 one by one,联表方式也是 one by one ;并谈到了 ON 和 WHERE,对下图中所说的提出了质疑 认为ON 和 WHERE 的生效时机有待商榷;此时楼主开始了欠大家的账 ...
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。 假设有两张表: ...
1. on和where条件的区别如下: 1-1.on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录(就是返回左表所有记录)。 1-2.where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了, 条件不为真的就全部过滤掉。
4. 而 inner jion 没这个特殊性,则条件放在 on 中和 where 中,返回的结果集是相同的。