1
基本查询(
Select…From
)
1.1
全表和特定列查询
0
)数据准备
(0)原始数据
dept:
![](https://img-blog.csdnimg.cn/25afa81b166b4226a97c27d253764b6e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc29uZ19xdWFuXw==,size_12,color_FFFFFF,t_70,g_se,x_16)
emp:
(1)创建部门表
![](https://img-blog.csdnimg.cn/5ed10c4a162946b9b0345efb3c446f10.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc29uZ19xdWFuXw==,size_13,color_FFFFFF,t_70,g_se,x_16)
(2)创建员工表
![](https://img-blog.csdnimg.cn/a66ef15de7cc4e9a9b7866112b44f11a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc29uZ19xdWFuXw==,size_13,color_FFFFFF,t_70,g_se,x_16)
(3)导入数据
![](https://img-blog.csdnimg.cn/a800786d9d494d69910c0209ee6b4bf0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc29uZ19xdWFuXw==,size_15,color_FFFFFF,t_70,g_se,x_16)
1)全表查询
2)选择特定列查询
hive (default)> select empno, ename from emp;
注意:
(1)
SQL
语言
大小写不敏感。
(2)
SQL
可以写在一行或者多行
(3)关键字不能被缩写也不能分行
(4)各子句一般要分行写。
(5)使用缩进提高语句的可读性。
1.2
列别名
1
)重命名一个列
2
)便于计算
3
)紧跟列名,也可以在列名和别名之间加入关键字‘
AS
’
4
)案例实操
查询名称和部门
hive (default)> select ename AS name, deptno dn from emp;
1.3
算术运算符
![](https://img-blog.csdnimg.cn/0a282b9f07bf4147b5e02e372a1fe111.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc29uZ19xdWFuXw==,size_14,color_FFFFFF,t_70,g_se,x_16)
案例实操:查询出所有员工的薪水后加 1 显示。
hive (default)> select sal +1 from emp;
1.4
常用函数
1
)求总行数(
count
)
hive (default)> select count(*) cnt from emp;
2
)求工资的最大值(
max
)
hive (default)> select max(sal) max_sal from emp;
3
)求工资的最小值(
min
)
hive (default)> select min(sal) min_sal from emp;
4
)求工资的总和(
sum
)
hive (default)> select sum(sal) sum_sal from emp;
5
)求工资的平均值(
avg
)
hive (default)> select avg(sal) avg_sal from emp;
1.5 Limit
语句
典型的查询会返回多行数据。
LIMIT
子句用于限制返回的行数。
hive (default)> select * from emp limit 5;
hive (default)> select * from emp limit 2;
1.6 Where
语句
1
)使用
WHERE
子句,将不满足条件的行过滤掉
2
)
WHERE
子句紧随
FROM
子句
3
)案例实操
查询出薪水大于
1000
的所有员工
hive (default)> select * from emp where sal >1000;
注意:
where
子句中不能使用字段别名。
1.7
比较运算符(
Between/In/ Is Null
)
1
)下面表中描述了谓词操作符,这些操作符同样可以用于
JOIN…ON
和
HAVING
语句中。
![](https://img-blog.csdnimg.cn/9c5e0de8752d468a8bf2fe6db4430b72.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc29uZ19xdWFuXw==,size_17,color_FFFFFF,t_70,g_se,x_16)
2)案例实操
(1)查询出薪水等于
5000
的所有员工
hive (default)> select * from emp where sal =5000;
(2)查询工资在
500
到
1000
的员工信息
hive (default)> select * from emp where sal between 500 and 1000;
(3)查询
comm
为空的所有员工信息
hive (default)> select * from emp where comm is null;
(4)查询工资是
1500
或
5000
的员工信息
hive (default)> select * from emp where sal IN (1500, 5000);
1.8 Like
和
RLike
1
)使用
LIKE
运算选择类似的值
2
)选择条件可以包含字符或数字
:
%
代表零个或多个字符
(
任意个字符
)
。
_
代表一个字符。
3
)
RLIKE
子句
RLIKE
子句是
Hive
中这个功能的一个扩展,其可以通过
Java
的正则表达式
这个更强大
的语言来指定匹配条件。
4
)案例实操
(1)查找名字以
A
开头的员工信息
hive (default)> select * from emp where ename LIKE 'A%';
(2)查找名字中第二个字母为
A
的员工信息
hive (default)> select * from emp where ename LIKE '_A%';
(3)查找名字中带有
A
的员工信息
hive (default)> select * from emp where ename RLIKE '[A]';
1.9
逻辑运算符(
And/Or/Not
)
![](https://img-blog.csdnimg.cn/31124d6c33754e29b17da5915911ad8c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc29uZ19xdWFuXw==,size_17,color_FFFFFF,t_70,g_se,x_16)
1)案例实操
(1)查询薪水大于
1000
,部门是
30
hive (default)> select * from emp where sal>1000 and deptno=30;
(2)查询薪水大于
1000
,或者部门是
30
hive (default)> select * from emp where sal>1000 or deptno=30;
(3)查询除了
20
部门和
30
部门以外的员工信息
hive (default)> select * from emp where deptno not IN(30, 20);