SQL必知必会
陈旸
清华大学计算机博士
立即订阅
10179 人已学习
课程目录
已完结 49 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词丨SQL可能是你掌握的最有用的技能
免费
第一章:SQL语法基础篇 (19讲)
01丨了解SQL:一门半衰期很长的语言
02丨DBMS的前世今生
03丨学会用数据库的方式思考SQL是如何执行的
04丨使用DDL创建数据库&数据表时需要注意什么?
05丨检索数据:你还在SELECT * 么?
06丨数据过滤:SQL数据过滤都有哪些方法?
07丨什么是SQL函数?为什么使用SQL函数可能会带来问题?
08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?
09丨子查询:子查询的种类都有哪些,如何提高子查询的性能?
10丨常用的SQL标准有哪些,在SQL92中是如何使用连接的?
11丨SQL99是如何使用连接的,与SQL92的区别是什么?
12丨视图在SQL中的作用是什么,它是怎样工作的?
13丨什么是存储过程,在实际项目中用得多么?
14丨什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?
15丨初识事务隔离:隔离的级别有哪些,它们都解决了哪些异常问题?
16丨游标:当我们需要逐条处理数据时,该怎么做?
17丨如何使用Python操作MySQL?
18丨SQLAlchemy:如何使用Python ORM框架来操作MySQL?
19丨基础篇总结:如何理解查询优化、通配符以及存储过程?
第二章:SQL性能优化篇 (18讲)
20丨当我们思考数据库调优的时候,都有哪些维度可以选择?
21丨范式设计:数据表的范式有哪些,3NF指的是什么?
22丨反范式设计:3NF有什么不足,为什么有时候需要反范式设计?
23丨索引的概览:用还是不用索引,这是一个问题
24丨索引的原理:我们为什么用B+树来做索引?
25丨Hash索引的底层原理是什么?
26丨索引的使用原则:如何通过索引让SQL查询效率最大化?
27丨从数据页的角度理解B+树查询
28丨从磁盘I/O的角度理解SQL查询的成本
29丨为什么没有理想的索引?
30丨锁:悲观锁和乐观锁是什么?
31丨为什么大部分RDBMS都会支持MVCC?
32丨查询优化器是如何工作的?
33丨如何使用性能分析工具定位SQL执行慢的原因?
34丨答疑篇:关于索引以及缓冲池的一些解惑
35丨数据库主从同步的作用是什么,如何解决数据不一致问题?
36丨数据库没有备份,没有使用Binlog的情况下,如何恢复数据?
37丨SQL注入:你的SQL是如何被注入的?
第三章:认识DBMS (7讲)
38丨如何在Excel中使用SQL语言?
39丨WebSQL:如何在H5中存储一个本地数据库?
40丨SQLite:为什么微信用SQLite存储聊天记录?
41丨初识Redis:Redis为什么会这么快?
42丨如何使用Redis来实现多用户抢票问题
43丨如何使用Redis搭建玩家排行榜?
44丨DBMS篇总结和答疑:用SQLite做词云
第四章:SQL项目实战 (3讲)
45丨数据清洗:如何使用SQL对数据进行清洗?
46丨数据集成:如何对各种数据库进行集成和转换?
47丨如何利用SQL对零售数据进行分析?
结束语 (1讲)
结束语 | 互联网的下半场是数据驱动的时代
SQL必知必会
登录|注册

开篇词丨SQL可能是你掌握的最有用的技能

