Hive的连接

oracle/mysql操作与Hive不同时会特别标注
Hive的表连接
-等值连接
-不等值连接
-外连接
-自连接

等值连接/不等值连接:就看连接是不是用=

--等值连接
查询员工信息:员工号,姓名,月薪,部门名称
select e.empno,e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno=d.deptno;
--不等值连接:用>,<,between ..and等
查询员工信息:员工号,姓名,月薪,工资级别
select e.empno,e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal;

外连接
外连接:左外连接/右外连接
左外连接:以左边表为准,当连接条件不成立时,左边的表包含在连接结果中
右外连接:以右表为准

--外连接:将连接中不成立的数据包含在连接结果中
如下面的deptno=40的数据
按部门统计员工人数:部门号,部门名称,人数
select d.deptno,d.name,count(e.empno)
from emp e,dept d
where e.deptno=d.deptno
group by d.deptno,d.name;
--注:HQL语句中没有包含在聚合函数中的都要放在group by的子句中
--解:上面的例子deptno=40的员工的信息未取出,因为dept表中有部门号为40,但是emp表中没有deptno=40员工的信息,而上面是等值连接。故只取两边都存在的部门号
#执行结果:
10.0  ACCOUNTING  3
20.0  RESEARCH  5
30.0  SALES  6
--用外连接,将40号的数据显示出。我们要显示deptno=40的数据,它是在dept表中,故以右边表为准,用右外连接
select d.deptno,d.name,count(e.empno)
from emp e right outer join dept d
on (e.deptno=d.deptno)
group by d.deptno,d.name;
#执行结果:
10.0  ACCOUNTING  3
20.0  RESEARCH  5
30.0  SALES  6
40.0  OPERATIONS  0

mysql/oracle/hive外连接的不同之处
相同之处:上面的左外/右外连接都可用left join/right join
不同之外:mysql/hive只能用left join/right join,而oracle除此之外还可以用“+”来实现。

oracle对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:
1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
3.(+)操作符只适用于列,而不能用在表达式上。
4.(+)操作符不能与or和in操作符一起使用。
5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

#上面的右连接写成如下:
select d.deptno,d.name,count(e.empno)
from emp e,dept d
where e.deptno+=d.deptno
group by d.deptno,d.name;
--注意:用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。所以加号写在右表,左表就是全部显示,故是左连接,以+另外一边表的数据为准

自连接
自连接:自己和自己连接,通过表的别名将同一张表视为多张表

查询员工的姓名和员工的老板姓名
注:员工的老板也是员工,也在员工表上,mgr是这列是指该员工的老板的员工号
select e.ename,b.ename
from emp e,emp b
where e.mgr=b.empno;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值