left join on and 与 left join on where的区别

转载 2015年11月18日 14:29:49

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

      在使用left jion时,onwhere条件的区别如下:

1 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

       假设有两张表:

1 tab1

id size

1 10

2 20

3 30

2 tab2

size name

10 AAA

20 BBB

20 CCC


两条SQL:
1
select * from tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
2
select * from tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

第一条SQL的过程:

1、中间表
on
条件
tab1.size = tab2.size

tab1.id    tab1.size   tab2.size     tab2.name

1              10                  10              AAA

2             20                    20             BBB

2            20                     20              CCC

3            30                   (null)             (null)

2、再对中间表过滤
where 
条件:
tab2.name=’AAA’

tab1.id      tab1.size       tab2.size     tab2.name

1                 10                 10             AAA

第二条SQL的过程:

1、中间表
on
条件
tab1.size = tab2.size and tab2.name=’AAA’
(
条件不为真也会返回左表中的记录)

tab1.id      tab1.size        tab2.size       tab2.name

1              10                    10                  AAA

2              20                  (null)              (null)

3              30                   (null)                (null)

     其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回leftright表中的记录full则具有leftright的特性的并集。inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

left join (on 和 where条件放置的区别)

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。       在使用left jion时,on和where条件的区别如下: 1、 on条件是在生成临时...
  • jihuanliang
  • jihuanliang
  • 2013年12月16日 22:48
  • 2420

Oracle的left join中on和where的区别以及与(+)的区别

自从用了oracle数据库之后,基本上都是用(+)的方式来替代了left join,前几日执行一个语句发现有问题,仔细检查发现oracle的连接用法left join与 (+)的方式还是有点区别的。刚...
  • mousever
  • mousever
  • 2012年08月17日 14:27
  • 1369

LEFT JOIN后AND与WHERE的异同

1、AND 过滤之后再连接 2、WHERE 连接之后再过滤 下面以具体例子来说明: (1)、建表及插入测试数据   [c-sharp]view plaincopyprint? ...
  • z69183787
  • z69183787
  • 2013年11月26日 14:54
  • 1289

mysql left join on 与 where 筛选的差异

mysql left join   on 与 where 筛选的差异 准备两张表: a表: id a 1 a1 2 a2 3 a3 b表: i...
  • u010558660
  • u010558660
  • 2016年06月21日 09:13
  • 2995

LEFT JOIN(联表)的条件写在ON中和WHERE的区别

LEFT JOIN(联表)的条件写在ON中和WHERE的区别 转载自:http://www.cnblogs.com/GuominQiu/articles/1936959.html 写在ON...
  • weinierzui
  • weinierzui
  • 2016年11月11日 09:55
  • 2449

亲测SQL left join on 和 where 效率

最近看到很多前辈都用了left join on,于是在网上查了好久,感觉说的不大对劲,于是,亲测了一下。虽然不严谨,但是,已经反映一般规律了。 亲测SQL  left join on 和 whe...
  • yang_best
  • yang_best
  • 2015年02月06日 13:38
  • 3914

sql中join与left-join图解区别

t1表内容如下: t2表内容如下: 下面来简述join和left join/right join的区别: inner join select * from t1 inner join ...
  • wl_haanel
  • wl_haanel
  • 2014年05月02日 19:19
  • 7500

SQL LEFT JOIN WHERE 的执行顺序

USE [Test] GO --创建表-- CREATE TABLE ClassDemo ( ClassID UNIQUEIDENTIFIER PRIMARY KEY, ClassName NVA...
  • czh4869623
  • czh4869623
  • 2017年03月15日 09:29
  • 911

Oracle left join on 与 where 的区别

说明:需要查找 数据表中 2
  • huaishuming
  • huaishuming
  • 2014年10月24日 17:21
  • 567

mysql中left join on后面and和where条件查询的差异

mysql中,运算符是有优先级的.举个例子 create table A(id int); INSERT INTO A VALUES(1); INSERT INTO A VALUES(2); INSE...
  • wang57389675
  • wang57389675
  • 2017年03月14日 18:48
  • 3404
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:left join on and 与 left join on where的区别
举报原因:
原因补充:

(最多只允许输入30个字)