欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Left join 中where on 的 区别

程序员文章站 2022-05-10 14:28:18
...
  • 问题:

Left join中where, on区别

table a(id, type):
id     type
1      1        
2      1         
3      2  
table b(id, class):
id    class
1      1
2      2
sql语句1:select a.*, b.* from a left join b on a.id = b.id and a.type = 1;
sql语句2:select a.*, b.* from a left join b on a.id = b.id and b.class = 1;
sql语句3:select a.*, b.* from a left join b on a.id = b.id where a.type = 1;
sql语句1的执行结果为:
a.id    a.type    b.id    b.class
1        1            1        1
2        1            2        2
3        2              
sql语句2的执行结果为:
a.id    a.type    b.id    b.class
1        1            1        1
2        1           
3        2           
sql语句3的执行结果为:
a.id    a.type    b.id    b.class
1        1            1        1
2        1            2        2

  • 结论:

//此表结论:
left join 中左表的全部记录将全部被查询显示,on 后面的条件对左边的表不起作用,但对右表的限制条件将会起作用。
//此次结论:
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给 用户。
1、 on 条件是在生成临时表时使用的条件,返回左边的全部记录。
2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须 返回左边表的记录)了,条件不为真的就全部过滤掉。