1. SQL过滤 :
SQL1: =
select * from <表名>
where day=20200202
and temperature = 6
and province= '江苏'
很明显,这是查温度=6度,省=江苏的数据。注意,数据类型数字直接=,汉字或英文需要加半角单引号’’。
SQL2:BETWEEN
where day=20200202
and temperature between 0 and 5
and province= '江苏'
SQL3:Like
(Like模糊查询,可以用%代替模糊部分)
where day=20200202
and city_name like '%京'
-- 这样就会查询出XX京的城市,比如北京、南京等。
SQL4:IN
WHERE column_name IN (value1,value2,...)
--直接将数据放于括号中,字符要加上半角单引号,哥数据间用逗号相隔
SQL5:AND与OR
多个条件之间可以用与、或进行连接
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
-- 或者
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
-- 或者
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
2. SQL分组与排序 :
SQL1:分组group by
“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
-- 查询各性别人数
select
gender,
count(1) as cnt
from
Person
where
day = 20200211
group by
gender
-- 查询天气情况
select
temperature, -- 这里就只能有这一个字段,如果再加入一个 city_weather,就会出错
count(city) as cnt
from
Weather
where
day = 20200202
and province='江苏'
group by
temperature
!!!使用group by注意点:
使用group by时,select部分字段只能包含有groupb by的字段和一些count、sum等聚合信息,不能加入其他的字段。
SQL2:排序order by
使用order by默认是升序(asc)
select
*
from
weather
where
day = 20200202
and province_name='江苏'
order by
temperature desc -- 这里是倒序
如果同时使用两个字段进行排序,例如
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
-- 则会先根据第一个字段进行升序排序,若第一个字段相同,则再根据第二个字段进行升序排序。
3. SQL常用函数 :
函数 | 作用 |
---|---|
AVG(column) | 返回某列的平均值 |
COUNT(column) | 返回某列的行数(不包括 NULL 值) |
COUNT(*) | 返回被选行数 |
MAX(column) | 返回某列的最高值 |
MIN(column) | 返回某列的最低值 |
SUM(column) | 返回某列的总和 |
select
max(day_temperature),
min(day_temperature),
avg(day_temperature)
from
Weather
where
day = 20200202
4. SQL表关联 :
可以先看一下以下的图片:我们需要掌握,
left join、right join、inner join、full outer join
重点是left join、inner join
我们首先创建测试用表:
-- 表1 科目表
create table if not exists tmp.table_course
(
course_id int comment '科目id',
course string comment '科目'
);
-- 表2 分数表
create table if not exists tmp.table_score
(
course_id int comment '科目id',
score int comment '分数'
);
-- 插入数据
insert overwrite table tmp.table_course values(1,'语文'),(2,'数学'),(3,'英语');
insert overwrite table tmp.table_score values(2,70),(3,80),(4,90);
1、left join
顾名思义,就是“左连接”,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出查出表1所有数据以及表2和表1有交集的数据:
select A.course_id, A.course,
B.course_id, B.score
from tmp.table_course A
left join tmp.table_score B
on A.course_id = B.course_id
2、right join
“右连接”,表1右连接表2,以右为主,表示以表2为主,关联查询表1的数据,查出表2所有数据以及表1和表2有交集的数据.
select A.course_id, A.course,
B.course_id, B.score
from tmp.table_course A
right join tmp.table_score B
on A.course_id = B.course_id
3、inner join
“内连接”,简写为join,只查出两表有交集的数据,即两表取交集.
select A.course_id, A.course,
B.course_id, B.score
from tmp.table_course A
join tmp.table_score B
on A.course_id = B.course_id
4、full outer join
“全外连接”,简写未full join,查出两表所有的数据,即两表取并集.
select A.course_id, A.course,
B.course_id, B.score
from tmp.table_course A
full join tmp.table_score B
on A.course_id = B.course_id