hive 之多表查询

hive 多表查询,转化为一个mapreduce的作业
hive>desc dept;
deptno double
dname string
loc string
hive>desc emp;
empno double
ename string
job string
mgr double
hiredate string
sal double
comm double
deptno double
hive>desc salgrade;
grade double
losal double 工资下限
hisal double 工资上限
等值连接
查询员工信息:员工号,姓名,月薪,部门名称
select e.empno,e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno=d.deptno;
不等值连接
查询员工信息:员工号,姓名,月薪,工资级别
select e.empno,e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal ;
外连接
  按部门统计员工人数:部门号,部门名称,人数
  select d.deptno,d.dname,count(e.empno)
  from emp e,dept d
  where e.deptno=d.deptno
  group by d.deptno,d.dname;
  注意:没有包含在聚合函数中的列,都必须在group by 子句的后面
  可以用以下的语句进行检查
  hive>select count(*) from emp;
  hive>select count * from dept;
  通过外连接可以将对于连接条件不成立的记录仍然包含在最后的结果中
    左外连接,连接条件不成立,连接条件左边的表仍然可以包含在最后的结果中
    右外连接,连接条件不成立,连接条件右边的表仍然可以包含在最后的结果中
    右外连接操作
    select d.deptno,d.dname,count(e.empno)
    from emp e right outer join dept d
    on (e.deptno=d.deptno)
    group by d.deptno,d.dname;
自连接
  自连接的核心:通过表的别名将同一张表视为多张表
  查询员工的姓名和员工的老板姓名
  select e.ename,b.ename
  from emp e,emp b
  where e.mgr=b.empno; 

猜你喜欢

转载自blog.csdn.net/lepton126/article/details/80392418