《SQL 从入门到精通》专栏目录

  • 第 01 篇 和数据打交道的你,一定要学会 SQL
  • 第 02 篇 在 SQL 的世界里一切都是关系
  • 第 03 篇 使用 SELECT 语句初步探索数据库
  • 第 04 篇 通过查询条件实现数据过滤
  • 第 05 篇 如何使用 SQL 语句进行模糊查找?
  • 第 06 篇 利用 ORDER BY 对数据进行排序显示
  • 第 07 篇 如何实现排行榜和前端分页效果
  • 第 08 篇 什么是函数?如何利用函数提高数值计算的效率?
  • 第 09 篇 SQL 常见函数之文本数据处理
  • 第 10 篇 日期和时间的存储与格式转换
  • 第 11 篇 如何为 SQL 增加 IF-THEN-ELSE 逻辑,并且实现行列转换?
  • 第 12 篇 轻松完成数据报表中的汇总分析
  • 第 13 篇 按照部门或者职位进行分组统计
  • 第 14 篇 实战案例:世界银行全球 GDP 数据分析
  • 第 15 篇 小心 SQL 中的空值陷阱!
  • 第 16 篇 如何同时查询多个表中的相关数据?
  • 第 17 篇 子查询:多表查询的另一种方式
  • 第 18 篇 你知道表也能进行加减运算吗?
  • 第 19 篇 将表当作一个变量,实现递归调用和层次遍历
  • 第 20 篇 销售数据的多维度交叉分析
  • 第 21 篇 高级报表之移动分析和累计求和
  • 第 22 篇 高级报表之分类排名和环比/同比分析
  • 第 23 篇 分析股票 K 线图与检测可疑的银行转账
  • 第 24 篇 什么是 ER 图,如何进行数据库规范化设计?
  • 第 25 篇 SQL 支持哪些数据类型,使用时如何进行选择?
  • 第 26 篇 使用 DDL 管理数据库中的对象
  • 第 27 篇 使用 DML 执行数据的增删改合
  • 第 28 篇 为什么数据库事务如此重要?
  • 第 29 篇 索引一定能提高性能吗?
  • 第 30 篇 视图有哪些优缺点,什么时候使用视图?
  • 第 31 篇 该不该使用存储过程封装业务接口?
  • 第 32 篇 如何通过触发器记录和审核用户的操作?
  • 第 33 篇 什么是执行计划,如何查看执行计划?
  • 第 34 篇 了解常见 SQL 查询优化技巧
  • 第 35 篇 使用 SQL 处理 NoSQL 数据
  • 第 36 篇 在 Python 中运行 SQL 进行数据分析
  • 第 37 篇 在 Java 中使用 SQL 执行增删改查
  • 第 38 篇 动态 SQL 语句与防止 SQL 注入
  • 第 39 篇 结束语:SQL 编程的道与术

专栏背景

1970 年 IBM 的 E.F. Codd 博士发表了论文《A Relational Model of Data for Large Shared Data Banks》并创建了关系模型,通过一个简单的数据结构(关系,也就是二维表)来实现数据的存储。

1979 年 Relational Software, Inc.(后来改名为 Oracle)发布了第一个商用的关系数据库产品。随后出现了大量的关系数据库管理系统,包括 MySQL、SQL Server、PostgreSQL 以及大数据分析平台 Apache Hive、Spark SQL、Presto 等。至今,关系数据库仍然是数据库领域的主流。

以下是著名的数据库系统排名网站 DB-Engines 上各种数据库的排名情况,关系数据库占据了绝对的优势。

SQL

SQL(Structured Query Language,结构化查询语言)是访问和操作关系数据库的标准语言。只要是关系数据库,都可以使用 SQL 进行访问和控制。SQL 同样由 IBM 在 1970 年代开发,1986 年成为 ANSI 标准,并且在 1987 年成为 ISO 标准。SQL 标准随后经历了多次修订,最新的版本为 SQL:2019,增加了多维数组(MDA)的支持。下图是 SQL 标准的发展历程和主要的新增功能。

