初学者怎样快速学会 SQL

SQL 可以说是在数据处理和分析领域最常用的程序语言了,有很多想从事这个数据业务但还没入门的同学都在问这个问题。但是,这个问题大概率是个无意义的问题。
且听我道来。

问这个问题的同学,要先问一下自己,学 SQL 打算做什么?
嗯,希望学会后能写 SQL 语句做数据分析!

这是个很常见的目标,但事情却不是那么简单,因为现实中几乎不存在只要学会 SQL 语法就能做数据分析的场景。
SQL 要在数据库里跑,那谁给你安装这个数据库?谁又负责把这些数据给放进去让你查询分析?
你查询出来的数据只是看看就完了么?还是要有段程序代码会根据查询结果做下一步的事情,比如特别常见的情况是要算个报表出来看看?
安装数据库、理解往数据库中写入数据的机制、用程序代码访问数据库并执行 SQL、取出执行结果做下一步动作、…。如果这些事你都学会了,那 SQL 自然就会了,SQL 本身语法的入门难度远远低于这些事情。如果这些事你还不会,那只学会了 SQL 语法也没什么用武之地。而学会这些事本身并不是很简单,所以,快速学会 SQL 是个伪命题。这时候,应该改问:如何学会安装 MySQL 和导入数据进去、如何学会 Java 编程和用 Java 访问 Oracle、…;学会 SQL 语法是学会这些东西的副产品,不值得单提出来。

作为初学者,还有种可能是各种忽悠的贴子看多了,老听说 SQL 是数据查询分析的基础技术,就会以为学会 SQL 就能做数据分析了,而数据分析师现在是个热门岗位。
SQL 是数据查询分析的一种基础技术,这话大体不错,但对于初学者来讲,学会 SQL 就能做数据分析的指望可能是要落空的。原因就是如上所述,会有 N 多比 SQL 入门难度大得多的东西挡在你面前。SQL 入门并不难,但不解决那些挡在 SQL 前面的障碍,你学会了 SQL 也没什么意义。如果你有本事把挡在 SQL 前面的障碍都搞定,那你根本不会再来问这个问题。
门外汉想做数据分析的话,SQL 其实不是一个适合作为第一步该学习的程序语言。

会不会有这样的场景呢:数据库和里面的数据已经被专业人员准备好了,你只要写 SQL 就能查数据了,不用去管数据库安装维护以及程序访问的事。
通常来讲,数据库管理员不会有这么大的胆子给你一个刚入门的选手开放写 SQL 的权限来瞎折腾数据库,即使只给查询权限保证弄不坏数据,那也可能跑死数据库让大家都用不了。而如果把查询功能再限制的话,那些 BI 软件都有界面给搞定了,直接拖拽出来,根本用不着再去写 SQL。当管理员敢放心给你开发写 SQL 权限时,还是那个话,你多半早就学会安装维护数据库甚至写程序访问数据库之类的难事了。所以,还是要把问题改一下。
根本的问题在于,SQL 不像其它工具一样是个可以独立工作的东西,它的存在要依附于数据库甚至程序开发体系,这些被依附的东西的难度远远大于它本身的入门。
再重复一遍,SQL 并不合适作为数据分析门外汉要进门的第一步。

那么,做数据分析,什么才是第一步该学的程序语言?
这是个题外话了,请移步这里看看 零基础同学自学编程的正确姿势

再退一步讲,我就是兴趣大,想学 SQL,总行吧。
当然行!
那有没有办法让我只学 SQL 语法而避开数据库和程序语言那些麻烦事?
也有。

SQL 语法要只是入门的话,那没什么难的,简单的 SQL 几乎可以当英语一样读。这里要学的是结构化数据的概念和运算,任何一本讲 SQL 的书都会讲这些内容,这是世界标准的知识,随便选一本来读就行了。
然后呢,去下载安装一个免费的集算器 SPL(开源软件,搜索一下吧),再找几个行式 Excel 文件(这种数据多得很)来当作数据表,集算器可以让你对着 Excel 文件执行 SQL,它支持绝大多数的基础 SQL 语法,这样就不需要折腾数据库的麻烦事了 没有 RDB 也敢揽 SQL 活的开源金刚钻 SPL 这里有关于集算器中对 SQL 支持的介绍 在数据文件上轻松使用 SQL 这里讲了如何利用集算器在文件上执行 SQL。
集算器并不是为了提供 SQL 能力而设计,所以它的课程资料中也没有 SQL 的教程,这得你自己找了,不过,这玩意儿满大街都是,很容易找。而且,学习 SQL 更关键的在于理解结构化数据的相关知识,表和字段是什么、分组和连接又是什么意思、等等。这些内容,在集算器的图书 【程序设计】 前言及目录 ) 中就都会讲到了。这些是比 SQL 语法更重要的学习内容。这本书中涉及的结构化数据概念和运算,从广度和深度都超过 SQL 资料,还结合有通俗实用的例子,用来学习结构化数据的知识会比大多数 SQL 教科书更合适。有了这些知识之后再来看 SQL 语法,那是分分钟就能掌握的事情了。

要提醒的是,SQL 入门简单,精通却很难。这个语法体系并不合适处理复杂的查询,经常要写出 N 层嵌套甚至上百行的 SQL。 SQL 为什么动不动就 N 百行以 K 计 这里有对这个问题的深入讨论和举例。