欢迎投稿

今日深度:

Hive 表连接,

Hive 表连接,


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

自连接

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

col1 col2 col3
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)—>√

www.htsjk.Com true http://www.htsjk.com/hive/40971.html NewsArticle Hive 表连接, hive表连接需要成转换一个mapreduce的作业提交到hadoop上完成。 等值连接(连接条件“=”) 不等值连接(连接条件“ 外连接 -按部门统计员工人数:部门号,部门名称,人数...
相关文章
    暂无相关文章
评论暂时关闭