hive中的幾種join到底有什么區(qū)別
hive中,幾種join的區(qū)別
數(shù)據(jù):
tom,1
jey,2
lilly,7
lilly,8
tom,1
lilly,3
may,4
bob,5
以上兩個(gè)為數(shù)據(jù),沒有什么意義,全是為了檢測(cè)join的使用
看一下兩張表,其實(shí)可以看出來,在name一行有重復(fù)的,也有不重復(fù)的,在id一行1表完全包含2表
1. left join
left join會(huì)把左邊的表所有數(shù)據(jù)列出來,當(dāng)左邊表有而右邊表沒有的時(shí)候,就會(huì)用null代替

select * from jn1 left join jn2 on jn1.name=jn2.name;
jn1.name jn1.id jn2.name jn2.id
tom 1 tom 1
jey 2 NULL NULL
lilly 7 lilly 3
lilly 8 lilly 3
而右表有左表沒有的就不會(huì)顯示了
2. join
join會(huì)把兩個(gè)表共有的部分篩選出來

select * from jn1 join jn2 on jn1.name=jn2.name;
jn1.name jn1.id jn2.name jn2.id
tom 1 tom 1
lilly 7 lilly 3
lilly 8 lilly 3
可以看到,共有的部分篩選了出來
3. full join
會(huì)把兩者沒有的有的全部數(shù)據(jù)都選出來,沒有的顯示空值

select * from jn1 full join jn2 on jn1.name = jn2.name;
jn1.name jn1.id jn2.name jn2.id
tom 1 tom 1
NULL NULL bob 5
jey 2 NULL NULL
lilly 7 lilly 3
lilly 8 lilly 3
NULL NULL may 4
4. Join…on 1=1
這種情況會(huì)有笛卡爾積的產(chǎn)生,就是表1的每一行都會(huì)和表2匹配一下,這樣就會(huì)產(chǎn)生指數(shù)級(jí)的增長(zhǎng)

select * from jn1 join jn2 on 1=1;
jn1.name jn1.id jn2.name jn2.id
tom 1 lilly 3
tom 1 bob 5
tom 1 may 4
tom 1 tom 1
jey 2 lilly 3
jey 2 bob 5
jey 2 may 4
jey 2 tom 1
lilly 7 lilly 3
lilly 7 bob 5
lilly 7 may 4
lilly 7 tom 1
lilly 8 lilly 3
lilly 8 bob 5
lilly 8 may 4
lilly 8 tom 1
5. union
會(huì)把查詢結(jié)果拼接起來,但是要求兩個(gè)查詢結(jié)果的行數(shù)必須保持一致
否則會(huì)報(bào)錯(cuò)
FAILED: SemanticException Schema of both sides of union should match
select * from jn1 union select * from jn2;
_u1.name _u1.id
jey 2
lilly 7
bob 5
lilly 3
lilly 8
tom 1
may 4
6. union all
union會(huì)組合起來,那么union all可以不
select * from jn1 union all select * from jn2;
lilly 3
tom 1
may 4
bob 5
tom 1
jey 2
lilly 7
lilly 8
union和union all的區(qū)別
從上述的兩個(gè)結(jié)果就可以看出來了兩者的區(qū)別,union會(huì)自動(dòng)去重處理,所以結(jié)果把重復(fù)的數(shù)據(jù)去掉了,而union all則不會(huì)去重。


注意tips:left join會(huì)用之后,right join不用說了吧
總結(jié)
到此這篇關(guān)于hive中的幾種join到底有什么區(qū)別的文章就介紹到這了,更多相關(guān)hive的join區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Sql Server、Access數(shù)據(jù)排名的實(shí)現(xiàn)方法(例如:成績(jī)排名)
在很多時(shí)候,我們需要統(tǒng)計(jì)數(shù)據(jù)的排名情況,最常見的是成績(jī)、投票數(shù)等等的。2009-06-06
在Windows下自動(dòng)備份PostgreSQL的教程
這篇文章主要介紹了在Windows下自動(dòng)備份PostgreSQL的教程,主要通過編寫一個(gè)簡(jiǎn)單的批處理腳本,需要的朋友可以參考下2015-04-04
基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫(kù)
這篇文章主要介紹了基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫(kù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
access mysql mssql 隨機(jī) 10條數(shù)據(jù)的sql語句
好多情況下,大家需要隨機(jī)抽取幾個(gè)數(shù)據(jù),當(dāng)然數(shù)據(jù)是從數(shù)據(jù)庫(kù)來的,所以腳本之家特為大家準(zhǔn)備了一些。2009-05-05
利用DataSet部分功能實(shí)現(xiàn)網(wǎng)站登錄
這篇文章主要介紹了利用DataSet部分功能實(shí)現(xiàn)網(wǎng)站登錄 ,需要的朋友可以參考下2017-05-05

