0


hive之left semi join(左半连接)使用方法

一、建表数据准备

参考hive之full outer join(全连接)使用方法_IMezZ的博客-CSDN博客目录介绍语法例子创建顾客表:customers创建订单表:ordersfull outer join语句 left join + union + right join语句介绍full outer join结合了 LEFT JOIN 和 RIGHT JOIN 的结果,并使用NULL值作为两侧缺失匹配结果。语法SELECT table1.column_name(s),table2.column_name(s) FROM table1 ..https://blog.csdn.net/qq_36249352/article/details/124017263?spm=1001.2014.3001.5502

二、语法

left semi join只能查询左表字段,不能查询右表字段。

SELECT 
    table1.column_name(s) 
FROM table1 
    left semi join table2 
ON table1.column_name = table2.column_name;

相当于

SELECT 
    table1.column_name(s) 
FROM table1 where table1.column_name in
(select table2.column_name from table2);

三、left semi join例子

select a.customer_id,a.customer_name from default.customers a
left semi join default.orders b
on a.customer_id=b.customer_id

相当于

select a.customer_id,a.customer_name 
from default.customers a where a.customer_id in
(slect b.customer_id from default.orders b)

两者区别是:

LEFT SEMI JOIN 的限制是,右侧表只能在连接条件(ON 子句)中引用,而不能在 WHERE 或 SELECT 子句等中引用。

结果

四、left semi join、join、left join的区别

1、left semi join

left semi join只能查询左表字段,不能查询右表字段。left semi join只能展示两个表能够关联上的数据。

当查询右表字段时,会报如下错误:

select a.customer_id,a.customer_name,b.order_date from default.customers a
left semi join default.orders b
on a.customer_id=b.customer_id

2、left join

left join可以查询右表字段,不会报错。left join会展示左表想要查询的所有数据,不止能展示关联上的,不能关联上的也能展示。

select a.customer_id,a.customer_name,b.order_date from default.customers a
left join default.orders b
on a.customer_id=b.customer_id

结果

3、join

join可以查询右表字段,不会报错。join只会展示能关联上的数据,不能关联上的不能展示。

select a.customer_id,a.customer_name,b.order_date from default.customers a
join default.orders b
on a.customer_id=b.customer_id

结果

此时,如果不需要查询右表字段时和left semi join是一致的。


结语

     本次的分享就到这里了,下一篇博客博主将带来**hive之Map Join使用方法**,敬请期待!**受益的朋友或对大数据技术感兴趣的伙伴记得点赞关注支持一波!**
标签: 大数据 sql hive

本文转载自: https://blog.csdn.net/qq_36249352/article/details/124020422
版权归原作者 IMezZ 所有, 如有侵权,请联系我们删除。

“hive之left semi join(左半连接)使用方法”的评论:

还没有评论