目录

基本查询

全表和特定列查询

列别名

算术运算符

比较运算符

逻辑运算符

常用函数

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;

hive 用like匹配纯数字 hive的like_hive 用like匹配纯数字

hive 用like匹配纯数字 hive的like_hadoop_02

 (5)特定列查询

select empno,ename from emp;

hive 用like匹配纯数字 hive的like_基本数据类型_03

列别名

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

select empno AS pno,ename name from emp;

hive 用like匹配纯数字 hive的like_数据仓库_04

算术运算符

运算符

描述

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);

hive 用like匹配纯数字 hive的like_基本数据类型_05


常用函数

(1)总行数(count)

select count(*) con from emp;

hive 用like匹配纯数字 hive的like_hive_06

(2)最大值(max)

select max(sal) max_sal from emp;

hive 用like匹配纯数字 hive的like_hive 用like匹配纯数字_07

(3)最小值(min)

select min(sal) min_sal from emp;

hive 用like匹配纯数字 hive的like_基本数据类型_08

(4)总和(sum)

select sum(sal) sum_sal from emp;

 

hive 用like匹配纯数字 hive的like_hive_09

(5)平均值(avg)

select avg(sal) avg_sal from emp;

hive 用like匹配纯数字 hive的like_hive_10

limit语句

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

select * from emp limit 3;

hive 用like匹配纯数字 hive的like_数据仓库_11

where语句

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

查询sal大于2000的员工:

select * from emp where sal > 2000;

hive 用like匹配纯数字 hive的like_hive 用like匹配纯数字_12


like和Rlike语句

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

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

_ 代表一个字符;

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

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




hive 用like匹配纯数字 hive的like_hive_13


RLIKE 子句

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

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

hive 用like匹配纯数字 hive的like_数据仓库_14

分组

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;

hive 用like匹配纯数字 hive的like_数据仓库_15

 

hive 用like匹配纯数字 hive的like_hive_16

having语句

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

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

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

hive 用like匹配纯数字 hive的like_基本数据类型_17