hive之left join详解

目录

一 表结构

1.1 医生主表

1.2 医生服务次数表

二 left join查询

1.1 on后面加and条件

1.1.1 sql语句

1.1.2 查询结果

1.1.3 执行计划

1.2 把条件放在where后面

1.2.1 sql语句

1.2.2 查询结果

1.2.3 执行计划

1.3 子查询

1.3.1 sql语句

1.3.2 查询结果

1.3.3 执行计划

三 总结


一 表结构

1.1 医生主表

hive之left join详解_第1张图片

1.2 医生服务次数表

hive之left join详解_第2张图片

二 left join查询

1.1 on后面加and条件

1.1.1 sql语句

hive之left join详解_第3张图片

1.1.2 查询结果

hive之left join详解_第4张图片

1.1.3 执行计划

hive之left join详解_第5张图片

hive之left join详解_第6张图片

 

1.2 把条件放在where后面

1.2.1 sql语句

hive之left join详解_第7张图片

1.2.2 查询结果

 

1.2.3 执行计划

 

hive之left join详解_第8张图片

hive之left join详解_第9张图片

 

1.3 子查询

1.3.1 sql语句

hive之left join详解_第10张图片

1.3.2 查询结果

hive之left join详解_第11张图片

1.3.3 执行计划

hive之left join详解_第12张图片

 

三 总结

1.不考虑where条件下,left join 会把左表所有数据查询出来,on及其后面的条件仅仅会影响右表的数据(符合就显示,不符合全部为null)

2.在匹配阶段,where子句的条件都不会被使用,仅在匹配阶段完成以后,where子句条件才会被使用,它将从匹配阶段产生的数据中检索过滤

3.所以左连接关注的是左边的主表数据,不应该把on后面的从表中的条件加到where后,这样会影响原有主表中的数据

4.where后面:是先连接然生成临时查询结果,然后再筛选

 on后面:先根据条件过滤筛选,再连接生成临时查询结果

5.对于条件在on加个and还是用子查询,查询结果是一模一样的,至于如何使用这个需要分情况,用子查询的话会多一个maptask,但是如果利用这个子查询能过滤到很多数据的话,用子查询还是比较建议的,因为不会加载太多的数据到内存中,如果过滤数据不多的情况下,建议用on后面加and条件

你可能感兴趣的:(Hive)