Hive知识之连接查询

文章目录

          • 1、UNION ALL和UNION
          • 2、JOIN
            • 2.1 INNER JOIN
            • 2.2 LEFT JOIN
            • 2.3 RIGHT JOIN
            • 2.4 FULL JOIN

前言:Hive的查询语句和SQL语句非常类似,如果有SQL基础,学习Hive的查询语句会比较容易。

可参考SQL的连接查询:

https://blog.csdn.net/weixin_42384784/article/details/105333951

1、UNION ALL和UNION
  • 联合的字段名称和字段顺序需要一致
  • 没有连接条件,只是数据叠加
  • UNION后的表作为子查询时,需要进行重命名
SELECT 	id,
		user_name
FRPM user_info
UNION ALL
SELECT id,
		user_name
FRPM order_info;

SELECT user_name
FROM 
(SELECT 	id,
		user_name
FRPM user_info
UNION 
SELECT id,
		user_name
FRPM order_info) a;

UNION和UNION ALL的区别:

项目 UNION ALL UNION
对重复结果的处理 不会去除重复记录 在进行表连接后会筛选掉重复的记录
对排序的处理 只是简单的将两个结果合并后就返回 将会按照字段的顺序进行排序
效率 更快 更慢
综述 更快,但不去重不排序 更慢,去重且排序
  • 一般先去重,再进行UNION ALL可以提高效率
2、JOIN

Hive知识之连接查询_第1张图片

2.1 INNER JOIN
  • 内连接,返回两个表的交集
  • 注意:表连接时,必须进行重命名;要去重再进行表连接,提高效率。
  • ON 后面使用的连接条件必须起到唯一键值的作用
  • INNER 可省略不写,效果一样
SELECT user_name 
FROM 
	(SELECT DISTINCT user_name
	FRPM user_info) a
JOIN
	(SELECT DISTINCT user_name
	FRPM order_info) b
ON a.user_name = b.user_name
2.2 LEFT JOIN
  • 左连接,以左边的表为全集,同时返回能够匹配上的右表的匹配结果,没有匹配上的则显示NULL
SELECT user_name 
FROM 
	(SELECT DISTINCT user_name
	FRPM user_info) a
LEFT JOIN
	(SELECT DISTINCT user_name
	FRPM order_info) b
ON a.user_name = b.user_name
2.3 RIGHT JOIN
  • 右连接,以右边的表为全集,同时返回能够匹配上的左表的匹配结果,没有匹配上的则显示NULL
  • 通常可以将左连接的两个表调换位置可以得到和右连接相同的结果,所以较少使用右连接。
SELECT user_name 
FROM 
	(SELECT DISTINCT user_name
	FRPM user_info) a
RIGHT JOIN
	(SELECT DISTINCT user_name
	FRPM order_info) b
ON a.user_name = b.user_name
2.4 FULL JOIN
  • 全连接,只要左表和右表其中一个表中存在匹配,则返回行。
  • 全连接结合了左连接和右连接的结果
SELECT user_name 
FROM 
	(SELECT DISTINCT user_name
	FRPM user_info) a
FULL JOIN
	(SELECT DISTINCT user_name
	FRPM order_info) b
ON a.user_name = b.user_name

你可能感兴趣的:(Hive知识)