1.join2.left join3.right join4.full join5.left semi join6.cross join
hive中的join操作的关键字必须在on中指定,不能再where中指定,不然会先做笛卡尔积再过滤;
join关键字默认为内连接,返回两张表中都有的信息;
left join以前面的表作为主表和其他表进行关联,返回的记录数和主表的记录数相同,关联不上的字段用NULL;
left [outer] join对其无影响;
right join与left相反,以后面的表为主表,和前面的表做关联,返回的记录数和主表一致,关联不上的字段为NULL;
full join为全关联,返回两个表记录的并集,关联不上的字段为NULL;
注意:full join时,hive不会用mapjoin来优化;
left semi join以关键字前面的表为主表,两个表对on的条件字段做交集,返回前面表的记录;
cross join(笛卡尔积关联)返回两个表的笛卡尔积结果,不需要指定关联键;
- SELECT a.id,
- a.name,
- b.age
- FROM lxw1234_a a
- CROSS JOIN lxw1234_b b;
- --执行结果:
- 1 zhangsan30
- 1 zhangsan29
- 1 zhangsan21
- 2 lisi30
- 2 lisi29
- 2 lisi21
- 3 wangwu30
- 3 wangwu29
- 3 wangwu21