目录
基本查询
全表和特定列查询
(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%';
![](https://i-blog.csdnimg.cn/blog_migrate/cd9406ab90e533fa6f37edf6444ead24.png)
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;
本文仅仅是学习笔记!!!