零基础 SQL 数据库小白,从入门到精通的学习路线与书单
我观察了 865 个 SQL 入门者,发现大家在学习 SQL 的时候,最大的问题不是 SQL 语法,而是对 SQL 原理的不熟悉。
很多初学者,往往被 SQL 能做什么,为什么会有 SQL 这门语言给迷惑到了。他们用学英语的方法,去学SQL,结果发现什么都学不到,而且感觉越来越难学,难用。想想你为什么讨厌英语就明白了,每次翻开词典,从 abandon 学起来,不到 10 页就学不下去了,不就是因为太枯燥,太乏味了嘛。
假如我告诉你,听听音乐 yesterday once more, 看看电影 iron man 就能轻松学好英语,是不是觉得有趣多了? 学 SQL 和学英语一样,选择枯燥的学习模式,必然带来不好的学习结果。我们追求的是轻松学 SQL 的方法。
做个广告,我公众号【有关SQL】有近1万订阅者,分享了很多数据库论文与学习资料,还与许多读者深入交流了 SQL 数据库,Python, 以及大数据的学习方法,欢迎关注。
SQL 的原理,超级简单,四个字,集合运算。
所有复杂的 SQL 语句,命令都是围绕着这个本质在做文章,添油加醋。
如果对集合这个概念陌生,没关系,高中毕业那么久,不记得情有可原。毕竟当时老师也不知道,风靡全球的 SQL 会基于集合理念发明出来。
集合,最简单的例子就是数组,比如 { a, b, c, d}。举个形象化的例子,比如大学全班同学,这是个大集合,按照性别进而可以分成男同学集合和女同学集合。
男同学有什么特征?高大,威猛,有胡子。
女同学有什么特征?白嫩,温柔,有长发。
就这样,我们有两个大集合了,男同学集合,女同学集合。回到 SQL 的原理上来,针对这两个集合,SQL 运算做的事情,无非就是这几样:
- 寻找身高大于180cm的男同学
- 寻找身高最高的男同学
- 寻找有胡子的男同学
- 寻找长了胡子,身高低于160cm的男同学
- 统计没有长胡子的男同学人数
- 寻找最高的女同学
- 寻找最白的女同学
- 寻找又高又白的女同学
- 寻找正在谈恋爱的男女同学
- 寻找曾经谈过恋爱,而现在又有其他男女朋友的男同学和女同学
你看,无非就是做这些事情。是不是对SQL立马就有好感了呢!
如此有趣的一件事情,教科书偏要说的枯燥(希望下面离散数学,集合理论的科普不会烦到你,不想看,完全可以跳过)
- 交换律(Commutative Laws):A ∪ B = B∪A, A ∩ B = B ∩ A
- 结合律(Associative Laws):(A ∪ B) ∪ C = A ∪ (B∪C) = A ∪ B∪C (A ∩ B) ∩ C = A ∩ (B ∩ C) = A ∩ B ∩ C
- 分配律(Distributive Laws): (A ∩ B) ∪C = (A∪C) ∩ (B∪C) (A∪B) ∩ C = (A ∩ C) ∪(B ∩ C)
- 等幂律(Impotent laws): A∪A = A,A∩A = A
- 吸收律(Absorption laws): (A∩B)∪A = A,(A∪B)∩A = A
- 同一律(Domination laws):A∪Ø = A,A∩Ω= A A∪Ω=Ω,A∩Ø = Ø;
参考:http://math001.com/laws_of_set_theory/这罗列了详细的集合运算数学表达式。
所以,千万别被教科书上的数学符号吓到,而失去了学习SQL的兴趣。学霸别听我的,这些符号我知道对你完全是小菜一碟。
下面我们用SQL来回答上面的10个男女同学问题:
- 把全班男女同学登记到花名册上
- 找班上的八卦同学打听男女朋友关系,记录到恋爱关系秘本上
这里用到的花名册,恋爱关系秘本就是数据库里的二维表。先建这两张表,分别是 Students(花名册表),Relationships(恋爱关系秘本)。为了更加形象,用 Excel 展示下,这两张表分别长这个样子:
StudentId Name Gender Height Mustache SkinColor 001 陈冠奇 男 186 No 白 002 张白芷 女 172 No 白
RelationshipId BoyId GirlId BeginDate CurrentActive EndDate 1001 001 002 2002-4-1 Y 2008-4-1
第一张表是 Students 花名册表,共有 6 栏,分别解释下含义:
- StudentId: 用来标注学生的学号,一个学生只有一个学号;
- Name:学生姓名;
- Gender:学生性别;
- Height:学生身高,cm 为单位
- Mustache:有无胡子;
- SkinColor:肤色
第二张表是 Relationships(恋爱关系秘本),共有 6 栏,分别解释下:
- RelationshipId: 男女朋友关系成立的编号,用来确立两人曾经处过或正在处于关系之中;
- BoyId:男生编号;
- GirlId:女生编号;
- BeginDate:关系成立日期;
- CurrentActive:当前是否还在恋爱期;Y 表示正在恋爱;N 表示已经分手;
- EndDate:分手日期
注意:栏位在数据库中被称为字段
用 SQL 语句来表达建表的命令:
注意:字段旁边必须加上数据类型,规范数据长度,精度,比如 varchar(3) 表示 3 个字长。有关数据类型,可以参考参考官方文档对基本数据类型的定义和举例
推荐可在线执行SQL的工具: http://sqlfiddle.com/
这款工具,有两大特点:
- 支持六大数据库,MySQL,Oracle,SQL Server,PostgreSQL,SQLite;
- 支持在线编辑及执行SQL,无需自搭数据库环境
简单了解下:
整个页面分为1,2,3个区域。
- 区域 1 的编辑器用来创建数据库 schema ,比如建表,新建数据;
- 区域 2 则用来编辑和执行 SQL;
- 区域 3 用来展示 区域 2 中的 SQL 执行结果
使用这款工具,无需你手工安装数据库便可以完成本指南所有的 SQL.
完美!我们成功的完成了第一步。
接下来,让我们为巧妇准备好精米。
INSERT
使用这条 SQL 命令,将添加全班同学的个人信息,包括姓名,学号,性别,身高,肤色,有无胡子,以及男女朋友关系,(当然这可不能让班主任知道。)
接下来我们用 SQL 做一些有意思的事情:
查找身高大于180cm的男同学:
查找身高大于170cm的肤白女同学:
查找最高的女同学:
查找有恋爱关系的同学:
最帅的陈冠奇居然留胡子了,让我们记录下:
帅奇留胡子的原因居然是,陈冠奇和张白芷前两天分手了,我们要记录这段关系的破裂:
任何的痛苦都离不开恋人的离去,张白芷居然去国外留学了,因此花名册少了这个人:
帅帅的陈冠奇,怎么甘心就此沉沦,他又找了莫文丽做女朋友:
好奇的小乐,查了查莫文丽的后台,发现她居然曾有过三次恋爱关系:
恭喜!到此为止,所有的SQL基本操作你都会了。
有竞争力的技术肯定是要花大功夫来磨炼的,否则人人看一遍就会的东西,卖得出什么高价呢!
因此当大家都度过第一阶段之后,如何意识到还有第二阶段,第三阶段,甚至第四阶段就很重要了。那会影响你的长期发展。舒适区是留给平庸者的。
从技术角度,我们习惯将 SQL 数据库开发分为 4 个阶段:入门,初级,高级,资深。
注:技术角度可分这四个阶段,并不代表做到资深,你一定能年薪百万。可千万别这么想,很多朋友咨询我的第一个问题是,“黄老师,以我的水平,能要个30K不?” 这我不打包票,能做到什么收入完全看你水平和天意(没错,很多时候,赚大钱靠运!)
在本文中,我只谈 SQL 技术水平的晋级,不谈其他。
上面的入门指南,相信你看完之后,写 SQL 基本掌握了。这一阶段过后,就是要通过反复的操练这些 SQL ,直到你熟透这些 SQL 命令和语法。
帮你度过这阶段最好的方式,是什么呢?刷题。没错,简单粗暴。这里推荐牛客网,你可以试着去刷:
左边是题目,右边编辑 SQL, 点击【保存并调试】即可运行 SQL。系统会提示,你的答案是否通过!
刷完这 60 多道题目,相信你的感觉一定很好!
再推荐基本经典的小书,可以兼顾理论与实战,具体看哪一本,依据你使用的数据库软件来:
《SQL 必知必会》(综合)《T-SQL Querying》中文《T-SQL 查询》(SQL Server适用)《Oracle编程艺术》(Oracle适用,只要是 ASK Tom 主编 Thomas Kyte 的著作不会错)
打个广告。我在微信公众号【有关SQL】中分享了这些基础的电子书,你可以关注后,回复1024,便可拿到!
当你跨过了第二个阶段,所有的 SQL 命令都会了,看到 SQL 题目也有自信了,自认为天下数据,为 SQL 皆可取的时候,你应该来挑战下高难度了
现在你的角色是河南郑州大学的学生会主席,所有学生的信息都归你管。别小看了这学生会主席,2017 年郑州大学在校人数总共有7.26万人。此时,你再查找个又白又高的女生,嘿嘿…别想歪咯,数据查询就会很难了。看你急不急!
怎么办呢,SQL 命令你也玩熟了,但每次查个人都要花费个20,30秒,查个交友记录,快则1,2分钟,慢则半天!
此时,你该修炼下 SQL 性能调优了。而 SQL 数据库开发真正的挑战才正式开始!
要研究数据,就要从体系着手,我总结了一下目前正在使用的 SQL Server,它的知识点可以用 20 张思维导图来表达。而 SQL 性能调优正是与这 20 个知识点息息相关。
20图归纳SQL Server知识点
如果你使用的是其他数据库,那么一份详细的数据库体系图,是必不可少的。它就是深夜里的北极星,为你照亮了前进的方向。
再一次,打个广告。我在微信公众号【有关SQL】中分享了这些有关数据库体系,性能调优,高可用高并发的电子书,你可以关注后,回复1024,便可拿到!
当然你跟我一样,对纸质书情有独钟的话,这里推荐几本:
综合类的数据库调优书:
《数据库索引设计与优化》《数据查询优化器的艺术》
Oracle 相关调优书:
《Oracle Concepts》《Oracle 体系架构》《Oracle DBA 手记》(云和恩墨出品都是精品)
MySQL 相关调优书:
《高性能 MySQL》
SQL Server 相关调优书:
《Inside SQL Server 》系列《T-SQL 性能调优密集-基于 SQL Server 2012 窗口函数》
这些书看下来应该会耗掉你2-3年的时间。当然,如果你愿意痛饮咖啡,用007(一周工作7天,每天连续12个小时)的速度来看书,那也可能1年左右就够了。但不建议这么干,身体健康比什么都重要!
当任何超过5秒的SQL,在你手下都变成了秒出时,你可能会昂天长啸,“老子终于天下第一啦”。不过且慢,你别忘记了,你还是会被项目经理催着干活,比如改个字段,改个需求,改处bug等等。此时,你恐怕最需要的是,一个得力的左膀右臂,一个能打的需求分析,更重要的是搞定灵活多变的业务变更,甚至你要挽起袖子,自己盯着业务变更,发布更灵活适配的数据模型。此时数据建模,业务管理,数据治理,数据挖掘,安全审核等等都来了
此时,正是你职业生涯的分水岭。
若你觉得你就是干不了开会,扯皮,来回折腾的活儿,就喜欢指挥机器干活,那就选择偏技术的方向,比如运维DBA,数据库研发。从事这条路线,意味着你要懂的更多的边角料知识,比如操作系统,网络协议,自动化编程,架构设计,分布式计算,云计算等。这些知识资料早已有现成的资料可以参考,只要耐得下心来学,一定有成功出头的那一天。但也极其容易放弃,因为东西实在太多,太杂,而且有些边缘性的学科,一时半会你还用不到,比如网络协议。但如果不懂网络协议,碰到数据库安全的问题,你就容易败下阵来,死的很惨。你的任何一个缺点都会伴随每一次的故障而被无限放大,被很多同事视为毫无战斗力,让你自己都开始怀疑自己,鄙视自己。所以干这行,首先要有一颗强大的心脏,在无数的口诛笔伐之下,你要坚挺自己的信念,不要怀疑自己的判断,丢失基本判断能力。
且运维不仅仅是个智力活,还是个体力活。
白天所有运行在数据库上的应用都好好地跑着,一般不会有大问题,看上去 DBA 很轻松。但是一到晚上,你们的活儿才刚刚开始。有索引重建,磁盘告警了;有 ETL Job 失败,数据库卡住了;有集群节点宕机,需要更换机器了,等等。总之 7*24 的重活,累活都来了,而且是必须赶在天亮业务开始之前修复。有时候,那些夜猫子也很凶悍,大晚上非还要抢点货,点个夜宵啥的。一下单,系统崩溃了,你的美梦也就泡汤了。或许你感冒了,正在休息,不行你得起来;或许你正在电影院看着复联呢,不行,你得回公司。总之,为了工作,为了抢修数据库,你必须第一时间赶赴现场。多少年轻的DBA都曾在高压现场,留下了人生中第一口鲜血。
你说DBA那么累,傻子才选,你走第二条路,扯皮!
恭喜你,你选了一条可以通向公司高层的路。也许是 CTO,也许是CEO。通过做数据运行,数据产品,或者数据分析,你认识了全公司上上下下的大小头目,今天与运营总监吃个饭,明天与生产总监喝个咖啡。总之他们提的一切需求,都希望你全部搞定。你说你团队人手不够,公司不肯招人,跟他们有什么关系?你说你excel就能实现的功能,为什么非要整一套炫酷而无任何实用价值的可视化报表分析软件?他们就想要!你说你这个需求要1个月才能做好,他们拍着你的肩膀说,“你可以的,要相信自己。俩天,顶多两天就能搞定!”
你带着这么多需求回到你的办公室,看着满脸青春的这些小伙小姑娘们,刷着微博,舔着朋友圈,个个脸上洋溢着热焦玛的香气。你好忍心让他们陪你加班到凌晨,还自费打滴滴么!
好不容易,2个shot的星爸爸热焦玛下肚,你来了精神。熬到凌晨2点,连续2,3天回家看不到老婆/老公的笑脸,还给自己打气,一切都是为了家庭。等到交上报告一看,“这里数据改一下,口径要和运营部统一”,“哪里整个版面太丑了,影响公司形象,再修得漂亮一些。还有,这些报表都要加上权限,不能让其他部门人看到。好吧,明天下班前我们再谈”。
好吧,这回你只得厚起脸皮请小朋友们一起改了,晚餐自费交了KFC全家桶,全组加班人员,一律打车报销。你默默的在群里丢了一个又一个红包。收到一个又一个的“老板帅气,老板再来一个,宝宝没抢到”
终于赶在deadline之前做完了,“怎么样,我说你可以的吧,看好你哦。这样,我们昨天几个人会后碰了下,发现你原来的设计也挺好,只是稍微还要再改改;还有,数据需要增加导入导出功能…”
如此反反复复,来来回回的折腾,某天你突然感慨,原来“别人用了一年,真的学到了我十年所用会的SQL技术”。此时,你会坚持自己的选择是对的吗,假如不幸的是,公司投资人撤资了,你所熟悉的环境没了,怎么办?
因此,在这些零零碎碎的项目锻炼中,你能否总结有效的规律,提高自己业务沟通的能力,掌握数据治理的策略,严格把控项目管理的进度,都成了你的必修课。一旦松懈和迷茫,可真是万劫不复!
如果你选的是 DBA,除了各家数据库文档要通读之外,还需要补充云计算相关:
《数据库系统实现》《云计算通俗讲义》《让云落地:云计算服务模式》《云计算架构技术与实践》《Kubernates权威指南》《微服务架构设计模式》
如果你选的是业务设计(无论是运营,产品,数据分析,尤其是数据分析师),那么这些书,肯定是要读一读的
Kimball 的系列书:
《维度建模权威指南》《数据仓库与商业智能宝典-成功设计、部署和维护 DW/BI 系统》
业务场景解决方案:
《计算广告》《推荐系统实战》《决战大数据》《大数据之路-阿里巴巴大数据实践》《企业IT架构转型之道》《设计数据密集型应用》
大数据系列:
《Hadoop 权威指南》《Spark 权威指南》《Hive 编程》《Hive 实战》《Spark 高级数据分析》《Hadoop构建数据仓库实践》
我的公众号【有关SQL】也提供了这些书的电子版。在后台回复1024,便可下载
以上就是基本路线了,能在5-10年搭好这个基础,你定当可以独当一面。
数据库工程师:初、中、高级有什么区别?明明白白有效打工
在数据驱动发展的当下,企业运营离不开数据库,而数据库工程师就是保障其平稳运行的关键力量。他们从新手逐步成长为高手,各阶段工作内容与所需技能差异明显。
刚入行的初级工程师,如同新生,一切从基础学起。
- 安装数据库:要熟练安装 MySQL、Oracle、SQL Server 等常见系统。安装时需依据企业硬件配置(如内存、硬盘空间)及业务数据需求,精细调整参数,为数据库搭建稳定“住所”,保障其顺利运行。
- 备份数据:数据是企业根基,不容有失。初级工程师需制定日常备份计划,利用自带或第三方工具进行全量、增量备份。还得时常模拟数据丢失场景,检验恢复能力,为数据安全筑牢首道防线。
- 监控运行状态:每日借助监控工具,紧盯数据库 CPU 使用率、内存占用、磁盘读写、连接数等指标。一旦发现异常,迅速排查是程序故障还是硬件问题,无法解决时及时上报。
- 协助处理数据问题:业务部门反馈数据查询有误、插入失败等情况,需及时响应。主要排查查询语句语法错误,或是否违反数据规则,如必填项缺失、重复插入唯一标识数据,助力解决数据操作小麻烦。
- 掌握数据库基础知识:熟悉 SQL 基本语句,像 SELECT、INSERT、UPDATE、DELETE 运用自如,理解 JOIN 操作与子查询。明晰数据库存储结构、事务处理机制及索引原理。
- 了解操作系统:至少掌握 Windows 或 Linux 常用命令,知晓文件系统、进程管理知识。当磁盘满、数据库运行慢时,能借助操作系统知识排查、解决问题。
- 具备学习与沟通能力:数据库技术更新迅速,需保持学习热情,主动吸纳新知识。日常与开发、业务部门多交流,精准把握需求,协同处理数据库相关问题。
积累一定经验后,初级工程师进阶为中级,开始承担更复杂核心任务。
- 优化数据库性能:不能仅看表面指标,要深入剖析数据库运行缓慢原因。解读查询执行计划,揪出慢查询,通过创建索引优化查询字段、改写语句提升效率,精细调整数据库参数,让其高效运行。
- 设计复杂数据架构:参与企业数据规划,面对业务增长、数据量攀升,设计扩展性强、可用性高的数据存储方案。如电商大促时,确保订单、用户数据快速存取,顾客能秒查订单;对海量日志数据,合理分区、归档,平衡存储与分析需求。
- 保障数据库不停机:构建高可用架构,如 MySQL 主从复制、Oracle RAC 集群。实时监控集群状态,主库故障时迅速切换至从库,确保业务无感知,最大程度压缩停机时间。
- 开发自动化运维脚本:为摆脱手工操作低效易错弊端,中级工程师用 Python、Shell 等编写脚本。实现定时自动备份、性能数据采集分析自动化、批量创建数据库对象,大幅提升运维效率。
- 精通数据库专业知识:深入洞悉数据库内部原理,熟悉存储引擎底层存储读取方式、锁机制、并发控制,能依据业务巧用数据库特性,如以存储过程优化复杂业务执行,熟练运用高级调优技巧。
- 掌握编程与脚本技能:熟练运用 Python 等编程语言与数据库交互,借助 PyMySQL 等库实现数据迁移、性能数据可视化。具备面向对象编程思维,确保代码规范、易维护。
- 拥有故障排查与解决能力:面对数据不一致、死锁、集群节点数据不同步等复杂故障,能借助数据库日志与系统工具全方位排查,精准定位根源,迅速制定解决方案恢复业务。
- 具备项目管理与协调能力:参与大型项目时,作为数据库专家与多团队紧密协作。合理规划数据库任务,把控进度,协调资源,保障项目高质量交付。
高级数据库工程师堪称行业“大神”,技术精湛且具战略眼光。
- 规划企业数据战略:结合企业业务走向与市场技术趋势,为数据资产谋长远布局。如权衡集中式与分布式数据库优劣,适配企业未来 5 年扩张;规划云数据库迁移路径,降低成本与风险;探索大数据、人工智能与数据库融合,挖掘数据深层价值,助力数字化转型。
- 构建数据库安全体系:全方位打造数据库安全防护网,涵盖网络、系统、应用多层。网络层设防火墙阻拦非法访问;系统层加固服务器;应用层严格审核接入程序。制定严谨用户权限规则,加密敏感数据,定期漏洞扫描、打补丁,确保数据安全。
- 引领技术团队创新:作为技术引领者,带领团队探索前沿技术落地可能。如优化分布式数据库适配复杂业务,引入区块链存关键数据防篡改,开创全新业务模式。同时组织内部培训,分享前沿知识与实战经验,培育创新团队。
- 辅助高层决策:与高层直接沟通,以数据为依据,剖析业务瓶颈。如预测数据量增长对架构冲击,基于分析为领导提供数据库升级、新技术引进投资建议,助力企业合理分配资源,抢占竞争先机。
- 深厚技术功底与前沿视野:时刻关注数据库前沿技术,能敏锐捕捉新技术应用契机。在分布式数据库架构、云原生数据库、智能运维等新兴领域深入研究实践,引领企业技术变革。
- 卓越领导与管理能力:既是技术权威,又是团队管理者。擅长根据成员特长分配任务,激发潜能,提升团队战斗力。沟通协调能力出众,与高层汇报精准高效,跨部门协作顺畅,推动数据战略落地。
- 敏锐业务洞察力:深刻理解企业核心业务,精准定位痛点,巧用数据库技术解决。能从海量数据洞察商机,如分析用户购买行为为市场部门定制精准营销策略,驱动业务创新。
- 危机应对与决策能力:遭遇重大数据事故(如数据中心火灾、黑客攻击)或颠覆性技术变革,能沉着冷静,迅速权衡利弊、果断决策。协调各方资源抢险,降低损失,保障数据业务平稳过渡。
从初级迈向高级,恰似登山,需步步为营。
初级工程师要在日常积累实战经验,多参与小项目,遇问题钻研求解,主动学习进阶知识,逐步提升解决复杂问题能力,为晋升中级铺垫。
中级工程师若想再进一步,需在大型项目担重任,主导关键数据库架构设计、性能攻坚,拓宽技术边界,强化团队协作与领导能力,凭出色项目成果吸引高层关注,争取晋升契机。
高级工程师晋升侧重于战略层面,为企业创造显著数据价值,引领行业技术走向,塑造数据文化,成为高层智囊,实现从技术骨干到战略家的华丽转身。
数据库工程师在不同阶段各显神通,守护企业数据财富。无论你是初涉数据库运维的新手,还是奋进在成长路上的同行,都欢迎来评论区分享故事、困惑。若觉得此文有用,别忘了点赞、收藏、分享,让更多人了解这个超酷职业!评论区等你哟!
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。