SQL的分类:
DDL:建表、删表、修改表结构等
DML:INSERT、UPDATE、DELETE
DCL:权限控制相关的操作,例如:grant、revoke
DQL:天天写的SQL,即:Select xxx
DQL常见的操作:
基础操作:
select 需要查出来的字段
,如果有group by,那一般会将group by中指定的字段查出来
,sum(score) as sum_score
,聚合函数:sum、max、min、count、avg
,函数(字段) as 别名
from tb
where 过滤
group by 分组统计,一般结合聚合函数一起
having 分组聚合后的结果进行过滤
order by 排序,默认升序,desc降序
limit 限制返回的条数
进阶操作:多表之间的操作、行列转换
多表之间的操作:联接、关联
联接:union(去重)、union all
关联:
内连接:join / inner join
外连接:outer join
左外连接:left join / left outer join
右外连接:right join / right outer join
全外连接(相当于左外连接和右外连接做union):full join / full outer join
行列转换:
一行转多行:
MySQL、Hive、MaxCompute中:lateral view 结合 UDTF(自定义表函数)或者是 explode / posexplode
Spark SQL中:直接在select语句中即可使用explode或者是UDTF函数,可以省略lateral view
多行转一行:实际上就是分组聚合操作
group by 结合 collect_list、collect_set聚合函数 将同一分组内的多条数据合并成array类型
array -> string : 可以通过concat_ws函数指定分隔符将array转换成字符串
函数:
数值函数:round、ceil、floor、abs、log、sin、cos、tan …
字符串函数:concat、concat_ws、substring、split …
日期函数:from_unixtime、unix_timestamp、datediff、date_add…
聚合函数:sum、max、min、avg、count …
条件函数:if、case when else end、coalesce、nvl …
窗口函数:
排名:row_number、rank、dense_rank
取值:lag、lead、first_value
聚合:sum、max、min、avg、count