Hive连接的类型
来源:互联网 发布:阿里巴巴域名备案 编辑:程序博客网 时间:2024/06/05 16:14
一 INNER JOIN 内连接
所谓内连接其实就是指基于两张表共有的join 字段的值,进行连接,不相等的值不会出现在查询结果
比如用户表和订单表:
SELECT* FROM order o INNER JOIN user u ON o.cid = u.id;
内连接的结果就是:
内连接分为显示和隐式两种:
隐式内连接
SELECT* FROM emp e, dept d WHERE e.deptno = d.deptno;
显示内连接:
SELECT* FROM emp e JOIN dept d ON e.deptno = d.deptno;
二 外连接 OUTER JOIN
外连接分为两种:
2.1左外连接 LEFTOUTER JOIN
根据指定key进行join,左边表的数据全部显示,右边表如果没有对应的数据则显示为空
SELECTu.name,u.address,u.gender,u.id,o.cid,o.id,o.total FROM user u LEFT OUTER JOIN ordero ON u.id = o.cid;
还是以用户表和订单表为列子左外连接的结果就是:
2.2右外连接 RIGHT OUTER JOIN
SELECTu.name,u.address,u.id,o.cid,o.id,o.total FROM user u RIGHT
OUTERJOIN order o ON u.id = o.cid
右外连接的结果就是:
三 FULL JOIN(FULLOUTER JOIN) 全连接或者全外连接
它会返回两张表所有行,没有对应数据显示为NULL
还是以上述列子为例:
SELECTu.name,u.address,u.id,o.cid,o.id,o.total FROM user u FULL
OUTERJOIN order o ON u.id = o.cid
结果如下:
四 交叉连接(笛卡尔积)
交叉连接就是前表每一条记录都和后面的表每一条记录组合,组合结果等前面表的数据条数*后面表的数据条数,比如A表2条记录,B表3条记录,笛卡尔积就是6。
笛卡尔积: 假设集合A=a,b,集合B=0,1,2,则两个集合的笛卡尔积为(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)
那么交叉连接就是笛卡尔积的体现:
隐式的笛卡尔积:
SELECT* FROM user u,order o;
显示的交叉连接:
SELECT* FROM user u CROSS JOIN order o;
如果需要对笛卡尔积进行过滤,我们可以使用ON或者WHERE子句
比如:
SELECT* FROM user u,order o WHERE u.id = o.id;
SELECT* FROM user u,order o WHERE u.id = 1000;
SELECT* FROM user u CROSS JOIN order o ON u.id=o.id WHERE u.id=1000;
Hive中严格模式下,不允许使用笛卡尔积。
五SEMIJOIN
SEMIJOIN主要是为了解决类似IN,EXISTS这样的场景,因为SQL常用的IN,EXISTS在Hive中是不支持的。
比如我要在SQL中实现这样的语句:
SELECTe.empno,e.ename,e.job FROM emp e WHERE e.deptno IN (
SELECTdeptno FROM dept)
那么在Hive中就这样实现:
SELECTe.empno,e.ename,e.job FROM emp e LEFT SEMI JOIN dept d ON (e.deptno =d.deptno);
注意
1在SELECT后面不能接表dept的字段,是不支持的。
2在ON中是不支持OR连接的
hive (hadoop)> SELECT e.empno,e.ename,e.job FROM emp e LEFT SEMIJOIN dept d ON (d.deptno = 10 OR d.deptno = 20);
FAILED: SemanticException [Error 10019]: Line 1:66 OR not supportedin JOIN currently '20'
- Hive连接的类型
- hive的四种表类型
- Hive的JDBC连接
- Hive的连接操作
- hive的map类型处理
- Hive的JDBC连接方法
- python连接hive的demo
- jdbc连接hive的问题
- Hive的连接(join)方案
- hive的时间类型的查询
- Hive入门学习之三:Hive客户端的连接
- Hive学习笔记 6 Hive的JDBC连接
- 表连接的类型
- hive更改表列的类型不生效
- Hive的复杂数据类型和时间类型
- java连接Hive的几种方式
- java连接hive出现连不上的问题
- hive jdbc连接时的乱码问题
- 深度学习入行门槛太低,不开心!
- 谷俊丽:从特斯拉到小鹏汽车,同样是智能车,不同基因的自动驾驶
- 利用phantomjs+selenium抓取fund.eastmoney.com/fund.html网站第二页js生成的页面
- Android 中的 IOC 框架 【ViewInject】
- [leetcode]#101. Symmetric Tree
- Hive连接的类型
- leetcode 172. Factorial Trailing Zeroes
- Eclipse一些调试技巧
- iOS 原生网络请求
- mt6735 CTS Verifier:Data Backup Test
- 14-EMM Procedure 4. Service Requet
- SVM分类器解读
- 嵌入式 Jlink中flash.csv和*.jflash文件分析
- Ubuntu17.10配置JDK