陈旸 2019-06-10
00:00
08:07
讲述:陈旸 大小:7.44M
1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖。在这几十年里,无数的技术、产业在这片江湖里沉浮,有的方兴未艾,有的已经几幕兴衰。
但在这片浩荡的波动里,有一门技术从未消失,甚至“老当益壮”,那就是 SQL。
SQL 作为与数据直接打交道的语言,是与各种前端、后端语言进行交互的“中台”语言。
不论是前端工程师,还是后端算法工程师,都一定会和数据打交道,都需要了解如何又快又准确地提取自己想要的数据。更别提数据分析师了,他们的工作就是和数据打交道,整理不同的报告,以便指导业务决策。
尽管技术人员或多或少地会使用 SQL,但不同的人编写出来的 SQL 的效率是不同的,比如说一份好的 SQL 执行计划就会尽量减少 I/O 操作,因为 I/O 是 DBMS 最容易出现瓶颈的地方,可以说数据库操作中有大量的时间都花在了 I/O 上。
此外,你还需要考虑如何降低 CPU 的计算量,在 SQL 语句中使用 GROUP BY、ORDER BY 等这些语句会消耗大量的 CPU 计算资源,因此我们需要从全局出发,不仅需要考虑数据库的 I/O 性能,还需要考虑 CPU 计算、内存使用情况等。
比如 EXIST 查询和 IN 查询在某些情况下可以得到相同的结果,但是具体执行起来,哪个效率更高呢?
假设我把这个模式抽象为下面这样:
SELECT * FROM A WHERE cc IN (SELECT cc FROM B)
SELECT * FROM A WHERE EXIST (SELECT cc FROM B WHERE B.cc=A.cc)
在查询过程中,我们需要判断表 A 和表 B 的大小。如果在有索引的情况下,表 A 比表 B 大,那么 IN 子查询的效率比 EXIST 子查询效率高。
当然,SQL 的实用和强大远远不止体现在 IT 技术领域,在产品和运营方面,SQL 更是发挥了它强大的威力。
举个例子吧,假设你是一款游戏的产品经理,你想查询各种条件下的英雄都有哪些,比如最大生命值大于 7000 的法师英雄都有谁,那么你会怎么做呢?是找研发帮忙?还是从大量的数据里慢慢找?
当然这两种方式都可以,但如果每次都找研发也怪不好意思的,自己动手找吧,效率又很低。
实际上用一条 SQL 语句,你就可以直接从数据表中得到答案:
SELECT * FROM heros WHERE hp_max >= 7000 AND role = '法师'
SQL 语句直观到你就算没有 SQL 基础,也能凭借英语基础猜出它的大致意思。这就是 SQL 最大的特点。
假如你是一名运营人员,想要看下 7 天内的新增用户数有多少,该怎么做呢?首先我们需要获取现在的时间,使用 NOW() 函数即可,然后把它转化成天数,与用户的注册时间进行对比,小于 7 天的时间即是我们的筛选条件,最后就可以得到想要的数据了:
SELECT COUNT(*) as num FROM new_user WHERE TO_DAYS(NOW())-TO_DAYS(regist_time)<=7
上面举的两个例子属于相对简单的 SQL 查询,SQL 还可以帮助你统计每日新增、每日活跃、次日留存的数据。
事实上除了业务之外,基于数据的各种技术中也会用到 SQL,比如 OLTP(联机事务处理过程)、OLAP(联机分析处理过程)、RDBMS(对象关系型数据库管理系统)。甚至是在 NoSQL 的阵营上,如今也在使用类似 SQL 的操作,要知道,提出 NoSQL 这个概念的初衷就是远离 SQL,但如今人们更愿意把 NoSQL 定义为 Not Only SQL(不只是 SQL)。此外在我们熟悉的 XML、JSON 等数据格式中,都存在着各种 SQL,比如用于 XML 的 SQL、用于 JSON 的 SQL 等。除此以外,还包括了用于记录地理位置信息的 SQL、用于搜索的 SQL、用于时间序列数据的 SQL、用于流的 SQL 等。
可以说不论是和业务打交道,还是和数据相关的技术打交道,都需要 SQL。
如果你从事编程或身处互联网行业,那么没有什么比学习 SQL 语言更有价值。SQL 可能是你掌握的最有用的技能。对数据了解的需求往往是高频的,因此自己掌握 SQL 在实际工作中是非常有必要的。
不论是产品经理、运营人员,还是开发人员、数据分析师,你都可以用到 SQL 语言。它就像一把利剑,除了可以提高你的工作效率之外,还能扩大你的工作视野。
如果你没有 SQL 基础,我希望这个专栏可以帮助你彻底理解 SQL,从而开启你的数据之旅,比如如何用 SQL 检索数据、过滤数据,如何使用 SQL 函数、子查询……考虑到在实际工作中,你还会接触到不同的关系型数据库管理系统,我还会讲解 SQL 在不同的数据库管理系统中是如何使用的。
即使对于有 SQL 基础的同学来说,面对同样的 SQL 语句,查询效率可能千差万别。在你实际工作的时候,如何快速定位 SQL 的性能问题,并找到正确的优化方案会让你的价值倍增。
数据是 SQL 的生命力,你不用担心面对干巴巴的 SQL 语言而感到无从下手,为了避免纸上谈兵,让你在工作中更容易、更熟练地使用 SQL,我特意为专栏建了一个王者荣耀数据库和 NBA 球员数据库。这些数据库既是我在讲解 SQL 时要用到的事例,也是你课后练习的素材。
我相信以理论为骨,以数据库为翼,才能让你在消化理论的同时也能上手练习,真正了解和驾驭 SQL 这门语言。
因此,我把专栏分成了四个部分,既可以让你掌握 SQL 这门语言,也可以让你了解最新的数据库管理技术。

