這篇博客主要講join的用法,這也是數據庫查詢操作中比較基礎且重要的知識點。
join分爲內連接(inner join)和外連接(outer join)。
外連接分爲外連接(outer join)、左連接(left join)、右連接(right join)和全連接(full join)。
我們進行多表查詢的時候通常會利用笛卡爾積進行多種表的組合。
通過一下兩張表進行舉例。
PersonId | FirstName | LastName |
---|---|---|
1 | John | Allan |
AddressId | PersonId | City | State |
---|---|---|---|
1 | 2 | new york city | new york |
目錄
一、內連接
內連接查詢返回滿足條件的所有記錄,默認情況下沒有指定某種連接,則爲內連接。
操作語句:
select FirstName,LastName,City,State from Person inner join Address on Person.PersonId=Address.PersonId;
查詢結果爲Empty set (0.00 sec)
二、外連接
1.左連接
左連接又稱左外連接(left outer join),不僅返回滿足條件的所有記錄,而且還會返回不滿足連接條件的連接操作符左側表的其他行。
操作語句:
select FirstName,LastName,City,State from Person left join Address on Person.PersonId=Address.PersonId;
查詢結果爲:
FirstName | LastName | City | State |
---|---|---|---|
John | Allan | NULL | NULL |
2.右連接
右連接又稱右外連接(right outer join),不僅返回滿足條件的所有記錄,而且還會返回不滿足連接條件的連接操作符右側表的其他行。
操作語句:
select FirstName,LastName,City,State from Person right join Address on Person.PersonId=Address.PersonId;
查詢結果爲:
FirstName | LastName | City | State |
---|---|---|---|
NULL | NULL | new york city | new city |
3.外連接
外連接就是求兩個集合的並集。從笛卡爾積的角度講就是從笛卡爾積中挑出ON子句條件成立的記錄,然後加上左表和右表中剩餘的記錄。不過MySql是不支持outer join的,我們可以通過左連接和右連接結果的union操作來實現。
操作語句:
select FirstName,LastName,City,State from Person left join Address on Person.PersonId=Address.PersonId union select FirstName,LastName,City,State from Person right join Address on Person.PersonId=Address.PersonId;
查詢結果爲:
FirstName | LastName | City | State |
---|---|---|---|
John | Allan | NULL | NULL |
NULL | NULL | new york city | new york |
4.全連接
全連接查詢不僅返回滿足條件的所有記錄,而且還會返回不滿足連接條件的其他行。不過mysql默認不支持full join。