今天看到Hibernate的HQL中有關連接配接查詢的知識, 又翻了翻薩師煊老師的《資料庫系統概論》參考了幾篇部落格,總結下關于資料庫連接配接(join)的知識點。
id | name |
---|---|
1 | 張三 |
2 | 李四 |
3 | 王五 |
id | score | foreign_id |
1 | 95 | 1 |
2 | 65 | 1 |
3 | 79 | 2 |
4 | 88 | 4 |
内連接配接(自然連接配接)
就是簡單的根據兩個表的連接配接查詢,如連接配接a、b查詢有成績的學生資訊:
select a.name, b.score from a inner join b on a.id=foreign_id
(inner是可以省略的)
當然可以進行 < > = 的判斷
外連接配接
全連接配接(full join)
全聯接結果為左表和右表中的所有行。當某行在另一個表中沒有比對行時,則另一個表的選擇屬性為null否則顯示資料
select a.name, b.score from a full join b on a.id=b.foreign_id
mysql是沒有全連接配接的使用union結合左連接配接與有連接配接實作
左外連結 (left join)
左外聯接的結果包括左表的所有行,如果右表沒有比對值則為null
select a.name, b.score from a left join b on a.id=b.foreign_id
右外連結 (right join)
右外聯接和左外連結相反,結果包含右表的所有行,如果左表沒有比對值則為null
select a.name, b.score from a right join b on a.id=b.foreign_id
交叉連接配接
交叉連接配接的結果是左表與右表所有的行的組合,如左表x行,右表y行,則結果為x*y行。交叉連接配接又稱笛卡爾積。
select * from a, b
or
select * from a cross join b