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中所有項