網站首頁 編程語言 正文
hive中,幾種join的區別
數據:
tom,1
jey,2
lilly,7
lilly,8
tom,1
lilly,3
may,4
bob,5
以上兩個為數據,沒有什么意義,全是為了檢測join的使用
看一下兩張表,其實可以看出來,在name一行有重復的,也有不重復的,在id一行1表完全包含2表
1. left join
left join會把左邊的表所有數據列出來,當左邊表有而右邊表沒有的時候,就會用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
而右表有左表沒有的就不會顯示了
2. join
join會把兩個表共有的部分篩選出來
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
會把兩者沒有的有的全部數據都選出來,沒有的顯示空值
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
這種情況會有笛卡爾積的產生,就是表1的每一行都會和表2匹配一下,這樣就會產生指數級的增長
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
會把查詢結果拼接起來,但是要求兩個查詢結果的行數必須保持一致
否則會報錯
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會組合起來,那么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的區別
從上述的兩個結果就可以看出來了兩者的區別,union會自動去重處理,所以結果把重復的數據去掉了,而union all則不會去重。
注意tips:left join會用之后,right join不用說了吧
總結
原文鏈接:https://blog.csdn.net/weixin_46429290/article/details/123358552
相關推薦
- 2022-05-21 DaemonSet服務守護進程的使用場景_服務器其它
- 2022-06-08 4. Golang常用Http庫及Gin框架入門
- 2022-10-09 ASP.NET?Core?5.0中的Host.CreateDefaultBuilder執行過程解析_
- 2023-12-18 SerializationException異常產生原因及解決方案
- 2023-02-07 Go?singleflight使用以及原理_Golang
- 2022-05-22 Kubernetes探針使用介紹_云其它
- 2023-07-14 GET和POST的請求的區及HTTP和HTTPS協議的區別
- 2022-10-02 Flutter的鍵值存儲數據庫使用示例詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支