Hive 表连接

本文介绍Hive SQL中的表连接方法,包括等值连接、不等值连接及外连接,并演示如何进行自连接和使用子查询增强查询能力。

hive表连接需要成转换一个mapreduce的作业提交到hadoop上完成。

等值连接(连接条件“=”)

不等值连接(连接条件“

外连接

-按部门统计员工人数:部门号,部门名称,人数
select d.deptno,d.dname,count(e.empno)
from emp e,dept d
where e.deptno=d.deptno
group by d.deptno,d.dname
由以上语句查询的结果由于部门4没有员工,即empno不存在,故无统计,如此一来只有三个部门被统计

所有没有包含在聚合函数的列都要在group by子句之后

通过外连接可以将对于连接条件“不成立”的记录任然包含在最后的结果中

-左外连接(连接条件不成立时左边的表依然可以被包含在最后的结果当中)
-右外连接(连接条件不成立时右边的表依然可以被包含在最后的结果当中)
因此,上例改造为:
select d.deptno,d.dname,count(e.empno)
from emp e right outer join dept d
where (e.deptno=d.deptno)
group by d.deptno,d.dname

自连接

-查询员工的姓名和员工老板的姓名
前提:员工和老板的信息在一张表中。

col1col2col3
empno(员工号)ename(员工姓名)mgr(老板号)
自连接的核心:通过表的别名将同一张表视为多张表

假定有两张表:
select e.ename,b.ename
from emp e,emp b
where e.mgr=b.empno;

hive的子查询

hive只支持:from和where子句中的子查询
-查询部门名称为’销售’或者’财务’的员工姓名
select e.ename from emp e where e.deptno in (select d.deptno from dept d where d.dname=’SALES’ or d.dname=’ACCOUNTING’);

注意:
语法中的括号
合理的书写风格
hive只支持where和from子句的子查询
主查询和子查询可以不是同一张表,只要子查询返回的结果主查询可以使用就可以
子查询的空值问题,如果子查询的集合中有null值,则不能使用not in操作符,可以使用in操作符
select * from emp e where e.empno not in (select e1.mgr from emp e1 )—>error;
select * from emp e where e.empno not in (select e1.mgr from emp e1 where e1.mgr is not null)—>√

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值