Mysql----左連接、右連接、內連接、全連接的區別


  最近,突然想起來數據庫有好些時間沒用到,所以,想把數據庫有關的知識回顧一下,所以接下來這個月,基本上會以數據庫的帖子來寫為主,首先,很多同學都會有個錯覺,覺得學習數據庫會sql語句的增刪改查就夠了,其實,這僅僅是片面的認知,掌握了這些還遠遠不夠,sql是你作為謀求生計的基本功,不會也得會,但是,要想變得優秀,還得學習更多的,比如:存儲器、索引、事務等等。今天先和大家聊聊面試時技術官常會問你的:你說說看左連接與右連接以及全連接的區別,這個問題不管你是面試開發崗、測試崗甚至是產品崗,都會問到,接下來的慢慢看,就當回顧一下舊知識

  在具體的介紹之前,先准備兩張表,拿我自己的舉例:test001(看作左表) 、  test002(看作右表)

 

 

1.內連接

關鍵字:inner join

sql語句:select*  from  table_left(表名)   inner join table_right(表名)    on   table_left.id  = table_right.id 

注釋說明:結合兩張表的記錄,返回相關的查詢結果,返回的是兩個表的交集部分(即陰影部分),見下圖

 用我剛剛上面舉例的兩張表查詢一下:SELECT* FROM test001 INNER JOIN test002 ON test001.id=test002.id  

 兩張表都有主鍵id,內連接的查詢就是找出相同的主鍵以及主鍵附帶的字段信息,這里咱們可以把sql再改進一下,讓查詢結果看起來不是那么累贅

sql語句 :   SELECT test001.id AS ID ,test001.username,test002.job FROM test001 INNER JOIN test002 ON test001.id=test002.id 

 

2.左連接

關鍵字:left join

sql語句:select*  from  table_left(表名)   left join table_right(表名)    on   table_left.id  = table_right.id 

注釋說明:left join 是left outer join 的簡寫,全稱其實是左外連接,屬於外連接的一種,左連接查詢,左表的信息全部展示出來,右表只會展示符合搜索條件的信息,不足的地方記為NULL

同樣的,用我剛剛最上面准備好的兩張表查詢一下:SELECT test001.id AS ID ,test001.username,test002.job FROM test001 LEFT JOIN test002 ON test001.id=test002.id  

 

3.右連接

關鍵字:right join

sql語句:select*  from  table_left(表名)   right join table_right(表名)    on   table_left.id  = table_right.id 

注釋說明:right join 是right outer join 的簡寫,全稱是右外連接,也屬於外連接的一種,右連接查詢,右表的信息全部展示出來,左表只會展示符合搜索條件的信息,不足的地方記為NULL

 如出一轍,用我剛剛最上面准備好的兩張表查詢一下:SELECT test002.id AS ID ,test001.username,test002.job FROM test001 RIGHT JOIN test002 ON test001.id=test002.id 

 

 看上圖的右連接查詢結果:右表的信息都有,左表的信息,有的就展示,沒有的有用NULL表示,很容易區別

4.全連接

關鍵字:union / union all

sql語句:(select colum1,colum2,colum3... from  table_left) union (select colum1,colum2,colum3... from  table_right

     (select colum1,colum2,colum3... from  table_left) union all (select colum1,colum2,colum3... from  table_right

全連接:實際上就是把兩張表合並,不管有的沒的,都先給整上來。

注意事項:①用union 時,完全相等的行,將會被合並,由於合並比較耗時,一般不直接使用 union 進行合並;通常采用union all 進行合並;

        ②被union 連接的sql 子句,單個子句中不用寫order by ,因為不會有排序的效果。但可以對最終的結果集進行排序;

       (select  colum1,colum2....from A order by id) union all (select  colum1,colum2... from B order by id); //沒有排序效果

       (select colum1,colum2... from A ) union all (select colum1,colum2... from B ) order by id; //有排序效果

同樣的,我用最開始最上面准備的兩張表,來進行全連接合並

 

 查詢結果看上圖:左表的字段信息和右表的字段信息都全部顯示,如果你想進行id排序也可以,加個order by id 

(SELECT test001.id,test001.username FROM test001)UNION ALL (SELECT test002.id,test002.job FROM test002) ORDER BY id

 友情提示:union會自動將完全重復的數據去除掉;union all會保留那些重復的數據;所以,建議大家合理使用,根據自己的需求進行sql查詢

 

本文注重原創,本着資源共享的原則,如若需要轉載,請注明出處:https://www.cnblogs.com/xj-excellent/p/13292291.html,文中如果有不對的地方請廣大網友指出,可直接留言評論,我們一起共勉,共同進步。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM