最近墨坚,突然想起來數(shù)據(jù)庫有好些時間沒用到,所以盗尸,想把數(shù)據(jù)庫有關(guān)的知識回顧一下,所以接下來這個月泼各,基本上會以數(shù)據(jù)庫的帖子來寫為主,首先,很多同學(xué)都會有個錯覺逆巍,覺得學(xué)習(xí)數(shù)據(jù)庫會sql語句的增刪改查就夠了弱贼,其實,這僅僅是片面的認(rèn)知溪烤,掌握了這些還遠(yuǎn)遠(yuǎn)不夠庇勃,sql是你作為謀求生計的基本功,不會也得會责嚷,但是,要想變得優(yōu)秀揍异,還得學(xué)習(xí)更多的爆班,比如:存儲器、索引戚嗅、事務(wù)等等枢舶。今天先和大家聊聊面試時技術(shù)官常會問你的:你說說看左連接與右連接以及全連接的區(qū)別,這個問題不管你是面試開發(fā)崗凉泄、測試崗甚至是產(chǎn)品崗,都會問到醇份,接下來的慢慢看,就當(dāng)回顧一下舊知識
在具體的介紹之前僚纷,先準(zhǔn)備兩張表,拿我自己的舉例:test001(看作左表) 怖竭、 test002(看作右表)
1.內(nèi)連接
關(guān)鍵字:inner join
sql語句:select * from table_left(表名) inner join table_right(表名) on table_left.id = table_right.id
注釋說明:結(jié)合兩張表的記錄痊臭,返回相關(guān)的查詢結(jié)果,返回的是兩個表的交集部分(即陰影部分)广匙,見下圖
用我剛剛上面舉例的兩張表查詢一下:SELECT* FROM test001 INNER JOIN test002 ON test001.id=test002.id
兩張表都有主鍵id,內(nèi)連接的查詢就是找出相同的主鍵以及主鍵附帶的字段信息鸦致,這里咱們可以把sql再改進(jìn)一下涣楷,讓查詢結(jié)果看起來不是那么累贅
sql語句 : SELECT test001.id AS ID ,test001.username,test002.job FROM test001 INNER JOIN test002 ON test001.id=test002.id
2.左連接
關(guān)鍵字:left join
sql語句:select* from table_left(表名) left join table_right(表名) on table_left.id = table_right.id
注釋說明:left join 是left outer join 的簡寫狮斗,全稱其實是左外連接,屬于外連接的一種碳褒,左連接查詢,左表的信息全部展示出來睦授,右表只會展示符合搜索條件的信息专酗,不足的地方記為NULL
同樣的,用我剛剛最上面準(zhǔn)備好的兩張表查詢一下:SELECT test001.id AS ID ,test001.username,test002.job FROM test001 LEFT JOIN test002 ON test001.id=test002.id
3.右連接
關(guān)鍵字:right join
sql語句:select* from table_left(表名) right join table_right(表名) on table_left.id = table_right.id
注釋說明:right join 是right outer join 的簡寫沉填,全稱是右外連接佑笋,也屬于外連接的一種,右連接查詢猎荠,右表的信息全部展示出來,左表只會展示符合搜索條件的信息关摇,不足的地方記為NULL
如出一轍输虱,用我剛剛最上面準(zhǔn)備好的兩張表查詢一下:SELECT test002.id AS ID ,test001.username,test002.job FROM test001 RIGHT JOIN test002 ON test001.id=test002.id
看上圖的右連接查詢結(jié)果:右表的信息都有,左表的信息愁茁,有的就展示亭病,沒有的有用NULL表示,很容易區(qū)別
4.全連接
關(guān)鍵字: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 進(jìn)行合并陋桂;通常采用union all 進(jìn)行合并蝶溶;
②被union 連接的sql 子句,單個子句中不用寫order by 抖所,因為不會有排序的效果。但可以對最終的結(jié)果集進(jìn)行排序暴匠;
(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; //有排序效果
同樣的傻粘,我用最開始最上面準(zhǔn)備的兩張表帮掉,來進(jìn)行全連接合并
查詢結(jié)果看上圖:左表的字段信息和右表的字段信息都全部顯示蟆炊,如果你想進(jìn)行id排序也可以瀑志,加個order by id
(SELECT test001.id,test001.username FROM test001)UNION ALL (SELECT test002.id,test002.job FROM test002) ORDER BY id
友情提示:union會自動將完全重復(fù)的數(shù)據(jù)去除掉;union all會保留那些重復(fù)的數(shù)據(jù)后室;所以混狠,建議大家合理使用,根據(jù)自己的需求進(jìn)行sql查詢