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ù),沒(méi)有什么意義,全是為了檢測(cè)join的使用
看一下兩張表,其實(shí)可以看出來(lái),在name一行有重復(fù)的,也有不重復(fù)的,在id一行1表完全包含2表
1. left join
left join會(huì)把左邊的表所有數(shù)據(jù)列出來(lái),當(dāng)左邊表有而右邊表沒(méi)有的時(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
而右表有左表沒(méi)有的就不會(huì)顯示了
2. join
join會(huì)把兩個(gè)表共有的部分篩選出來(lái)
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
可以看到,共有的部分篩選了出來(lái)
3. full join
會(huì)把兩者沒(méi)有的有的全部數(shù)據(jù)都選出來(lái),沒(méi)有的顯示空值
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é)果拼接起來(lái),但是要求兩個(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ì)組合起來(lái),那么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é)果就可以看出來(lái)了兩者的區(qū)別,union會(huì)自動(dòng)去重處理,所以結(jié)果把重復(fù)的數(shù)據(jù)去掉了,而union all則不會(huì)去重。
注意tips:left join會(huì)用之后,right join不用說(shuō)了吧
總結(jié)
到此這篇關(guān)于hive中的幾種join到底有什么區(qū)別的文章就介紹到這了,更多相關(guān)hive的join區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL 優(yōu)化經(jīng)驗(yàn)總結(jié)34條
我們要做到不但會(huì)寫SQL,還要做到寫出性能優(yōu)良的SQL,以下為筆者學(xué)習(xí)、摘錄、并匯總部分資料與大家分享!2009-07-07ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)
本篇文章主要介紹了ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)以及在線或離線訪問(wèn)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟,有需要的朋友可以參考下2015-07-07Navicat圖形化界面之Navicat?Premium?12?安裝與使用教程
Navicat?premium?是一款數(shù)據(jù)庫(kù)管理工具,它可以讓你以單一程式同時(shí)連線到?MySQL、SQLite、Oracle?及?PostgreSQL?資料庫(kù),讓管理不同類型的資料庫(kù)更加的方便,下面通過(guò)本文給大家介紹Navicat?Premium?12?安裝使用教程,需要的朋友參考下吧2021-12-12SQLServer與Oracle常用函數(shù)實(shí)例對(duì)比匯總
這篇文章主要介紹了SQLServer與Oracle常用函數(shù)對(duì)比,需要的朋友可以參考下2014-06-06neo4j創(chuàng)建數(shù)據(jù)庫(kù)以及導(dǎo)入csv文件內(nèi)容圖文詳解
這篇文章主要給大家介紹了關(guān)于neo4j創(chuàng)建數(shù)據(jù)庫(kù)以及導(dǎo)入csv文件內(nèi)容的相關(guān)資料,Neo4j是一個(gè)基于圖形結(jié)構(gòu)的NoSQL數(shù)據(jù)庫(kù),它提供了一種高效的方式來(lái)管理和查詢大型復(fù)雜數(shù)據(jù),需要的朋友可以參考下2023-11-11用SQL Server訪問(wèn)Sybase中的表的方法
2008-01-01postgresql 按小時(shí)分表(含觸發(fā)器)的實(shí)現(xiàn)方式
這篇文章主要介紹了postgresql 按小時(shí)分表(含觸發(fā)器)的實(shí)現(xiàn)方式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01