1:表结构
test1 test2
id name id temp
1 bai 1 ming
2 bai 2 jie
3 ming 3 bai
4 yu 4 zhang
5 zhang 5 wan
6 wan 6 yi
7 yi 8 ai
2:语法
select *
from
(select * from test1) ttt1
left join
(select * from test2)ttt2
on ttt1.id = ttt2.id
and ttt2.id > 2 and ttt1.id >1
3:结果
id name id temp
1 bai NULL NULL
2 bai NULL NULL
3 ming 3 bai
4 yu 4 zhang
5 zhang 5 wan
6 wan 6 yi
7 yi NULL NULL
4:说明
对于示例两表的左连接由于test1为左表,所以结果中保存了test1的所有项
而根据条件ttt1.id = ttt2.id 我们将test2中id等于test1中id的项附加到ttt1后面
由于没有test2.id中没有id=7的项,所以第7行后两列数据为空。
根据条件ttt1.id > 1 说明 test1表中只提供id>1的项供test2进行匹配操作,所以第一行后两列为空
根据条件ttt2.id > 2 说明 test2只选择id>2的项,去与test1提供的,可以进行匹配的项来匹配,所以第二行尽管test1允许被匹配,但由于test2不提供此项来匹配,所以后两列数据仍然为空。
5:注意事项
左连接时必须是有on条件,否则会报错。
test1相当于主表,其中所有项在结果集中都会被保存。
所有针对test1所设的条件都相当于筛选提供被匹配的项
test2相当于辅表,其中只有符合所有匹配条件的项才会被保存,否则为null
所有针对test2所设置的条件都相当于选择项来与test1提供的匹配的项来匹配。
on 是在生成临时表时用于筛选条件,而where则是在生成后进行选择,不会保存test1中所有项