对于 SQL 标准,人们最熟悉的就是 SQL92 或者 SQL99。但实际上经过多次修改,SQL 早已不是 40 年前的 SQL;如今它已经相当完备,功能强大,并且能够同时支持关系模型和非关系(XML、JSON)模型。具体来说,最新的 SQL 标准包含 10 个部分:

  • ISO/IEC 9075-1 信息技术 – 数据库语言 – SQL – 第1部分:框架(SQL/框架)
  • ISO/IEC 9075-2 信息技术 – 数据库语言 – SQL – 第2部分:基本原则(SQL/基本原则)
  • ISO/IEC 9075-3 信息技术 – 数据库语言 – SQL – 第3部分:调用级接口(SQL/CLI)
  • ISO/IEC 9075-4 信息技术 – 数据库语言 – SQL – 第4部分:持久存储模块(SQL/PSM)
  • ISO/IEC 9075-9 信息技术 – 数据库语言 – SQL – 第9部分:外部数据管理(SQL/MED)
  • ISO/IEC 9075-10 信息技术 – 数据库语言 – SQL – 第10部分:对象语言绑定(SQL/OLB)
  • ISO/IEC 9075-11 信息技术 – 数据库语言 – SQL – 第11部分:信息与定义概要(SQL/Schemata)
  • ISO/IEC 9075-13 信息技术 – 数据库语言 – SQL – 第13部分:使用 Java 编程语言的 SQL 程序与类型(SQL/JRT)
  • ISO/IEC 9075-14 信息技术 – 数据库语言 – SQL – 第14部分:XML 相关规范(SQL/XML)
  • ISO/IEC 9075-15 信息技术 – 数据库语言 – SQL – 第15部分:多维数组(SQL/MDA)

为了便于学习,通常将主要的 SQL 语句分为以下几个类别:

  • DQL(data query language),数据查询语言;也就是 SELECT 语句,用于查询数据库中的数据和信息。
  • DML(data manipulation language),数据操作语言;用于对表中的数据进行增加(INSERT)、修改(UPDATE)、删除(DELETE)以及合并(MERGE)操作。
  • DDL(data definition language),数据定义语言;主要用于定义数据库中的对象(例如表或索引),包括创建对象(CREATE)、修改对象(ALTER)和删除对象(DROP)等。
  • TCL(transaction control language),事务控制语言;用于管理数据库的事务,主要包括启动一个事务(BEGIN TRANSACTION)、提交事务(COMMIT)、回退事务(ROLLBACK)和事务保存点(SAVEPOINT)。
  • DCL(data control language),数据控制语言;用于控制数据的访问权限,主要有授权(GRANT)和撤销(REVOKE)。

SQL 是一种标准,不同厂商基于 SQL 标准实现了自己的数据库产品,例如 Oracle、MySQL 等。这些数据库都在一定程度上兼容 SQL 标准,具有一定的可移植性。但另一方面,它们都存在许多专有的扩展,没有任何一种产品完全遵循标准。

NoSQL

随着互联网的发展和大数据的兴起,出现了各种各样的非关系(NoSQL)数据库。NoSQL 代表 Not only SQL,表明它是针对传统关系数据库的补充和升级,而不是为了替代关系数据库。

NoSQL 数据库主要用于解决关系数据库在某些特定场景下的局限性,比如海量存储和水平扩展;但同时也会为此牺牲某些关系数据库的特性,例如对事务强一致性的支持和标准 SQL 接口。因此,这类数据库主要用于对一致性要求不是非常严格的互联网业务。常见的 NoSQL 数据库可以分为以下几类:

  • 文档数据库,例如 MongoDB(MongoDB 4.0 增加了多文档事务的特性);
  • 键值存储,例如 Redis;
  • 全文搜索引擎,例如 Elasticsearch;
  • 宽列存储数据库,例如 Cassandra;
  • 图形数据库,例如 Neo4J。

另一方面,关系数据库也在积极拥抱变化,添加了许多非关系模型(XML 和 JSON)支持。以最流行的开源关系数据库 MySQL 为例,最新的 MySQL 8.0 版本增加了 JSON 文档存储的支持,并且推出了一个新的概念:NoSQL + SQL = MySQL。以下是 MySQL 官方的宣传图。

Oracle、SQL Server 以及 PostgreSQL 同样也进行了类似的扩展,可以支持原生的 XML 和 JSON 数据,并且提供了许多标准的 SQL 接口。

NewSQL

中国有句古话:天下大势,合久必分,分久必合。数据库领域的发展也印证了这一规律,为了同时获得关系数据库对于事务的支持和标准的 SQL 接口,以及非关系数据库的高度扩展性和高性能。如今市场上已经出现了一类新型关系型数据库系统:NewSQL 数据库。

