时间:2021-07-01 10:21:17 帮助过:102人阅读
数据库在通过连接两张或者多张表返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户
在使用inner join(内连接)没有区别,但是 在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。(返回左表全部记录)。此时可能会出现与右表不匹配的记录即为空的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。
假设有两张表:表1:tab1
id | size |
1 | 10 |
2 | 20 |
3 | 30 |
表2:tab2
size | name |
10 | AAA |
20 | BBB |
20 | CCC |
两条SQL:
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)
3、select * from tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=‘AAA‘) where tab2.id is not null;
2和3是等价的。只是2中包含了不匹配的结果所有与1不等价。
第一条SQL的过程:
|
第二条SQL的过程:
|
数据库之“on”“where”区别
标签:har from ack join 区别 中间 orm digg 使用