hive笔记(四):查询、分组-运算符/limit/where/like/rlike/group by/having

目录

基本查询

全表和特定列查询

列别名

算术运算符

比较运算符

逻辑运算符

常用函数

limit语句

where语句

like和Rlike语句

分组

group by语句

having语句


基本查询

全表和特定列查询

(1)数据准备

dept

10 ACCOUNTING 1700
20 RESEARCH 1800
30 SALES 1900
40 OPERATIONS 1700

emp

7369 SMITH CLERK 7902 1980-12-17 800.00 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-4-2 2975.00 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
7839 KING PRESIDENT 1981-11-17 5000.00 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
7900 JAMES CLERK 7698 1981-12-3 950.00 30
7902 FORD ANALYST 7566 1981-12-3 3000.00 20
7934 MILLER CLERK 7782 1982-1-23 1300.00 10

(2)建表

dept

create table if not exists dept(
deptno int,
dname string,
loc int)
row format delimited fields terminated by ' ';

emp

create table if not exists emp(
empno int,
ename string,
job string,
mgr int,
hiredate string, 
sal double, 
comm double,
deptno int)
row format delimited fields terminated by ' ';

(3)导入数据

#dept
load data local inpath '/root/datas/dept.txt' into table dept;

#emp
load data local inpath '/root/datas/emp.txt' into table emp;

(4)全表查询

select * from dept;

select * from emp;

 (5)特定列查询

select empno,ename from emp;

列别名

重命名一个列便于计算,列别名紧跟列名,也可以在列名和别名之间加入关键字AS。

select empno AS pno,ename name from emp;

算术运算符

运算符描述
A+B
A-B
A*B
A/B
A%B取余
A&B按位取与
A|B按位取或
A^B按位取异或
~A按位取反

比较运算符

  操作符

数据类型

描述

A=B

基本数据类型

A等于B返回TRUE,反之返回FALSE

A<=>B

基本数据类型

A和B都为NULL返回TRUE,一边为NULL返回 false

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(C>=A>=B)则结果为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

例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。

例子: 

#查询工资在500到1000的员工
select * from emp where sal between 500 and 1000;

#查询comm为空的所有员工
select * from emp where comm is null;

#查询工资是500或5000的员工
select * from emp where sal IN (500, 5000);

逻辑运算符

操作符含义
AND逻辑并
OR逻辑或
NOT逻辑否

例子:

#查询薪水大于1000,部门是30
select * from emp where sal>1000 and deptno=30;

#查询薪水大于1000,或者部门是30
select * from emp where sal>1000 or deptno=30;

#查询除了20部门和30部门以外的员工信息
select * from emp where deptno not IN(30, 20);

常用函数

(1)总行数(count)

select count(*) con from emp;

(2)最大值(max)

select max(sal) max_sal from emp;

(3)最小值(min)

select min(sal) min_sal from emp;

(4)总和(sum)

select sum(sal) sum_sal from emp;

 

(5)平均值(avg)

select avg(sal) avg_sal from emp;

limit语句

典型的查询会返回多行数据,LIMIT子句用于限制返回的行数。

select * from emp limit 3;

where语句

使用WHERE子句,将不满足条件的行过滤掉,WHERE子句紧随FROM子句。

查询sal大于2000的员工:

select * from emp where sal > 2000;

like和Rlike语句

使用LIKE运算选择类似的值,选择条件可以包含字符或数字:

% 代表零个或多个字符(任意个字符);

_ 代表一个字符;

#查找名字以A开头的员工信息
select * from emp where ename LIKE 'A%';

#查找名字中第二个字母为A的员工信息
select * from emp where ename LIKE '_A%';

RLIKE 子句

RLIKE子句是Hive中这个like功能的一个扩展,可以通过Java的正则表达式来指定匹配条件。

#查找名字中带有A的员工信息
select * from emp where ename RLIKE '[A]';

分组

group by语句

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

#计算emp表每个部门的平均工资
select deptno,avg(sal) avg_sal from emp t group by deptno;

#计算emp每个部门中每个岗位的最高薪水
select deptno,job,max(sal) max_sal from emp group by deptno,job;

 

having语句

where后面不能写分组函数,having后面可以使用分组函数;

having只用于group by分组统计语句;

#求部门的平均工资大于500的部门
select deptno, avg(sal) avg_sal from emp group by deptno having avg_sal > 500;

本文仅仅是学习笔记!!!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值