Where语句

  1. 使用WHERE子句,将不满足条件的行过滤掉
  2. WHERE子句紧随FROM子句
  3. 案例实操
    查询出薪水大于1000的所有员工
hive (default)> select * from emp where sal >1000;

注意:where子句中不能使用字段别名。

比较运算符(Between/In/ Is Null)

下面表中描述了谓词操作符,这些操作符同样可以用于JOIN…ON和HAVING语句中

操作符

支持的数据类型

描述

A=B

基本数据类型

如果A等于B则返回TRUE,反之返回FALSE

A<=>B

基本数据类型

如果A和B都为NULL,则返回TRUE,其他的和等号(=)操作符的结果一致,如果任一为NULL则结果为NULL

A<>B, A!=B

基本数据类型

A或者B为NULL则返回NULL;如果A不等于B,则返回TRUE,反之返回FALSE

A<B

基本数据类型

A或者B为NULL,则返回NULL;如果A小于B,则返回TRUE,反之返回FALSE

A<=B

基本数据类型

A或者B为NULL,则返回NULL;如果A小于等于B,则返回TRUE,反之返回FALSE

A>B

基本数据类型

A或者B为NULL,则返回NULL;如果A大于B,则返回TRUE,反之返回FALSE

A>=B

基本数据类型

A或者B为NULL,则返回NULL;如果A大于等于B,则返回TRUE,反之返回FALSE

A [NOT] BETWEEN B AND C

基本数据类型

如果A,B或者C任一为NULL,则结果为NULL。如果A的值大于等于B而且小于或等于C,则结果为TRUE,反之为FALSE。如果使用NOT关键字则可达到相反的效果。

A IS NULL

所有数据类型

如果A等于NULL,则返回TRUE,反之返回FALSE

A IS NOT NULL

所有数据类型

如果A不等于NULL,则返回TRUE,反之返回FALSE

IN(数值1, 数值2)

所有数据类型

使用 IN运算显示列表中的值

A [NOT] LIKE B

STRING 类型

B是一个SQL下的简单正则表达式,也叫通配符模式,如果A与其匹配的话,则返回TRUE;反之返回FALSE。B的表达式说明如下:‘x%’表示A必须以字母‘x’开头,‘%x’表示A必须以字母’x’结尾,而‘%x%’表示A包含有字母’x’,可以位于开头,结尾或者字符串中间。如果使用NOT关键字则可达到相反的效果

A RLIKE B, A REGEXP B

STRING 类型

B是基于java的正则表达式,如果A与其匹配,则返回TRUE;反之返回FALSE。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配

案例实操
  1. 查询出薪水等于5000的所有员工
hive (default)> select * from emp where sal =5000;
  1. 查询工资在500到1000的员工信息
hive (default)> select * from emp where sal between 500 and 1000;
  1. 查询comm为空的所有员工信息
hive (default)> select * from emp where comm is null;
  1. 查询工资是1500或5000的员工信息
hive (default)> select * from emp where sal IN (1500, 5000);

Like和RLike

  1. 使用LIKE运算选择类似的值
  2. 选择条件可以包含字符或数字:
    % 代表零个或多个字符(任意个字符)。
    _ 代表一个字符。
  3. RLIKE子句是Hive中这个功能的一个扩展,其可以通过Java的正则表达式这个更强大的语言来指定匹配条件。
案例实操
  1. 查找以2开头薪水的员工信息
hive (default)> select * from emp where sal LIKE '2%';
  1. 查找第二个数值为2的薪水的员工信息
hive (default)> select * from emp where sal LIKE '_2%';
  1. 查找薪水中含有2的员工信息
hive (default)> select * from emp where sal RLIKE '[2]';

逻辑运算符(And/Or/Not)

操作符

含义

AND

逻辑并

OR

逻辑或

NOT

逻辑否

案例实操

  1. 查询薪水大于1000,部门是30
hive (default)> select * from emp where sal>1000 and deptno=30;
  1. 查询薪水大于1000,或者部门是30
hive (default)> select * from emp where sal>1000 or deptno=30;
  1. 查询除了20部门和30部门以外的员工信息
hive (default)> select * from emp where deptno not IN(30, 20);

分组

Group By语句

GROUP BY语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作。
案例实操:

  1. 计算emp表每个部门的平均工资
hive (default)> select t.deptno, avg(t.sal) avg_sal from emp t group by t.deptno;
  1. 计算emp每个部门中每个岗位的最高薪水
hive (default)> select t.deptno, t.job, max(t.sal) max_sal from emp t group by t.deptno, t.job;

Having语句

having与where不同点

  1. where后面不能写分组函数,而having后面可以使用分组函数。
  2. having只用于group by分组统计语句。

案例实操

  1. 求每个部门的平均薪水大于2000的部门
    求每个部门的平均工资
hive (default)> select deptno, avg(sal) from emp group by deptno;

求每个部门的平均薪水大于2000的部门

hive (default)> select deptno, avg(sal) avg_sal from emp group by deptno having avg_sal > 2000;