SQL是所有数据方向的必备技能,也是比较容易学的技能,概括起来就是增删改查。SQL需要掌握的知识点主要包括数据的定义语言、数据的操纵语言以及数据的控制语言;在数据的操纵语言中,理解SQL的执行顺序和语法顺序,熟练掌握SQL中的重要函数,理解SQL中各种join的异同。

一、 SQL的三种数据语言

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

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

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

三、 SQL必会语法

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




MySQL 中declare用法 declare在sql中_declare sql语句


四、 SQL中各种join的区别

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


MySQL 中declare用法 declare在sql中_SQL_02


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


MySQL 中declare用法 declare在sql中_MySQL 中declare用法_03

伪代码,复用很方便哦。


MySQL 中declare用法 declare在sql中_数据_04


五、 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/95 58203.html 。
1.rank() over:查出指定条件后的进行排名。特点是,入是对学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。

select


MySQL 中declare用法 declare在sql中_数据_05


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


select


MySQL 中declare用法 declare在sql中_SQL_06


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


select


MySQL 中declare用法 declare在sql中_MySQL 中declare用法_07


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


select


MySQL 中declare用法 declare在sql中_数据_08


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