關於Mysql 中 inner join , left join , right join的區別

關於Mysql 中 inner join , left join , right join的區別 ,他們分別應用在什麼情景呢?


現在我們 有2個表 一個是person 表  一個是 Orders表

結構如下:

person表

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

orders表

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65


1 inner join    

*注意:INNER JOIN 與 JOIN 是相同的。

我們輸入如下語句:

select * from  person inner join   orders  on person.id_p = orders.id_p order by lastname ;

得出如下結果:


結論:INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。如果 "Persons" 中的行在 "Orders" 中沒有匹配,就不會列出這些行。注意如果顛倒語句中的person和orders表的位置 並不會影響返回行的結果,只會影響字段顯示的順序。


2 left join 

我們輸入如下語句:

select person.id_p,person.lastname,orders.id_o,orders.orderno  from  person left  join   orders  on person.id_p = orders.id_p order by lastname desc ;
得出如下結果:


可以發現這裏 有些行的字段值是空的 那是因爲  LEFT JOIN 關鍵字會從左表 (Persons) 那裏返回所有的行,即使在右表 (Orders) 中沒有匹配的行。也就是說在沒有加上where+條件的情況下 左表中的數據 將會被全部列出,並連接了右表的數據,如果沒有匹配,右表的字段值就爲空


3 right join 

註釋:在某些數據庫中, RIGHT JOIN 稱爲 RIGHT OUTER JOIN。

既然明白了 left join 我想 right join 就不難了

如下語句:

select person.id_p,person.lastname,orders.id_o,orders.orderno  from  person right  join   orders  on person.id_p = orders.id_p order by lastname desc ;
結果如下:


結論:可以和left join 的對比下  右表的數據被全部列出了  orderno爲 34764的數據行 中的id_p 是65 ,在左表中顯然沒有 ,但是也列出來了。就是因爲 RIGHT JOIN 關鍵字會從右表 (Orders) 那裏返回所有的行,即使在左表 (Persons) 中沒有匹配的行。以右表爲主.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章