最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

sql(join中on与where区别)

IT圈 admin 44浏览 0评论

2024年4月2日发(作者:闽曼冬)

关键字: on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,

然后再将这张临时表返回给用户。

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会

返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没

有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1:tab2

id

1

2

3

表2:tab2

size

10

20

20

name

AAA

BBB

CCC

size

10

20

30

两条SQL:

1、select * form tab1 left join tab2 on ( = ) where

=’AAA’

2、select * form tab1 left join tab2 on ( = and

=’AAA’)

第一条SQL的过程:

1、中间表

on条件:

=

1

2

2

3

10

20

20

30

10

20

20

(null)

AAA

BBB

CCC

(null)

|

|

1

2、再对中间表过滤

where 条件:

=’AAA’

第二条SQL的过程:

10 10 AAA

1、中间表

on条件:

1 10 10 AAA

= and

=’AAA’

2 20 (null) (null)

(条件不为真也会返回左表中的

记录)

3 30 (null) (null)

其实以上结果的关键原因就是left join,right join,full join的特殊性,

不管on上的条件是否为真都会返回left或right表中的记录,full则具有left

和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where

中,返回的结果集是相同的。

2024年4月2日发(作者:闽曼冬)

关键字: on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,

然后再将这张临时表返回给用户。

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会

返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没

有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1:tab2

id

1

2

3

表2:tab2

size

10

20

20

name

AAA

BBB

CCC

size

10

20

30

两条SQL:

1、select * form tab1 left join tab2 on ( = ) where

=’AAA’

2、select * form tab1 left join tab2 on ( = and

=’AAA’)

第一条SQL的过程:

1、中间表

on条件:

=

1

2

2

3

10

20

20

30

10

20

20

(null)

AAA

BBB

CCC

(null)

|

|

1

2、再对中间表过滤

where 条件:

=’AAA’

第二条SQL的过程:

10 10 AAA

1、中间表

on条件:

1 10 10 AAA

= and

=’AAA’

2 20 (null) (null)

(条件不为真也会返回左表中的

记录)

3 30 (null) (null)

其实以上结果的关键原因就是left join,right join,full join的特殊性,

不管on上的条件是否为真都会返回left或right表中的记录,full则具有left

和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where

中,返回的结果集是相同的。

发布评论

评论列表 (0)

  1. 暂无评论