比较有代表性的 NewSQL 数据库包括 Google Spanner、VoltDB、PostgreSQL-XL 以及国产的 TiDB。这类新型数据库是数据库领域最新的发展方向,有志于在数据库行业发展的同学可以加以关注。

为什么要学习 SQL?

让我们回到专栏的主题,为什么要学习 SQL 呢?简单来说,因为有用。下图是 Stack Overflow 在 2019 年关于最流行编程技术的调查结果。

作为数据处理领域的专用语言,SQL 排在了第三位,超过 50% 的开发者都需要使用到 SQL。那么,具体什么职位需要使用 SQL,用 SQL 来做什么?

  • 数据分析师:显然这是一群依靠分析数据为生的人,必不可少需要与数据库打交道,SQL 是他们必备技能之一。
  • 数据科学家:与数据分析师一样,数据科学家的日常工作也离不开数据的处理,不可避免需要使用 SQL。
  • 数据库开发工程师:这个职位基本就是写 SQL 代码,实现业务逻辑。
  • 数据库管理员:也就是 DBA,主要职责是管理和维护数据库,除了会写 SQL,还需要负责审核开发人员编写的 SQL 代码。
  • 后端工程师:后端开发必然需要涉及数据的处理,需要通过 SQL 与数据库进行交互。
  • 全栈工程师:既然是全栈,自然包括后端数据的处理。
  • 移动开发工程师:作为一名移动开发工程师,一定对 SQLite 数据库不会陌生,它是在移动设备中普遍存在的嵌入式数据库。
  • 产品经理:产品经理需要了解产品的情况,而数据是最好的说明方式,了解 SQL 非常有利于对产品的把握。

SQL 不但应用广泛,而且简单易学。因为它在设计之初就考虑了非技术人员的使用需求,SQL 语句全都是由简单的英语单词组成,使用者只需要声明自己想要的结果,而将具体的实现过程交给数据库管理系统。

学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何,SQL 都是 IT 从业人员不可或缺的一项技能!

专栏内容

本专栏主要讨论 SQL 编程技术和思想,分为四个部分:基础篇、进阶篇、开发篇以及扩展篇。

第一部分:基础篇。首先介绍数据库领域的最新发展,回顾数据库和 SQL 的核心概念;然后讨论如何使用 SELECT 语句查询数据,过滤数据、对结果进行排序、实现排行榜与分页效果;同时还会介绍常见的 SQL 函数、CASE 表达式以及数据的分组汇总;最后是一个分析世界银行全球 GDP 数据的实战案例。

第二部分:进阶篇。主要包括 SQL 数据分析的一些高级功能:空值的问题、多表连接查询、子查询、集合运算、通用表表达式与递归查询、高级分组与多维度交叉分析、窗口函数与高级报表以及基于行模式识别的数据流分析等。

第三部分:开发篇。讲述数据库设计与开发过程中涉及到的一些实用知识。包括如何设计规范化的数据库、如何管理数据库对象、如何对数据进行增删改、数据库事务的概念、索引的原理;同时还会介绍视图的概念、如何使用存储过程实现业务逻辑以及如何利用触发器实现用户操作的审计。

第四部分:扩展篇。我们将分析 SQL 语句的执行计划与查询语句的优化、使用 SQL 处理 JSON 数据、在 Python 和 Java 中执行 SQL 语句,并介绍动态语句和 SQL 注入攻击的预防。在专栏的最后,我们将探讨一下 SQL 编程中的道与术。

专栏寄语

希望大家能够通过本专栏的学习,在掌握 SQL 技能的同时能够理解对面向集合的编程思想,并且在将来的工作中学以致用。

学习是一个输入再输出的过程,因此特地创建了本专栏的微信交流群,让我们一起学习一起成长。入群方式请扫描第 3 篇末尾的微信二维码,欢迎你来!

