Hive SQL中join的使用

本文详细介绍了HiveSQL中四种常用的Join方式:left(outer)join、right(outer)join、(inner)join和cross join,并针对每种方式的特点进行了说明。此外,还特别提醒了在使用Join过程中需要注意的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hive SQL中的join有以下几种常用的方式:

SQL Joins | 一张图看懂 SQL 的各种 join 用法

1.left (outer) join,以join的左边表为基础输出,在结果表中满足on的条件的记录中增加右边表的字段值,以上图左一所示:    

2. right (outer) join, 以join的右边表为基础输出,在结果表中满足on的条件的记录中增加左边表的字段值,以上图右一所示:

3.(inner) join, 结果表输出同时满足on的条件的记录及A.B字段,如中间图所示。

4.cross join, 即笛卡尔积,一般不怎么用。

上图中其他场景均为使用where选择之后的应用,本处不做讨论,在使用join的过程中需要注意由于重复记录或者多条记录满足表的join的条件所导致的数据膨胀问题。




   

### Hive SQL Left Join 使用教程 #### 左连接的基础概念 在Hive SQL中,`LEFT JOIN`用于返回左表中的所有记录以及右表中存在的匹配记录。如果右表中不存在匹配,则结果集中来自右表的列将包含NULL值[^1]。 #### `ON` 条件与 `WHERE` 条件的区别 当执行带有`LEFT JOIN`的操作时,在`ON`子句中指定的条件仅影响如何关联两表的数据行。而`WHERE`子句则是在完成联接之后进一步过滤最终的结果集。这意味着: - 当条件放置于`ON`语句内时,该条件只应用于决定哪些右边表格的行应该链接到左边表格上; - 若相同条件下移至`WHERE`部分,则会先做完整的外连接操作后再依据此条件删除不符合要求的整行数据[^2]。 #### 示例代码展示两种不同写法的效果差异 ```sql -- SQL 语句 1: ON 子句中含有额外条件的情况 SELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id AND t2.id <> 2; -- SQL 语句 2: WHERE 子句中含有额外条件的情况 SELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id WHERE t2.id <> 2; ``` 在这两个例子中,第一个SQL语句会在`t2.id=2`的情况下保留`t1`的所有记录,并给`t2`对应的列为null;第二个SQL语句则不会显示任何`t2.id=2`的相关记录,即使存在这样的`t1`记录也会因为后续的`WHERE`过滤掉[^3]。 #### 执行过程解释 对于`LEFT JOIN`来说,其工作流程大致如下: 1. **读取左侧输入**:从左表(即`t1`)开始处理每一行作为当前行。 2. **查找右侧对应项**:尝试找到满足`JOIN ... ON`条件下的右表(即`t2`)里的相配对行。 3. **组合输出**:根据是否找到了符合条件的右表条目来构建新的联合后的行。如果没有找到合适的右表项目,则用NULL填充那些本应来自于右表的位置。 4. **应用附加筛选器**:如果有定义了`WHERE`子句或其他形式的后期过滤逻辑的话,此时会对之前得到的结果再次施加这些约束以获得最后想要看到的内容列表。 这种机制确保了无论何时都会至少保持住整个原始左表的信息完整性,同时允许灵活地加入更多关于另一侧参与者的特定信息或限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值