赞
踩
内连接:
2个表的交集,表b中3条记录可以匹配上表a中的1条,left join后记录会有3条,inner join后记录只会有1条
求员工编号,员工名字和所在部门编号
select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno = d.deptno;
左外连接:
以左表为基准
求员工编号,员工名字和所在部门编号
select e.empno, e.ename, d.deptno from emp e left join dept d on e.deptno = d.deptno;
求员工编号,员工名字和所在部门编号
右外连接:
以右表为基准,原理同上
hive (default)> select e.empno, e.ename, d.deptno from emp e right join dept d on e.deptno = d.deptno;
求员工编号,员工名字和所在部门编号
满外连接:
类似于求并集(右表中有,左表没有,左表补为NULL)(左表中有,右表没有的,右表补为NULL)
select e.id, e.name, e_a.city, e_a.street
from employee e
full outer join employee_address e_a on e.id = e_a.id;
功能:
类似于inner join,但只返回左表的结果
优点:
比 inner join 效率高一些
select * from employee;
select * from employee_address;
select e.*,e_addr.*
from employee e
inner join employee_address e_addr
on e.id = e_addr.id;
id | name | deg | salary | dept |
---|---|---|---|---|
1204 | prasanth | dev | 30000 | AC |
1206 | kranthi | admin | 20000 | TP |
1201 | gopal | manager | 50000 | TP |
1202 | manisha | cto | 50000 | TP |
cross join:交叉连接 ,会返回两个表的笛卡尔积
注意:
cross join就是无条件的inner join
--下列A、B、C 执行结果相同,但是效率不一样: --A: select a.*, b.* from employee a, employee_address b where a.id = b.id; -- 隐式连接 select a.*, b.* from employee a inner join employee_address b where a.id = b.id; -- 显示连接 --B: -- on:生成临时表时使用的条件 where:临时表生成后,对临时表进行过滤的条件 select * from employee a cross join employee_address b on a.id = b.id; select * from employee a cross join employee_address b where a.id = b.id; --C: select * from employee a inner join employee_address b on a.id = b.id; --一般不建议使用方法A和B,因为如果有where子句的话,往往会先进行笛卡尔积返回数据然后才根据where条件从中过滤,因此,如果两个表太大,将会非常非常慢,不建议使用。
求员工名字,所在部门编号,和公司所在位置
SELECT e.ename, d.deptno, l.loc_name
FROM emp e
JOIN dept d
ON d.deptno = e.deptno
JOIN location l
ON d.loc = l.loc;
从hive 0.13.0开始,支持隐式联接表示法(默认是inner join)。这允许FROM子句连接以逗号分隔表列表
,而省略JOIN关键字。例如
select a.*, b.*
from employee a,
employee_address b
where a.id = b.id; -- 隐式连接
select a.*, b.*
from employee a
inner join employee_address b
where a.id = b.id; -- 显示连接
例如有这样的一份数据
隐式连接
SELECT *
FROM (SELECT * FROM plant_carbon) t1,
(SELECT * FROM plant_carbon) t2;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。