SQL是所有数据方向的必备技能,也是比较容易学的技能,概括起来就是增删改查。SQL需要掌握的知识点主要包括数据的定义语言、数据的操纵语言以及数据的控制语言;在数据的操纵语言中,理解SQL的执行顺序和语法顺序,熟练掌握SQL中的重要函数,理解SQL中各种join的异同。本篇文章整理了网友们的知乎、博客等资源,引用部分已经在原文标出,并且参考链接已经附在文末,欢迎大家参考原文。

一、 SQL的三种数据语言

DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

二、 SQL的语法顺序与执行顺序

SQL 语句的执行顺序跟其语句的语法顺序并不一致。
SQL 语句的语法顺序是:

SELECT[DISTINCT]
FROM
JOIN ON
WHERE
GROUP BY
HAVING
UNION
ORDER BY
其执行顺序为:
FROM
JOIN ON
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY
需要注意的是:
1、 FROM 才是 SQL 语句执行的第一步。数据库在执行 SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。
2、SELECT 是在大部分语句执行了之后才执行的,严格的说是在 FROM 和 GROUP BY 之后执行的。这就是你不能在 WHERE 中使用在 SELECT 中设定别名的字段作为判断条件的原因。
3、并非所有SQL都按照上述的顺序进行。
三、 SQL必会语法

SQL中常用到的语法和函数整理如下,每个函数如何使用请大家参阅《SQL必知必会》,同时在日常刷题和练习中不断熟悉。

四、 SQL中各种join的区别

SQL主要的操作就是增删改查,在进行表查询时,很多情况下会涉及到多表连接,下图汇总了多表连接的不同方法。

看了那么多的join,可能你已经看晕了,下面这张图,一图说尽SQL中join的本质。

转载自码志的《图解 SQL 里的各种 JOIN》https://mazhuang.org/2017/09/11/joins-in-sql/
还不过瘾,来个进阶版,给出伪代码,复用很方便哦。

转载自码志的《图解 SQL 里的各种 JOIN》https://mazhuang.org/2017/09/11/joins-in-sql/

五、 SQL中的开窗函数

看完SQL中各种Join的区别,我们一起来学习SQL的开窗函数。开窗函数作为SQL的进阶技能,在分组排序的情况下经常被使用到。SQL的开窗函数主要有rank() over, dense_rank() over, row_number() over,下面就将详细介绍各个开窗函数的用法以及它们之间的区别和联系。
该部分内容转载自scwdqq的《rank() over,dense_rank() over,row_number() over的区别》,https://www.cnblogs.com/scwbky/p/9558203.html。
1.rank() over:查出指定条件后的进行排名。特点是,加入是对学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。

select name, subject, score,
rank() over(partition by subject order by score desc) rank
from
student_score;

2.dense_rank() over:与ran() over的区别是,两名学生的成绩并列以后,下一位同学并不空出所占的名次。

select name, subject, score,
dense_rank() over(partition by subject order by score desc) rank
from 
student_score;

3.row_number() over这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名


select name, subject, score, 
row_number() over(partition by subject order by score desc) rank
from student_score;

4.注意要点:使用rank() over的时候,空值是最大的,如果排序字段为null,可能造成null字段排在最前面,影响排序结果。可以这样:rank() over(partition by course order by score desc nulls last)来规避这个问题。

select name, subject, score, 
rank() over(partition by subject order by score desc nulls last) rank
from student_score;

SQL作为一种常用的取数工具,受到各类数据工作者喜爱,今天的分享主要是从SQL的宏观层面进行的,大部分都是系统性、概括性的知识点,具体的语法细节还需要在日常使用中不断熟悉。最后,祝大家学好SQL,入门数据科学!

参考链接

https://www.nowcoder.com/test/question/done?tid=25649295&qid=168618#summary

https://my.oschina.net/wangyongtao/blog/1932211

https://www.cnblogs.com/wen1027/p/7000762.html

https://zhuanlan.zhihu.com/p/32390852

https://www.jianshu.com/p/94c7d5982ae7

https://zhuanlan.zhihu.com/p/61805956

https://mazhuang.org/2017/09/11/joins-in-sql/

https://www.cnblogs.com/scwbky/p/9558203.html

更多资讯关注微信公众号:DataScienceArt,不定期分送各种小福利。