多個表關聯查詢需要依據多表之間列關係將其連接起來,這種連接方式分爲三種:內連接(inner join)、外連接(outer join)及交叉連接(cross join)。
內連接(inner join):
如果依據多個表之間列關係進行內連接,查詢結果集僅包括滿足連接條件的數據行。內連接分爲等值連接、不等值連接以及自然連接,其中等值連接最爲常見。
等值連接:在連接條件中使用等號(=)運算符比較被連接列的列值是否相等,分顯式等值連接和隱式等值連接:
1、顯式等值連接:
select ui.*,addr.* from user_info ui [inner] join address addr on ui.id = addr.user_id;
2、隱式等值連接:
select ui.*,addr.* from user_info ui,address addr where ui.id = addr.user_id;
上面SQL語句執行結果:
外連接(outer join) :
如果依據多表之間列關係進行外連接,查詢結果集不僅僅包括滿足on連接條件的數據行,還包括不滿足on連接條件的數據行。
左外連接(left [outer] join):返回的結果集中不僅包含表之間滿足on連接條件的全部數據行,還包含左表(“left [outer] join”關鍵字左邊的表)不滿足on連接條件的數據行; select ui.*,addr.* from user_info ui left join address addr on ui.id = addr.user_id;
右外連接(right [outer] join):返回的結果集中不僅包含表之間滿足on連接條件的全部數據行,還包含右表(即“right [outer] join”關鍵字右邊的表)不滿足on連接條件的數據行; select ui.*,addr.* from user_info ui right join address addr on ui.id = addr.user_id;
全外連接(full [outer] join):返回的結果集中不僅包含表之間滿足on連接條件的全部數據行,還包含左表(“full [outer] join”關鍵字左邊的表)和右表(“full [outer join”關鍵字右邊的表)中不滿足on連接條件的數據行; select ui.*,addr.* from user_info ui full join address addr on ui.id = addr.user_id;
交叉連接(cross join)(瞭解)
左表(“cross join”關鍵字左邊的表)中的每一行與右表(“cross join”關鍵字右邊的表)中的所有行組合,交叉聯接的結果是一個笛卡爾積。 select ui.*,addr.* from user_info ui cross join address addr;