当前位置: 代码迷 >> Oracle管理 >> sql语句中left join on与where的区别,该如何处理
  详细解决方案

sql语句中left join on与where的区别,该如何处理

热度:95   发布时间:2016-04-24 05:43:01.0
sql语句中left join on与where的区别
好像on与 结果条件没什么影响啊

------解决方案--------------------
只是left join中的过滤条件
------解决方案--------------------
1.执行顺序不一样,sql先过滤join on, 后过滤where。
2.执行结果不一样。tb1 left join tb2 ,如果 tb2没有满足的条件,用where则没有结果,但是用left join 则 会有结果。
------解决方案--------------------
inner join 是没有影响的.. left join 的on 条件 是对左表没有作用的,比如 a left join b on .. and a.id=1 这个a.id=1 对左表不起作用..即使左表a的id不是1也会被查询出来..而写在where里 就会有作用,会对临时表进行筛选.


right join 同理
------解决方案--------------------
left join是从关联表的角度出发来on被关联表 如果没找到对应关系 还是会显示出关联表的数据 但是用where的话 则不会显示数据

举个简单的例子吧
SQL code
--表tb1  id   name  1     a  2     b  3     c--表tb2  id   type  2     12 select tb1.id,tb1.name,tb2.type from tb1 left join tb2 on tb1.id=tb2.id --可以查询出3行数据  id   name  type  1     a       2     b     12  3     c select tb1.id,tb1.name,tb2.type from tb1,tb2 where tb1.id=tb2.id--查询出1条数据  id   name  type    2     b     12
------解决方案--------------------
on 指定的是进行连接的条件。
where 指定的是连接后,结果集中记录的筛选条件。
------解决方案--------------------
1个是链接,1个条件
------解决方案--------------------
on 是连接条件..在这里指定左表的筛选条件是没有作用de,但是指定右表的筛选条件起作用..
探讨

引用:
inner join 是没有影响的.. left join 的on 条件 是对左表没有作用的,比如 a left join b on .. and a.id=1 这个a.id=1 对左表不起作用..即使左表a的id不是1也会被查询出来..而写在where里 就会有作用,会对临时表进行筛选.


right join 同理


left ……
  相关解决方案