前言:SQL可以说是在数据处理和分析领域最常用的程序语言了,有很多想从事这个数据业务但还没入门的同学都在问这个问题。但是,这个问题大概率是个无意义的问题。
且听我道来。
文章目录
- SQL简介
- SQL语法
- SPL资料
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几乎可以当英语一样读。这里要学的是结构化数据的概念和运算,任何一本讲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 计这里有对这个问题的深入讨论和举例。
最后,将SPL的资料提供给大家
SPL资料
- SPL官网
- SPL下载
- SPL源代码