Hive小知识:union与union all的区别

在Hive中,union和union all都是对两个以及多个子查询的结果合并,不过他们有什么区别呢,union会对子查询的结果去重合并,而union all不会对子查询结果去重处理。下面让我们一起看看吧。

一、union

1. union 语法

SELECT column_name(s) FROM table1

UNION

SELECT column_name(s) FROM table2;

2. 数据准备

informations信息表中的数据如下:

hive> SELECT * FROM informations;

+-----+--------------+-------------------+-----------+

| id | name | phone | country |

+-----+--------------+-------------------+------- ---+

| 1 | zhangsan | 17426323494 | CN |

| 2 | lisi | 13026468221 | CN |

| 3 | wangwu | 13323447234 | USA |

| 4 | zhaoliu | 18626525707 | CN |

| 5 | xiaoming | 15020472984 | USA |

| 7 | wanghao | 13012396032 | IND |

+-----+--------------+-------------------+-----------+

apps表中的数据如下:

hive> SELECT * FROM apps;

+------+------------+-------------------------+---------+

| id | app_name | url | country |

+------+------------+-------------------------+---------+

| 1 | QQ APP | http://im.qq.com/ | CN |

| 2 | 微博 APP | http://weibo.com/ | CN |

| 3 | 淘宝 APP | https://www.taobao.com/ | CN |

+------+------------+-------------------------+---------+

3. 测试结果

执行以下SQL输出结果如下:

hive> SELECT country FROM informations

UNION

SELECT country FROM apps

ORDER BY country;

+---------+

| country |

+---------+

| CN |

| CN |

| CN |

+---------+

小结:union会对子查询的结果去重合并。

 

二、union all

1. union all 语法

SELECT column_name(s) FROM table1

UNION ALL

SELECT column_name(s) FROM table2;

注意:union结果集中的列名总是等于union中第一个select语句中的列名。

2. 数据准备

informations信息表中的数据如下:

hive> SELECT * FROM informations;

+-----+--------------+-------------------+-----------+

| id | name | phone | country |

+-----+--------------+-------------------+------- ---+

| 1 | zhangsan | 17426323494 | CN |

| 2 | lisi | 13026468221 | CN |

| 3 | wangwu | 13323447234 | USA |

| 4 | zhaoliu | 18626525707 | CN |

| 5 | xiaoming | 15020472984 | USA |

| 7 | wanghao | 13012396032 | IND |

+-----+--------------+-------------------+-----------+

apps表中的数据如下:

hive> SELECT * FROM apps;

+------+------------+-------------------------+---------+

| id | app_name | url | country |

+------+------------+-------------------------+---------+

| 1 | QQ APP | http://im.qq.com/ | CN |

| 2 | 微博 APP | http://weibo.com/ | CN |

| 3 | 淘宝 APP | https://www.taobao.com/ | CN |

+------+------------+-------------------------+---------+

3. 测试结果

执行以下SQL输出结果如下:

hive> SELECT country FROM informations

UNION ALL

SELECT country FROM apps

ORDER BY country;

+---------+

| country |

+---------+

| CN |

| CN |

| CN |

| CN |

| CN |

| CN |

| USA |

| USA |

| IND |

+---------+

小结:union all不会对子查询结果去重处理。

三、总结

union和union all操作符用于合并两个或多个select语句的结果集。但union去重合并,而union all不去重处理。注意:union内部的每个select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时每个select语句中的列的顺序必须相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值