实训5:join
Posted Smartloe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实训5:join相关的知识,希望对你有一定的参考价值。
一、Hive SQL Join连接操作
-
就日常工作习惯来说,我们通常不会设计一张大表把所有类型的数据都放在一起,而是不同类型的数据设计不同的表存储。
-
比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。
-
在这种情况下,有时需要基于多张表查询才能得到最终完整的结果;
-
join语法的出现是用于根据两个或多个表中的列之间的关系,从这些表中共同组合查询数据。
二、inner join 内连接
-
内连接是最常见的一种连接,它也被称为普通连接,其中inner可以省略:inner join == join ;
-
只有进行连接的两个表中都存在与连接条件相匹配的数据才会被留下来。
实验例子:以join_1表和join_2表为例
命令:
select j1.id,j1.name,j2.address from join_1 j1,join_2 j2 where j1.id=j2.id;
select j1.id,j1.name,j2.address from join_1 j1 join join_2 j2 on j1.id=j2.id;
注:两种命令均可以,但是下面一条执行效率更高。
三、left join 内连接
-
left join的核心就在于left左。左指的是join关键字左边的表,简称左表。
-
通俗解释:join时以左表的全部数据为准,右边与之关联;左表数据全部返回,右表关联上的显示返回,关联不上的显示null返回。
Left join例子
select j_1.id,j_1.name,j_2.address from join_1 j_1 left join join_2 j_2 on j_1.id=j_2.id;
四、right join 内连接
-
right join的核心就在于Right右。右指的是join关键字右边的表,简称右表。
-
通俗解释:join时以右表的全部数据为准,左边与之关联;右表数据全部返回,左表关联上的显示返回,关联不上的显示null返回。
-
很明显,right join和left join之间很相似,重点在于以哪边为准,也就是一个方向的问题。
select j_1.id,j_1.name,j_2.address from join_1 j_1 right join join_2 j_2 on j_1.id=j_2.id;
五、full outer join 全外连接
-
full outer join 等价 full join ,中文叫做全外连接或者外连接。
-
包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行;
-
在功能上:等价于对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的操作将上述两个结果集合并为一个结果集。
select j_1.id,j_1.name,j_2.address from join_1 j_1 full join join_2 j_2 on j_1.id=j_2.id;
以上是关于实训5:join的主要内容,如果未能解决你的问题,请参考以下文章
spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段