3

数据分析师之——我的SQL零基础自学之路

 2 years ago
source link: https://zhuanlan.zhihu.com/p/423022605
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

数据分析师之——我的SQL零基础自学之路

本文作者:高级数据分析师,九章算法班助教

从一个什么都不懂的小白,到现在的高级数据分析师,我大概用了一年的时间,这里想给大家分享一下我的自学经历,希望能有一些帮助。

平日里经常听很多同学反馈:不知道如何刷SQL相关的题目,总觉得题目太多无从下手,也有的同学想转岗,不知道怎么上手SQL,担心盲目刷题适得其反。

作为一名数据分析师,SQL是我最常用到的工具。经过一周的时间,我终于整理出了这份SQL完整教程,借此机会分享给大家,连相关的学习资料和刷题路径都给你整理好了。

这份指南在LintCode网站上同步免费放出,绝对硬核,一起来看下去吧 SQL入门到进阶学习指南

v2-041b5de597a546a7d49043750e53370b_720w.jpg

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 语句

v2-029a27c265f8e6904d63a082c97e536f_720w.jpg

算法练习题

查询老师的姓名

查询课程名称和上课人数

查询所有老师

查询所有教师的国籍

查询上课人数超过 1000 的课程信息

查询课程名为 Artificial Intelligence 的课程信息

向课程表中插入 SQL 课程信息

向教师表指定的列插入教师信息

向课程表中插入 SQL 课程信息

这里展开说说:使用 SELECT COLUMN 查询单个列

示例代码:

假设我们要查询课程表 courses 中所有课程的名称。

我们可以使用下面的 SQL 语句:

执行输出结果:

然后大家可以通过下面 SELECT COLUMN 实例——查询所有课程名称,去实操一下。

戳他实操 查询所有课程名称

Level 2:比较运算符 / 逻辑运算符 / 特殊条件 / ORDER BY 与 LIMIT

算法练习题

查询超过 20 岁的教师

查询中国老师的姓名

查询指定教师所教授的满足条件的课程

查询 'Web' 或 'Big Data' 的课程信息

查询教师 id 不为 3 且人数大于 800 的课程

查询指定时间的课程信息

查询教师 id 不为 1 和 3 的课程

查询学生数量在指定范围内的课程信息

查询有电子邮箱的中日籍教师

这里分享一下比较运算符的学习路径:

比较运算符用于比较运算,判断逻辑是否成立。比较运算符的使用方式如下:

WHERE 比较运算符的使用方式如下:

我们可以通过下面的实例来感受一下比较运算符的用法。

假如我们要查询学生人数超过 800 的所有课程信息,我们可以使用下面的 SQL 语句:

执行输出结果

戳他实操

查询学生人数超过 800 的课程

查询超过 20 岁的教师

查询中国老师的姓名

LEVEL 3:算数函数 / 时间函数

算法练习题

查询指定邮箱结尾的教师平均年龄

查询最年长的中国教师的年龄

统计 3 号教师的学生总数

查询 20 岁以上教师的平均年龄

统计为中、英国籍的 20~28 岁老师人数

向表中插入当前的日期

查询 2020 年 8 月前的课程名和课程日期

以【使用 AVG() 函数求数值列的平均值】举例

语法:

我们可以通过下面的实例来感受一下 AVG() 函数 的用法。

假如我们想要计算课程表 courses 中学生上课人数 student_count 的平均值,我们可以使用下面的SQL语句:

执行输出结果

戳他实操 查询指定邮箱结尾的教师平均年龄

LEVEL 4:约束/多表连结

算法练习题

对课程表添加主键约束

删除课程表的主键约束

对课程表添加外键约束

查询指定老师教的所有课程的编号和名称

查询来自中国的教师名称以及所教课程名称

查询来自中国的教师名称,邮箱以及所教课程名称

查询所有课程名称以及与其相互对应的教师名称和国籍

SQL 中约束有很多,这里我们先来学习 NOT NULL

下面的 SQL 强制 ID 列、 LastName 列以及 FirstName 列不接受 NULL 值:

示例代码

在一个已创建的表的 Age 字段中添加 NOT NULL 约束如下所示:

在一个已创建的表的 Age 字段中删除 NOT NULL 约束如下所示:

戳他实操 对课程表添加主键约束

LEVEL 5:分组查询/简单的子查询/子查询进阶

算法练习题

查询不同年龄的教师的人数

统计每个老师教授课程的数量

查询教师平均年龄大于所有教师平均年龄的国家的教师信息

查询 'Big Data' 课程对应的老师姓名

GROUP BY 子句

GROUP BY 函数就是 SQL 中用来实现分组的函数,其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。

语法:

接下来,我们将通过一个单表实例和一个多表实例帮助你加深对 GROUP BY 子句 的理解。

GROUP BY 单表实例

可以看到我们教师表中的教师来自不同的国家,现需要统计不同国家教师的人数,并将结果按照不同国籍教师人数从小到大排列,请编写相应的 SQL 语句实现。

使用 SQL 中子查询的方式如下:

执行输出结果:

v2-3df83949dba5392ba0d4c5dd26680b0b_720w.jpg

目前更新到了L5,后续的事务/锁/乐观悲观锁/触发/视图/创建存储/循环 即将上线。

如果我的分享对你有用的话麻烦给我点个赞,让我有更新的动力!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK