想要成为一名数据研发工程师,SQL是必会的技能。数仓建模过程中用到Hive,其实也是通过写类SQL的语句,通过底层的引擎将其翻译成MapReduce程序,减少了程序员的开发量。除此之外,Spark、Flink等计算框架也支持使用SQL来实现查询。所以在面试的过程中,SQL是必须要考察的内容。今天先分享SQL的基础语法,而窗口函数是重中之重,后面单独写一篇进行讲解。
1.语法
SELECT 查询列表
FROM 表名或视图列表
WHERE 条件表达式
GROUP BY 字段名 HAVING 条件表达式
ORDER BY 字段 ASC|DESC
LIMIT m,n;
说明:
- 如果SELECT后面是 *,那么表示查询所有字段
- SELECT后面的查询列表,可以是表中的字段,常量值,表达式,函数
- 查询的结果是一个虚拟的表
- select语句,可以包含5种子句:依次是where、 group by、having、 order by、limit必须照这个顺序。
2.关联查询
作用:从2张或多张表中,取出有关联的数据。
关联查询一共有几种情况:
- 内连接:INNER JOIN 、CROSS JOIN
- 外连接:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN)
- 自连接:当 table1 和 table2 本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义
说明:
- 连接 n 个表,至少需要 n-1 个连接条件。 例如:连接三个表,至少需要两个连接条件。
- 当两个关联查询的表如果有字段名字相同,并且要查询中涉及该关联字段,那么需要使用表名前缀加以区分
- 当如果表名比较长时,可以给表取别名,简化 SQL 语句
select <select_list>
from tableA A
inner join tableB B
on A.key=B.key;
select <select_list>
from tableA A
left join tableB B
on A.key=B.key;
select <select_list>
from tableA A
right join tableB B
on A.key=B.key;
select <select_list>
from tableA A
left join tableB B
on A.key=B.key
where B.key is null;
select <select_list>
from tableA A
right join tableB B
on A.key=B.key
where A.key is null;
select <select_list>
from tableA A
left join tableB B
on A.key=B.key
union
select <select_list>
from tableA A
right join tableB B
on A.key=B.key;
select <select_list>
from tableA A
left join tableB B
on A.key=B.key
where B