HiveSql(3)HiveSQL与oracle SQL的区别
2016-01-13 21:22
597 查看
HiveSQL与oracle SQL的区别
1、hive sql暂时不能使用in,不支持where字句中的子查询。可以利用leftsemi join来实现in。
Hive:
Select * from employee e left semi joindept d on (e.deptno=d.deptno)
小表放在join左边。
Left semi join是in/exist在hive中的一种更为高效的实现。
Oracle:
Select * from employee e where e.deptno in (selectd.deptno from dept d))
2、hive sql同样不支持not in。可以利用leftouter join来实现。
Hive:
Select e.* from employee e left outer joindept d on(e.deptno=d.deptno) where d.deptno is null
Oracle:
Select * from employee e where e.deptno notin (select d.deptno from dept d))
3、join上的不同
Hive:
Select * from employee e join dept d on (e.id=d.id)
Oracle:
Select * from employee e,dept d where e.id=d.id
4、rank函数的不同
Hive:
Select e.name,e.dept,e.salary,rank(e.dept,e.salary)
From (Select name,dept,salary from employeedistributed by dept sort by dept,salary desc)e
Oracle:
Select name,dept,salary,rank() over(partitionby dept order by salary desc) from employee
5、min函数的不同
Hive:
Select dept,tmp.m
From (Select dept,min(salary) m fromemployee group by dept) tmp
On employee.dept=tmp.dept
Oracle:
Select dept,min(salary) over (partition bydept) from employee
1、hive sql暂时不能使用in,不支持where字句中的子查询。可以利用leftsemi join来实现in。
Hive:
Select * from employee e left semi joindept d on (e.deptno=d.deptno)
小表放在join左边。
Left semi join是in/exist在hive中的一种更为高效的实现。
Oracle:
Select * from employee e where e.deptno in (selectd.deptno from dept d))
2、hive sql同样不支持not in。可以利用leftouter join来实现。
Hive:
Select e.* from employee e left outer joindept d on(e.deptno=d.deptno) where d.deptno is null
Oracle:
Select * from employee e where e.deptno notin (select d.deptno from dept d))
3、join上的不同
Hive:
Select * from employee e join dept d on (e.id=d.id)
Oracle:
Select * from employee e,dept d where e.id=d.id
4、rank函数的不同
Hive:
Select e.name,e.dept,e.salary,rank(e.dept,e.salary)
From (Select name,dept,salary from employeedistributed by dept sort by dept,salary desc)e
Oracle:
Select name,dept,salary,rank() over(partitionby dept order by salary desc) from employee
5、min函数的不同
Hive:
Select dept,tmp.m
From (Select dept,min(salary) m fromemployee group by dept) tmp
On employee.dept=tmp.dept
Oracle:
Select dept,min(salary) over (partition bydept) from employee
相关文章推荐
- oracle中如何判断某个日期是星期几
- oracle----sql----查询---为例---计算
- oracle----笛卡尔集---多表查询---内链--外链---子查询
- oracle--sql---约束--视图--索引
- oracle-----sql--建表
- Oracle中的PL/SQL的简单用法
- Oracle中的自定义函数
- 【翻译自mos文章】Oracle Cluster failed to start with ASM instance getting ORA-00443 ---改动/etc/resolv.conf所致
- Oracle中的触发器
- Mybatis异常-SQL执行没反应,但oracle单独执行正常
- OM:Creating a Customer at the time of creating a Sales Order
- Oracle的三种高可用集群方案
- Oracle警告、跟踪文件(10046、死锁等跟踪)
- 详细图解Oracle Exadata存储系统
- 使用Navicat for Oracle工具连接oracle的图文教程
- Virtualbox 虚拟机Red Hat Enterprise 6.5 x86_64 安装oracle11g数据库
- oracle数据库忘记sys和system密码解决办法 system is locked
- oracle排序
- Oracle EBS SLA 详解
- linux32bit oracle10g更改字符集AL32UTF8为ZHS16GBK