提示
Hive SQL 教程 欢迎使用。提供建议、纠错、催更等加作者微信: gairuo123(备注:sql )和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
SQL 查询数据,我们需要编写 SELECT 语句,SELECT 语句需要指定你最终要拿到的数据内容。通常情况下,我们不需要表里的所有内容(有时候确实需要所有的),我们可以在 SELECT 部分指定这些要返回的数据字段名。
我们有名为 students
的以下数据表:
id | name | class | b_year | gender | math | chinese | english |
---|---|---|---|---|---|---|---|
1 | 张涛 | 1 | 1950 | 男 | 66 | 77 | 88 |
2 | 王琳 | 2 | 2010 | 女 | 88 | 99 | 77 |
3 | 赵丹丹 | 1 | 1996 | 女 | 55 | 55 | 55 |
4 | 李成 | 2 | 2011 | 男 | 54 | 87 | 99 |
5 | 赵天成 | 3 | 2000 | 男 | 77 | 66 | 88 |
6 | 田迪 | 1 | 1988 | 女 | 78 | 99 | 76 |
7 | 王卫栋 | 2 | 1966 | 男 | 88 | 66 | 88 |
8 | 周平 | 1 | 1988 | 男 | 77 | 99 | 76 |
9 | 武明 | 3 | 1977 | 男 | 78 | 66 | 88 |
对于初学者,由于 Hadoop 为分布式,就算单机版也不容易搭建,因此可以在以下公开的免费网站上进行练习:
https://gethue.com 页面有提示用户名和密码
但是,为了学习方便,可以本地操作关系型数据库进行练习。本教程推荐使用免费的 DBeaver Community (社区版本),下载 安装后,创建 Sqlite 数据库,用以下 SQL 填充测试数据进行学习:
CREATE TABLE students (
id INTEGER,
name TEXT,
class INTEGER,
b_year INTEGER,
gender TEXT,
math INTEGER,
chinese INTEGER,
english INTEGER
);
INSERT INTO students (id,name,class,b_year,gender,math,chinese,english) VALUES
(1,'张涛',1,1950,'男',66,77,88),
(2,'王琳',2,2010,'女',88,99,77),
(3,'赵丹丹',1,1996,'女',55,55,55),
(4,'李成',2,2011,'男',54,87,99),
(5,'赵天成',3,2000,'男',77,66,88),
(6,'田迪',1,1988,'女',78,99,76),
(7,'王卫栋',2,1966,'男',88,66,88),
(8,'周平',1,1988,'男',77,99,76),
(9,'武明',3,1977,'男',78,66,88);
我们可以用星号 *
代表所有列,会返回所有列的内容。
select * from students
'''
<略:显示所有数据>
'''
返回的是整个表的内容,行和列的顺序与原表一致。
需要注意的是,在实际的使用中,特别是用到比较大的表最好有明确的查询需求,指定查询字段,有利于执行效率和业务清晰表达。Hive 如果查询所有字段,可能会使内存超载卡死系统。
查以在 select
后边指定字段,则会仅返回这个字段的内容:
select name from students
'''
name|
----+
张涛 |
王琳 |
赵丹丹 |
李成 |
赵天成 |
田迪 |
王卫栋 |
周平 |
武明 |
'''
以上仅返回 name
字段,所有姓名。
select chinese from students
'''
chinese|
-------+
77|
99|
55|
87|
66|
99|
66|
99|
66|
'''
以上仅返回 chinese
字段,所有语文成绩。
一般情况下,我们需要取出多个字段的信息,各字段用逗号,
隔开,逗号后边可以加一个空格,虽然不会影响结果,但这样会更规范、代码更清晰。
select name, gender from students
'''
name|gender|
----+------+
张涛 |男 |
王琳 |女 |
赵丹丹 |女 |
李成 |男 |
赵天成 |男 |
田迪 |女 |
王卫栋 |男 |
周平 |男 |
武明 |男 |
'''
以上将返回姓名和性别两列。
select name, gender, math from students
'''
name|gender|math|
----+------+----+
张涛 |男 | 66|
王琳 |女 | 88|
赵丹丹 |女 | 55|
李成 |男 | 54|
赵天成 |男 | 77|
田迪 |女 | 78|
王卫栋 |男 | 88|
周平 |男 | 77|
武明 |男 | 78|
'''
以上将返回姓名、性别和数学成绩三列。
指定所有字段时,字段的返回的顺序是原表的顺序,多个字段时返回的顺序是你 select 后边字段名称的先后顺序。
可以对列值进行计算:
操作符 | 描述 | 示例 |
---|---|---|
+ | 相加:将符号两边的数值加起来。 | a + b 得 30 |
- | 相减:从最边的操作数中减去右边的操作数。 | a - b 得 -10 |
* | 相乘:将两边的操作数相乘。 | a * b 得 200 |
/ | 相除:用右边的操作数除以左边的操作数。 | b / a 得 2 |
% | 取余:用右边的操作数除以左边的操作数,并返回余数。 | b % a 得 0 |
注:a = 10, b = 20
-- 返回的两个值相加形成一个新的值
select chinese+math from students
'''
chinese+math|
------------+
143|
187|
110|
141|
143|
177|
154|
176|
144|
'''
-- 可以起一个别名(as)total,返回的列名称就是 total
select chinese+math as total from students
'''
total|
-----+
143|
187|
110|
141|
143|
177|
154|
176|
144|
'''
{tips} 学习提示 这儿会涉及多表查询,后边会讲到,可先跳过,后期备查。
如果查询的是多个表,在指定返回字段时需要指定表名:
select students.name, class.teacher, students.math
from students,
class
where students.class = class.class
以上从两个表里 students
和 class
中查询信息,在返回字段时需要指定是哪个表的。
as
关键字可以对字段和表指定别名,在后续的代码都可以用这此别名引用和操作,返回的字段显示字段的别名:
-- 可以起一个别名(as)total,返回的列名称就是 total
select chinese+math as total from students
-- 对表名起别名
select chinese as total from students as st
-- 对表名起别名时 as 可以省略
select chinese as total from students st
更新时间:2021-11-23 20:37:36 标签:sql 查询 字段