天天看點

内連接配接、全連結、左外連接配接、右外連接配接、交叉連接配接

今天看到Hibernate的HQL中有關連接配接查詢的知識, 又翻了翻薩師煊老師的《資料庫系統概論》參考了幾篇部落格,總結下關于資料庫連接配接(join)的知識點。

表a

id name
1 張三
2 李四
3 王五

表b

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

内連接配接、全連結、左外連接配接、右外連接配接、交叉連接配接