第 01 篇 和数据打交道的你,一定要学会 SQL相关推荐

  1. 跟数据打交道的人都得会的这8种数据模型,满足工作中95%的需求

    "小王,你把这些用户数据分析下,分别打个价值标签给我,我们制定一下618的营销活动." 这时候你拿着用户数据一脸懵?打标签?从哪几个维度?脑海里仿佛有很多想法,但又不知道从何做起. ...

  2. 阿里数据产品经理工作(总结篇):数据PD,做牛做马

    送给真正的互联网人一顿干货早餐 [小咖导读]文自 听雨-悟禅 博客,PD(指产品经理,下同)本身就是在做牛做马,关系圈异常复杂.数据PD也不例外.而且打交道的人更多.以下是作者用PPT绘制的数据产品经 ...

  3. datagrid出现相同两组数据_stata 数据操作基础知识:以一篇论文数据操作为例

    stata 数据操作基础知识:以一篇论文数据操作为例 上节回顾及问题 统计学学习大图景 数据描述 分位数回归 存在的问题: 1.学了就要多使用,哪怕生搬硬套也要多用 2.时间序列的方法,大家可以操作, ...

  4. EXCEL中与数据库打交道的好工具-JXL

    EXCEL中与数据库打交道的好工具-JXL    经常要将EXCEL和数据库打交道的话,建议推荐使用一个好的开源工具JXL,下面小结如何将其EXCEL数据导入到数据库, 以及如何把数据库的数据导出到E ...

  5. 如何在企业中从0-1建立一个数据/商业分析部门?

    知乎上有个问题:如何从0-1建立一个数据部门 背景:国内大型集团,非互联网.高层有想法建立一个数据部门支持企业的精细化运营,我想了解下一个数据部门如何从0-1建立呢?并且"建立成功" ...

  6. 【MySQL基础篇】数据导出导入权限与local_infile参数

    [MySQL基础篇]数据导出导入权限与local_infile参数 问题背景 数据导出测试 创建测试库(在主库进行) 测试数据导出(在从库进行) 测试数据导入(在主库进行) 问题背景 MySQL高可用 ...

  7. 使用MapReduce统计一篇微博数据的点赞次数,并且输出前五个最高的点赞数量。

    一个MapReduce写了一个下午,调试运行了不下20次了,我靠,真是闹心,差点整崩溃,在最绝望的时候给出了最好的答案. 需求: 使用MapReduce统计一篇微博数据的点赞次数,并且输出前五个最高的 ...

  8. 高效办公——Excel表格-01篇(截取、分列、重组等简单操作)

    高效办公--Excel表格-01篇(截取.分列.重组等简单操作) 1. Excel截取.拼接常用函数 1.1 截取字符串 1.2 拼接字符串 1.3 2. Excel智能化 2.1 Excel智能填充 ...

  9. 【数据分析】如何在企业中从0-1建立一个数据/商业分析部门

    前言 知乎上有个问题:如何从0-1建立一个数据部门 背景:国内大型集团,非互联网.高层有想法建立一个数据部门支持企业的精细化运营,我想了解下一个数据部门如何从0-1建立呢?并且"建立成功&q ...

最新文章

  1. Mysql中表名作为参数的问题
  2. Git学习笔记:标签管理以及GItHub
  3. VTK:几何对象之ParametricSuperEllipsoid
  4. mysql日期格式化季度_mysql中常用日期比较与计算函数
  5. Spring Data JPA的持久层
  6. 【Python学习】 - 超详细的零基础Pandas学习(附Python数据分析与应用课本第四章实训答案)
  7. Linux环形缓冲区原理
  8. 软件测试基础:自动化测试、安全测试、性能测试
  9. oracle11g查看数据库名称,oracle11g系列 事物和常用数据库对象
  10. C语言结构体,共用体所占字节数计算
  11. Excel 如何合并工作簿中多个工作表
  12. php phpunit selenium,PHPUnit和Selenium
  13. My summery
  14. ascii码中的A的代码是什么?
  15. PTA练习:谁先倒.(C语言)
  16. 图片在未加载完成前显示“加载中...”
  17. 风很大的PMP证书真有这么厉害?这是被腾讯/华为招聘时所提到过的证书
  18. 外贸盒子H96MAX_S905X3_1000M-唯一默认中文版-安卓9.0-官改精简线刷包及教程-202208
  19. Window服务器新手建站图文教程
  20. 20、【易混淆概念集】-第十二章 采购甲乙双方的职责 合同类型 采购工作说明书 索赔管理 采购管理

热门文章

  1. 00-有刷直流电机控制理论知识
  2. Silvaco 学习笔记 3——物理模型:迁移率模型
  3. 技术分享| 音视频与微信小程序互通实践
  4. 【总计】国科大英语Unit1
  5. 传指针和传指针引用的区别(指针和引用的区别)
  6. 开卷有益KingReader V7.36 官方安卓版
  7. 大数据:数据采集平台之Splunk Forwarder
  8. Unity更改默认编辑器
  9. 矩阵是否正定/负定、半正定/半负定的判断
  10. 【Linux】C++项目实战-高并发服务器详析