日期:2014-05-17  浏览次数:20943 次

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 ……