06:Hive从0到1系列学习:查询之join连接

46 篇文章 2 订阅

查询(重点)

查询的基本语法

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[CLUSTER BY col_list| [DISTRIBUTE BY col_list] [SORT BY col_list]]
[LIMIT number]

Join语句

①等值join

根据dept和emp中的deptno相等,查询empno、deptno、ename和dname

select 
    empno,
    dept.deptno,
    dept.ename,
    dname
from emp
join dept on emp.deptno=dept.deptno;

在这里插入图片描述

②内连接:join

只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来
在这里插入图片描述

select 
	e.empno,
	e.ename,
	d.deptno,
	d.dname
from emp e
join
	dept d
on
	e.deptno=d.deptno;

在这里插入图片描述

③左外连接:left join

将左边表的所有内容全部返回,如果右边表不存在,就返回数据null
在这里插入图片描述

比如:返回emp表中所有数据的empno、ename、deptno、dname

select 
	e.empno,
	e.ename,
	d.deptno,
	d.dname
from emp e
left join 
	dept d
on
	e.deptno=d.deptno;

在这里插入图片描述

思考:如果想要得到只有A表独自有的该怎么办?
在这里插入图片描述

分析以下左外连接的结果
在这里插入图片描述

如果是A独有的,也就是有关B的赋值就是null,只要把B表为null的过滤出来,就是A所独有的

select 
	e.empno,
	e.ename,
	d.deptno,
	d.dname
from emp e
left join 
	dept d
on
	e.deptno=d.deptno
where
	d.deptno is null;

在这里插入图片描述

④右外连接:right join

返回右边表的所有数据,左边表中如若没有数据的用null代替
在这里插入图片描述

比如:返回所有部门的deptno、dname、empno、ename

select
	d.deptno,
	d.dname,
	e.empno,
	e.ename
from emp e
right join
	dept d
on
	e.deptno=d.deptno;

在这里插入图片描述

思考:如果想要得到B表所独有的该怎么办?
在这里插入图片描述

同理,也是过滤出A表为空的就可以得到B表所独有的

select
	d.deptno,
	d.dname,
	e.empno,
	e.ename
from emp e
right join
	dept d
on
	e.deptno=d.deptno
where
	e.deptno is null;

在这里插入图片描述

⑤满外连接:full join

会返回两张表所有的数据,若没有就是null代替
在这里插入图片描述

比如:返回emp和dept两张表的所有数据

select
	e.empno,
	e.ename,
	d.deptno,
	d.dname
from emp e
full join
	dept d
on 
	e.deptno=d.deptno;

在这里插入图片描述

⑥多表连接

注意:连接 n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。
在这里插入图片描述

比如返回emp表和dept表和location表相同的数据

select 
	e.empno,
	e.ename,
	d.deptno,
	d.dname,
	l.loc_name
from emp e
join dept d on e.deptno=d.deptno
join location l on d.loc=l.loc;

在这里插入图片描述

⑦笛卡尔积

会使得一个表中的数据逐次全部匹配另一个表中的数据

笛卡尔积产生的原因

(1)省略连接条件

(2)连接条件无效

(3)所有表中的所有行互相连接

比如不用连接条件,之间返回emp和dept的数据

select 
	empno, 
	dname 
from emp, dept;

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧码文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值