Mysql----左連線、右連線、內連線、全連線的區別
最近,突然想起來資料庫有好些時間沒用到,所以,想把資料庫有關的知識回顧一下,所以接下來這個月,基本上會以資料庫的帖子來寫為主,首先,很多同學都會有個錯覺,覺得學習資料庫會sql語句的增刪改查就夠了,其實,這僅僅是片面的認知,掌握了這些還遠遠不夠,sql是你作為謀求生計的基本功,不會也得會,但是,要想變得優秀,還得學習更多的,比如:儲存器、索引、事務等等。今天先和大家聊聊面試時技術官常會問你的:你說說看左連線與右連線以及全連線的區別,這個問題不管你是面試開發崗、測試崗甚至是產品崗,都會問到,接下來的慢慢看,就當回顧一下舊知識
在具體的介紹之前,先準備兩張表,拿我自己的舉例:test001(看作左表) 、 test002(看作右表)
1.內連線
關鍵字:inner join
sql語句:select* from table_left(表名) inner jointable_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 jointable_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 jointable_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); //沒有排序效果
(selectcolum1,colum2... from A ) union all (selectcolum1,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,文中如果有不對的地方請廣大網友指出,可直接留言評論,我們一起共勉,共同進步。