1. 基础篇

SQL 的语法非常简单,就像英语一样,但它的功能却很强大,可以帮助我们对数据实现索引、排序、分组等功能。但是这些命令在不同的数据库管理系统中的使用却有所差异,因此在专栏中,我不仅会重点讲解 SQL 本身的语法,还会讲解这些语法在类似 MySQL、Oracle、SQL Server 等不同的数据库管理系统中是如何使用的。

2. 进阶篇

很多人在写 SQL 的时候都会遇到这样的问题:“同样都是用 SQL 查询数据,为什么我写的语句要比别人的慢?”
事实上,就是因为 SQL 语法简单,导致很多人写的时候不拘小节,比如搞混了关键词的顺序,这就在无意中降低了 SQL 的执行效率。
在这一部分,我会讲解在实际工作中,使用 SQL 经常会遇到的问题,以及如何使用工具进行分析,快速定位性能问题及解决方案。

3. 高级篇

在大数据的时代,诞生了很多适用于不同场景的数据库管理系统,既有基于 SQL 的关系型数据库,比如 Oracle、MySQL、SQL Server、Access、WebSQL、SQLite 等,也有 NoSQL 非关系型数据库,比如 MongoDB、Redis 等。
在这一部分中,我会讲一讲各种主流数据库管理系统的使用。

4. 实战篇

