本文作者:高级数据分析师,九章算法班助教
从一个什么都不懂的小白,到现在的高级数据分析师,我大概用了一年的时间,这里想给大家分享一下我的自学经历,希望能有一些帮助。
平日里经常听很多同学反馈:不知道如何刷SQL相关的题目,总觉得题目太多无从下手,也有的同学想转岗,不知道怎么上手SQL,担心盲目刷题适得其反。
作为一名数据分析师,SQL是我最常用到的工具。经过一周的时间,我终于整理出了这份SQL完整教程,借此机会分享给大家,连相关的学习资料和刷题路径都给你整理好了。
这份指南在LintCode网站上同步免费放出,绝对硬核,一起来看下去吧 SQL入门到进阶学习指南
SQL常用语法
SELECT columns_name --查找一列或多列,多列之间用逗号隔开
FROM Table --目标表
WHERE condition --过滤条件
GROUP BY columns_name --按列值分组,可以1个或多个列
HAVING condition --分组后的筛选条件,HAVING与WHERE区别在于前者表达式中可包含函数
ORDER BY columns_name --按列排序
LIMIT start, row_count --对结果进行限定,start表示从哪行开始,row_count表示结果行数
Level 1:简单的 select / insert / update / delete 语句
算法练习题
查询课程名为 Artificial Intelligence 的课程信息
这里展开说说:使用 SELECT COLUMN 查询单个列
示例代码:
假设我们要查询课程表 courses
中所有课程的名称。
我们可以使用下面的 SQL 语句:
执行输出结果:
然后大家可以通过下面 SELECT COLUMN 实例——查询所有课程名称,去实操一下。
戳他实操 查询所有课程名称
Level 2:比较运算符 / 逻辑运算符 / 特殊条件 / ORDER BY 与 LIMIT
算法练习题
这里分享一下比较运算符的学习路径:
比较运算符用于比较运算,判断逻辑是否成立。比较运算符的使用方式如下:
WHERE 比较运算符的使用方式如下:
我们可以通过下面的实例来感受一下比较运算符的用法。
假如我们要查询学生人数超过 800 的所有课程信息,我们可以使用下面的 SQL 语句:
执行输出结果
戳他实操
LEVEL 3:算数函数 / 时间函数
算法练习题
以【使用 AVG() 函数求数值列的平均值】举例
语法:
我们可以通过下面的实例来感受一下 AVG() 函数 的用法。
假如我们想要计算课程表 courses
中学生上课人数 student_count
的平均值,我们可以使用下面的SQL语句:
执行输出结果
戳他实操 查询指定邮箱结尾的教师平均年龄
LEVEL 4:约束/多表连结
算法练习题
SQL 中约束有很多,这里我们先来学习 NOT NULL
下面的 SQL 强制 ID
列、 LastName
列以及 FirstName
列不接受 NULL 值:
示例代码
在一个已创建的表的 Age
字段中添加 NOT NULL 约束如下所示:
在一个已创建的表的 Age
字段中删除 NOT NULL 约束如下所示:
戳他实操 对课程表添加主键约束
LEVEL 5:分组查询/简单的子查询/子查询进阶
算法练习题
GROUP BY 子句
GROUP BY 函数就是 SQL 中用来实现分组的函数,其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
语法:
接下来,我们将通过一个单表实例和一个多表实例帮助你加深对 GROUP BY 子句 的理解。
GROUP BY 单表实例
可以看到我们教师表中的教师来自不同的国家,现需要统计不同国家教师的人数,并将结果按照不同国籍教师人数从小到大排列,请编写相应的 SQL 语句实现。
使用 SQL 中子查询的方式如下:
执行输出结果:
目前更新到了L5,后续的事务/锁/乐观悲观锁/触发/视图/创建存储/循环 即将上线。
如果我的分享对你有用的话麻烦给我点个赞,让我有更新的动力!