跳转至

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

1946年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖。在这几十年里,无数的技术、产业在这片江湖里沉浮,有的方兴未艾,有的已经几幕兴衰。

但在这片浩荡的波动里,有一门技术从未消失,甚至“老当益壮”,那就是SQL。

SQL作为与数据直接打交道的语言,是与各种前端、后端语言进行交互的“中台”语言。

不论是前端工程师,还是后端算法工程师,都一定会和数据打交道,都需要了解如何又快又准确地提取自己想要的数据。更别提数据分析师了,他们的工作就是和数据打交道,整理不同的报告,以便指导业务决策。

尽管技术人员或多或少地会使用SQL,但不同的人编写出来的SQL的效率是不同的,比如说一份好的SQL执行计划就会尽量减少I/O操作,因为I/O是DBMS最容易出现瓶颈的地方,可以说数据库操作中有大量的时间都花在了I/O上。

此外,你还需要考虑如何降低CPU的计算量,在SQL语句中使用GROUP BY、ORDER BY等这些语句会消耗大量的CPU计算资源,因此我们需要从全局出发,不仅需要考虑数据库的I/O性能,还需要考虑CPU计算、内存使用情况等。

比如EXISTS查询和IN查询在某些情况下可以得到相同的结果,但是具体执行起来,哪个效率更高呢?

假设我把这个模式抽象为下面这样:

SELECT * FROM A WHERE cc IN (SELECT cc FROM B)
SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc=A.cc)

在查询过程中,我们需要判断表A和表B的大小。如果在有索引的情况下,表A比表B大,那么IN子查询的效率比EXISTS子查询效率高。

当然,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学习之旅呢?

精选留言(15)
  • 求知鸟 👍(9) 💬(1)

    跟着陈老师学了#数据分析实战#,机器学习模型和调参就有了底,现在正在啃#统计学习方法#这本理论教科书,用python自编程在现算法原理。 至于SQL,终于在六月份等来了。按照老师的一贯风格,应该是实用与趣味性并重。希望老师能激发兴趣,让我把#mysql实战#这个专栏看完…… 一句话,老师上新一个专栏,就买一个…… 题外话,老师的专栏更新期与秋招重合了,能不能放出一篇关于互联网秋招的文章,让我们备战秋招有点底气

    2019-06-11

  • 苏籍 👍(8) 💬(2)

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

    2019-06-11

  • 岛乾坤 👍(3) 💬(1)

    之前在工作中遇到SQL报错经常分析不明白,希望老师能总结一些常见错误类型,期待老师对不同SQL的讲解,能否也把老师对SQL的使用经验也介绍一下?还有impala和spark SQL内容是否有所涉及?

    2019-06-11

  • Geek_16ee57 👍(14) 💬(1)

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

    2019-06-11

  • Ti_T@a0180600:[七夜] 👍(6) 💬(1)

    正好KPI做的差不多。这个月来学sql。自己搭建本地数据库用来快查数据。不过。纯小白。不会配置。只能先在leetcode做做easy题😔

    2019-06-10

  • 墨禾 👍(10) 💬(1)

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

    2019-06-10

  • hlz-123 👍(15) 💬(2)

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

    2019-06-10

  • Carlos 👍(5) 💬(1)

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

    2019-06-10

  • leslie 👍(7) 💬(0)

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

    2019-06-10

  • JingZ 👍(44) 💬(3)

    哈哈,我又来了,开心!提高认识啦,精进工具啦,期待薪资进入新阶段flag! 去年年底初见陈老师时的《数据分析实战45讲》,我还是个学院派咨询师,数据分析小白,选课后,课程接近尾声之前,今年上半年顺利转行互联网行业成为一名商业分析师,偏向战略运营,非常感谢这一路陈老师的鼓励和曾问我要简历的肯定! 现在将自己定位为一个增长黑客,希望配上SQL工具和领导力,十一迈上新高度!

    2019-06-10

  • GJW 👍(12) 💬(1)

    这个是每天一更吗?还是?

    2019-06-10

  • 夜路破晓 👍(34) 💬(0)

    入门SQL不难,基本上谁都可以拿SELECT写两句,《SQL必知必会》那本200来页的小册子我接触的不少人都看过。 但关于SQL性能优化非得深入理解SQL精髓不能解,要做到知其然知其所以然需要下一番功夫。 希望陈老师SQL课程能像数据分析课程一样能带给我认知升级的美妙体验!

    2019-06-10

  • felix 👍(89) 💬(1)

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

    2019-06-10

  • 色即是空 👍(8) 💬(1)

    音频都是老师自己的声音吗,很独特的音色

    2019-06-11

  • Andre 👍(6) 💬(1)

    刚好需要再学一遍sql,早点找到工作啊,加油

    2019-06-10