以上几个部分是在帮你梳理 SQL 的知识体系,但只有学会用 SQL 系统地进行项目实战,你才能真正地学以致用,让 SQL 为你的工作助力。
在这一部分中,我会结合数据分析的项目,为你讲解 SQL 的实战案例,比如如何用 SQL 做数据清洗、数据集成等。
如果你是一名程序员,那么会用 SQL 无疑是你的基本技能;如果你是产品经理或者运营人员,那么 SQL 将会为你打开一个全新的世界,让你从不一样的视角看待数据,利用数据。
我希望这个专栏可以带你走进 SQL 的世界,让你掌握它的基础语法,学会分析性能问题,一步步精通 SQL。这时你会发现,原本毫无规则、抽象的数据仿佛一下子具象了,变得会说话了,它会告诉你数据之间彼此的关联、背后所代表的含义……
SQL 让我们看到了数据的奇妙,你想不想和我一起开启这场 SQL 学习之旅呢?
取消
完成
0/1000字
划线
笔记
复制
unpreview
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《SQL必知必会》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(91)

  • felix 置顶
    如果真的要说程序员用得最多的语言,那应该是SQL吧。不仅是前端,或是后端,或多或少都要懂得写一些SQL。甚至接触过很多业务人员,例如产品经理、运营、财务人员,也懂得写SQL。
    第一份正式的工作就是从SQL开始的,当时作为数据部门,面对业务部门成堆的数据需要,我的任务就是在BI系统搭建成熟之前,每天写各种SQL,来满足他们的日常需求。甚至开了一个只读数据库,培养了产品经理和财务人员,让他们用SQL自己抓数。
    后来又转向学了MDX语言,面向OLAP进行数据查询。到现在用DAX来进行大数据方面的探索(SQL SERVER TABULAR,国内用得少)。
    不论怎样,SQL还是最重要的武器,希望通过这个专栏能查缺补漏,知其然更知其所以然。
    2019-06-10
    1
    49
  • JingZ 置顶
    哈哈,我又来了,开心!提高认识啦,精进工具啦,期待薪资进入新阶段flag!

    去年年底初见陈老师时的《数据分析实战45讲》,我还是个学院派咨询师,数据分析小白,选课后,课程接近尾声之前,今年上半年顺利转行互联网行业成为一名商业分析师,偏向战略运营,非常感谢这一路陈老师的鼓励和曾问我要简历的肯定!

    现在将自己定位为一个增长黑客,希望配上SQL工具和领导力,十一迈上新高度!

    作者回复: 加油!多谢支持!
    数据分析的价值会越来越大,互联网企业的下半场已经进入到精细化运营的阶段,SQL基本上是必备技能之一,不仅需要了解SQL基础,还需要有SQL优化的能力

    2019-06-10
    2
    21
  • 夜路破晓 置顶
    入门SQL不难,基本上谁都可以拿SELECT写两句,《SQL必知必会》那本200来页的小册子我接触的不少人都看过。
    但关于SQL性能优化非得深入理解SQL精髓不能解,要做到知其然知其所以然需要下一番功夫。
    希望陈老师SQL课程能像数据分析课程一样能带给我认知升级的美妙体验!
    2019-06-10
    13
  • GJW 置顶
    这个是每天一更吗?还是?

    编辑回复: 每周三更,一、三、五更新。

    2019-06-10
    8
  • Geek_16ee57 置顶
    现在数据分析已经是每一个岗位都必备的技能了,作为不懂技术的市场狗也要开始学习了

    作者回复: 数据分析会越来越重要,尤其是现在市场环境不好的情况下,企业越来越重视效果,也就是越来越精细化的运营,讲究每一分钱花在刀刃上。真心觉得现在的企业,和从业人员越来越不容易,当然也是个新的时代。掌握工具和技能的人,会越来越有市场价值

    2019-06-11
    7
  • hlz-123 置顶
    我是一名计算机爱好者,在极客时间的第一课就是陈旸老师的《数据分析实战45讲》,一个偶然机会看到课程,抱着试试看的态度学习,那是第一次接触python,第一次接触数据分析,但是老师讲课通俗易懂,高深理论能讲透彻和明白,深深吸引了我,开始学习python ,当时课基本能理解,例题和习题自己能够独立实现,从那之后,在极客上购买了多门课程,相信陈旸老师这门课程,同样精彩。

    作者回复: 谢谢hlz,Python是门好语言,我也很喜欢。做数据分析,也可以联合SQL一起使用。SQL会让你更重视数据,以及对数据的管理和查询。

    2019-06-10
    7
  • 舒成 置顶
    跟着陈老师学了#数据分析实战#,机器学习模型和调参就有了底,现在正在啃#统计学习方法#这本理论教科书,用python自编程在现算法原理。
    至于SQL,终于在六月份等来了。按照老师的一贯风格,应该是实用与趣味性并重。希望老师能激发兴趣,让我把#mysql实战#这个专栏看完……
    一句话,老师上新一个专栏,就买一个……

    题外话,老师的专栏更新期与秋招重合了,能不能放出一篇关于互联网秋招的文章,让我们备战秋招有点底气

    作者回复: 可以啊 好主意,秋招这个是大家关心的热点,如果SQL在面试中对大家有所帮助就更好了!

    2019-06-11
    4
  • 苏籍 置顶
    自己的SQL一直是弱项,开发时候一碰到Sql就去百度,所以一直期待这个专栏,希望自己能够通过专栏的学习和练习,让自己的SQL能力在平时开发中能运用自如。
    另外拉上一直想学SQL的女朋友,一起开始Sql之旅

    作者回复: 加油 微信群里应该会有不少女孩学SQL。至少数据分析群里是有的。PS:我有个今日头条负责金融的PM,是个女生,她说他们部门就非常需要SQL来分析数据

    2019-06-11
    3
  • Ti_T@a0180600:[七夜] 置顶
    正好KPI做的差不多。这个月来学sql。自己搭建本地数据库用来快查数据。不过。纯小白。不会配置。只能先在leetcode做做easy题😔

    作者回复: 不错 力扣和SQLZOO都可以试试

    2019-06-10
    3
  • 墨禾 置顶
    在项目实践过程中:我遇到了如下问题 【1、为什么我的count(*)如此慢? 2、为什么建立索引,查询还是很慢? 3、我该从哪些方面去调优?】这些问题一直困扰着我? 虽然做过不少项目,写过不少sql语句,但是平时由于时间的问题,只重视【how】疏忽了【why】,导致技术方面存在很多技术盲区,难以突破目前的技术瓶颈。

    作者回复: 对 SQL优化是不断积累和总结的过程,从原理到实践。就好比做练习题一样,每道题都有自己的知识点,练习并且掌握它

    2019-06-10
    2
  • Carlos 置顶
    SQL自己工作中一直在用,对于程序员来说,也是挺重要的技能。自认为还不算太陌生,也了解一些规范写法。但是还是不成体系,当被别人问起细节来,可能还会支支吾吾。所以想来来规范提高下。

    作者回复: 慢慢来,很多知识都是逐渐积累的,可以跟着专栏一起做笔记和分享

    2019-06-10
    2
  • leslie 置顶
    林晓斌感觉偏深:越挖越深,因为那门课拓展了一堆底层课程,感觉作者更加是从应用的角度去讲解。
            OLTP和OLAP的关注点不一样:个人拙见啊,觉得作者的出发点应当属于OLAP,因为林晓斌的课程属于OLTP;其实这是我所希望获取的不一样的东西,估计也是读者们所希望的。
            关系型数据库到现在差不多40年,如果从其起源开始谈起已经50年了。T-SQL到现在-曾经的主流部分都已经消失了,曾经做惯性或者其特色的视图淡出OLTP,其艺术性各大厂商给予的又不同。其实我非常想听听作者关于其数据分析的特性与其的结合-OLAP。
          前几日翻到一本10年前的自己刚入行买的一本关于sql艺术的书籍:再看再用时发现其实确实很美,只是这种代码有时可遇而不可求;合适的场景合适的语言才能展现出其艺术性和美的一面。
            非常期待作者能从OLTP不同的观点展现出其不一样的东西。
          
    2019-06-10
    2
  • 岛乾坤 置顶
    之前在工作中遇到SQL报错经常分析不明白,希望老师能总结一些常见错误类型,期待老师对不同SQL的讲解,能否也把老师对SQL的使用经验也介绍一下?还有impala和spark SQL内容是否有所涉及?

    作者回复: 我会对不同的维度介绍,一个使用场景的维度,比如注重内存效率,并发操作,还是数据分析,分区分表等。同时也讲解不同的数据库的差异,比如Oracle,MySQL,SQL Server,也包括WebSQL, SQLite。和一些NoSQL的简单使用。impala和spark SQL等内容都讲的差不多的时候,可以考虑下。也是看大家是否有这方面共性的需求

    2019-06-11
  • 岁月安然
    学会从删库到恢复
    2019-06-10
    21
  • 小核桃
    很幸运能看到这样的专栏,正好要学习这方面的技术,必须支持!
    2019-06-10
    19
  • Charles是水
    用不一样的视角看数据,极客时间的专栏没让我失望过
    2019-06-10
    17
  • 徐小鹏
    请问这个和之前上的mysql的课程有什么区别啊?感觉这个课是那门课的子集。
    2019-06-10
    1
    8
  • Brandon
    音频都是老师自己的声音吗,很独特的音色

    作者回复: 是的!谢谢啦!我还记得我录制开篇词的时候,晚上回家太累就睡了,然后半夜想起来必须要录音了,就0点多爬起来,然后听到自己第一次的录音有些疲惫就又重新录制了前面的部分,都录完之后已经1点多了 :)

    2019-06-11
    4
  • 白了少年头
    基本技能,学起来~
    2019-06-10
    1
    4
  • 幻月剑
    懂得自然不必多说,就冲着SQL三个字母,就直接拿下这个专栏!
    2019-06-10
    4
收起评论
91
99+
返回
顶部