hive 各种 join (left outer join、join、full outer join)

本文详细介绍了SQL中三种连接操作:连接、左连接和全连接,并通过具体实验展示了它们的使用方法和区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

1、左连接 left outer join

以左边表为准,逐条去右边表找相同字段,如果有多条会依次列出。

2、连接join

找出左右相同同的记录。

3、全连接 full outer  join

包括两个表的join结果,左边在右边中没找到的结果(NULL),右边在左边没找到的结果。

会对结果去重,返回并集。

 

二、实验

1、准备数据

create external table IF NOT EXISTS temp_testjoin_ta
(
label string,
qu string
)
partitioned by (dt string)
row format delimited fields terminated by '\t'
stored as textfile;
ALTER TABLE temp_testjoin_ta ADD IF NOT EXISTS PARTITION (dt = '2014-08-08') location '/temp/jinlong10/testjoin/ta';

l1	q1
l1	q2


create external table IF NOT EXISTS temp_testjoin_tb
(
qu string,
inmyway string
)
partitioned by (dt string)
row format delimited fields terminated by '\t'
stored as textfile;
ALTER TABLE temp_testjoin_tb ADD IF NOT EXISTS PARTITION (dt = '2014-08-08') location '/temp/jinlong10/testjoin/tb/';

q1	i1
q1	i1
q1	i2
q1	i3
q2	i1
q2	i2
q3	i10


2、join

select * from (select label,qu from temp_testjoin_ta where dt = '2014-08-08') ta join (select qu,inmyway from temp_testjoin_tb where dt = '2014-08-08') tb on ta.qu = tb.qu ;
l1	q1	q1	i1
l1	q1	q1	i1
l1	q1	q1	i2
l1	q1	q1	i3
l1	q2	q2	i1
l1	q2	q2	i2


select * from (select label,qu from temp_testjoin_ta where dt = '2014-08-08') ta join (select qu,inmyway from temp_testjoin_tb where dt = '2014-08-08') tb on ta.qu = tb.qu group by label,inmyway;
l1	i1
l1	i2
l1	i3


3、left outer join

select * from (select label,qu from temp_testjoin_ta where dt = '2014-08-08') ta left outer join (select qu,inmyway from temp_testjoin_tb where dt = '2014-08-08') tb on ta.qu = tb.qu ;
l1	q1	q1	i1
l1	q1	q1	i1
l1	q1	q1	i2
l1	q1	q1	i3
l1	q2	q2	i1
l1	q2	q2	i2

select * from (select label,qu from temp_testjoin_ta where dt = '2014-08-08') ta left outer join (select qu,inmyway from temp_testjoin_tb where dt = '2014-08-08') tb on ta.qu = tb.qu group by label,inmyway; 
l1	i1
l1	i2
l1	i3

 

4、full outer  join

select *  from 
(select label,qu from temp_testjoin_ta where dt = '2014-08-08') ta  
full outer  join (select qu,inmyway from temp_testjoin_tb  where dt = '2014-08-08') tb 
on ta.qu = tb.qu  ; 

l1      q1      q1      i3
l1      q1      q1      i2
l1      q1      q1      i1
l1      q1      q1      i1
l1      q2      q2      i2
l1      q2      q2      i1
NULL    NULL    q3      i10

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值