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.2 医生服务次数表

hive之left join详解

二 left join查询

1.1 on后面加and条件

1.1.1 sql语句

hive之left join详解

1.1.2 查询结果

hive之left join详解

1.1.3 执行计划

hive之left join详解

hive之left join详解

 

1.2 把条件放在where后面

1.2.1 sql语句

hive之left join详解

1.2.2 查询结果

hive之left join详解

 

1.2.3 执行计划

 

hive之left join详解

hive之left join详解

 

1.3 子查询

1.3.1 sql语句

hive之left join详解

1.3.2 查询结果

hive之left join详解

1.3.3 执行计划

hive之left join详解

hive之left join详解

 

三 总结

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

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

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

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

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

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