hive的查询方式三

88 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

上一篇的hive查询方式介绍到那个操作符的使用,涉及很多null的逻辑,漏说了一种特别容易出错的场景。在开发中经常会被人用错的,就是在判断是否等于null的时候,用到了!=这个操作符,实际上这个操作符是不能用在判断是否为null的情境中,假设使用了A!=B,此时A或者B是为null,则结果返回的是null,不会是布尔类型,同样的在<>操作符当中,也是不能这样使用去判断是否不等于null的,同样的也会返回null值。

所以要判断是否为null,只能使用is null 和is not null 。

继续介绍搭配查询的一些方法。

group by,对查询结果进行分组汇总,通常会和sum、count这一类的聚合函数一起使用。

常见使用方法:group by a,b,c

举例:


select name,id, sum(grade) as grade,age from student_table where age>12 group by name,id
​

having语句,这个是可以和group by一起搭配使用的,主要针对group by后的结果数据进行条件过滤。比如上述的例子换一种写法


select name,id, sum(grade) as grade,age from student_table where age>12 group by name,id having  sum(grade) >500

inner join 语句,这个是表关联查询语句,此语句的作用就是将两张表中同关联条件相同的数据展示出来,即两张表都会对和关联条件不相符的数据过滤,两张表都不会完整保留,这个是和左连接查询不太一样的地方,使用方法也是比较简单的。

select a.name,b.grade from student a inner join (join) table_B b on a.id=b.id

然后是左表连接查询和右表连接查询,分别对应的不同结果是,左表连接会将关键字左边的表数据全部保留,右表连接会将关键字右边的表数据全部保留,相反的表就会根据关联条件选择性的保留符合条件的数据,具体要展示的每个表中的字段还是另外加上去就可以。