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

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

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

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

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

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

v2-041b5de597a546a7d49043750e53370b_b.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_b.jpg

算法练习题

查询老师的姓名

查询课程名称和上课人数

查询所有老师

查询所有教师的国籍

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

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

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

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

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

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

示例代码:

v2-d6a37a9b4e0bcb454e6c4bc5a05aee1d_b.png

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

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

v2-eadef7c346ea018595cd02d362498588_b.png

执行输出结果:

v2-d98ad26d501eafed0e434739a1aab80c_b.jpg

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

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

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

v2-7ddf893f808f9832421e86f24de0411a_b.jpg

算法练习题

查询超过 20 岁的教师

查询中国老师的姓名

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

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

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

查询指定时间的课程信息

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

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

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

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

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

v2-81f5000c1f246e83099125407fe5533a_b.png

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

v2-f343c4cbcb90476567bf4a070d17c099_b.png

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

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

v2-5a34cd9d536fb4dd1b03055e8463013f_b.png

执行输出结果

v2-9397fb212491d341e305ad67c3b4b65b_b.jpg

戳他实操

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

查询超过 20 岁的教师

查询中国老师的姓名

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

v2-b318e084d70618b3eec64fd1a4e12304_b.jpg

算法练习题

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

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

统计 3 号教师的学生总数

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

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

向表中插入当前的日期

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

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

语法:

v2-fbfef4121cf425ad19859c63d441df84_b.png

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

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

v2-807a7a0267e609532e36670739c62ddb_b.png

执行输出结果

v2-21918b3ebbfde317667a8ca724a35ad6_b.jpg

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

LEVEL 4:约束/多表连结

v2-d4e03d2ee03d0eb3f2e6de86894939d9_b.jpg

算法练习题

对课程表添加主键约束

删除课程表的主键约束

对课程表添加外键约束

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

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

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

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

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

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

v2-b41492b81b26e2adaa581c8e5aaef151_b.jpg

示例代码

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

v2-fc4130caee65fd8ed5c8a3adb10c87f6_b.png

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

v2-6877b5357fe57c8ab7dcc51c93e1af45_b.png


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

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

v2-4695042584d21d59adc65d7050f7f47e_b.jpg

算法练习题

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

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

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

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

GROUP BY 子句

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

语法:

v2-37b6c463f401ddb0861baaaf9729e0c8_b.png

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

GROUP BY 单表实例

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

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

v2-692b5609fb652d4f13bc121cd5170bab_b.png

执行输出结果:

v2-3df83949dba5392ba0d4c5dd26680b0b_b.jpg

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

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值