跳至主要内容

如何成为 SQL 专家

这是一份关于更高级 SQL 概念与语法的全面指南。
Kelsey McNeillie
Kelsey McNeillie

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

到现在,您已经了解了 SQL 的种种优势,并且是一名经验丰富的数据分析师、数据工程师或数据科学家。您了解不同的 SQL 方言,熟练导入 SQL 数据,也能流畅编写基础 SQL 查询。那么,是否想把技能再提升一个层级?方法在这里。

中级 SQL 概念

了解 SQL 子语言

SQL 中有四种主要子语言——它们对应不同的任务,但都属于 SQL 语言的一部分:

1. DDL(数据定义语言)

这些语句用于创建表和数据库,并定义字段属性或表属性。此类命令包括 CREATE、ALTER 和 DROP。

2. DML(数据操纵语言)

此类语句用于更新数据,或在表中添加、移除数据。包括 UPDATE、DELETE 和 INSERT。

3. DCL(数据控制语言)

这些 SQL 语句用于控制谁可以访问数据。此类命令包括 GRANT 和 REVOKE。

4. TCL(事务控制语言)

用于提交数据与恢复数据。COMMIT 和 ROLLBACK 属于此类。

5. DQL(数据查询语言)

用于从 SQL 服务器检索数据。SELECT 语句属于此类。

这些看起来也许有些吓人,但别担心!SQL 是一种非常优雅、直观的语言,尤其因为它并不用于创建数据可视化——它的核心是创建表、组织与清洗数据,并学会提出恰当的问题。

Union 与 Join

很多时候,您需要的数据不会集中在一个巨大的表里,而是分散在多个表中。借助 SQL,您可以把这些表合并起来,把所需数据汇总到同一处。由于 UNION 和 JOIN 都是针对表的操作,它们写在 FROM 子句中。

UNION 基本上是把两个列完全相同的表上下堆叠。这对按月、季度或年度拆分的销售交易数据非常有用。

常用的 JOIN 有多种——Inner、Outer、Left 和 Exception。简单来说,它们会从被连接的表中返回不同组合的行。

更多资源:

中级 SQL 语法

到现在,您已了解SQL 语法的基础,包括 SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY 和 LIMIT 等函数。您熟悉数据库设计,也明白SQL 的执行顺序——查询的书写方式和处理方式并不相同。

现在是学习更高级语法的时候了。

聚合:SELECT、GROUP BY 与 HAVING

与 Excel 类似,您可以使用 SQL 进行求和、平均值、最大值、最小值和计数等聚合。聚合在初步探索数据、进行分析或向受众展示时都很有用。您可以在 SELECT 子句中进行简单聚合,或者通过 GROUP BY 把数据做成类似 Excel“数据透视表”的效果。

在 SELECT 中使用聚合将仅返回一个简单计算结果,例如,如果使用 SUM(column_name),查询会返回一个值,表示该列所有数值相加的总和。

您也可以按类别数据进行聚合。例如,如果有一个全国水果销售表,您可以按产品类型汇总销售额,或按州计算平均价格。这需要使用 GROUP BY 子句,位置在 WHERE 之后。您需要指定用于“分组”的分类列,并在 SELECT 中同时包含这些列。

当数据已按分类变量整齐分组并配对聚合后,您可以通过 HAVING 子句(位于 GROUP BY 之后)对这些聚合进行筛选。如果您想进一步收窄查询范围,例如仅选择平均销售总额超过 $100,000 的水果店,这就很有用。

更多资源:

CASE 语句

SQL 的 CASE 语句类似于 Excel 的 IF() 函数——如果某列中的数据满足某个条件,则返回“这个”。当需要将定量数据重新归类为类别型数据时非常有用,例如把一组值划分为“高”“中”“低”。CASE 语句写在 SELECT 子句中。

另见:

子查询

子查询有多种用法,但通常出现在 FROM 或 WHERE 子句中。它们会从您的数据中创建一个小型的临时表,随后您可以把它当作新表,以不同方式继续查询。

另见:

日期与时间

与许多其他数据语言一样,处理日期与时间可能比较棘手。有时日期像“字符串”一样起作用;有时它们可被视作实际日期,SQL 语法可以将其分解为月份、年份等单位。由于实现方式很多,这些函数被视为更高级的 SQL 语法。

另见:

提升您的 SQL 思维方式

可遵循的 SQL 指南

在真实业务中,业务问题往往难以被整齐地转换为 SQL 查询。因此,在动手写任何一行代码之前,您需要仔细评估需求。以下是在练习 SQL 时可以遵循的一些良好做法。

先将业务问题改写成注释

使用代码注释先“头脑风暴”您的查询——您要回答的问题是什么?需要关注哪些部分与要素?这将指引您的 SQL 查询。

注释有两种形式:行内和多行。

-- 行内注释使用两个连字符,写在一行代码中——适合简短的快速说明

/* 多行注释长这样。

     适合创建说明查询目的、作者等信息的“横幅” */

勾勒您的查询

在开始键入之前,先想清楚查询需要哪些组成部分。您一定需要 SELECT 和 FROM——但还需要什么?是否需要用 WHERE 筛选数据?是否需要使用聚合函数?

了解实现目标的不同路径

在可能的情况下,尝试用多种方法完成同一任务。这样,您可以自我校验,验证是否能得到相同结果。比如,您既可以在语句中使用 MAX() 函数找到某列的最大值,也可以先用 ORDER BY 排序,再用 LIMIT 限制只返回一行。

测试您的查询

逐行构建查询并频繁运行,随时检查是否可行。一次只添加一部分,也有助于在出问题时避免需要逐行回溯代码。

剖析您的表

要开始执行查询,您必须先理解其中包含的数据要素。先查看整个数据库;然后每次查看若干列。找出分类和数值型字段的取值范围,以便了解表中包含哪些信息。

记录假设清单

编写任何数据相关代码时,都应记录一份假设清单,以便轻松追踪限制与依赖。

维护数据字典

为所用数据要素建立一个集中仓库,包含分析中使用的不同表与字段的描述。可以包括每列的数据类型(字符、整数、货币、日期等)以及该列的简要说明。

务必留出时间做数据质量检查

当您写完查询,分析并未结束。您仍需理解结果并进行质量检查,确保分析正确。尝试用不同方法实现相同结果,看看是否会有差异——这时行内注释再次派上用场!

在沙盒中练习

学习任何编程语言的最佳方式之一,就是找一个可以“玩耍”的沙盒。您可以测试代码、查看是否运行、修改、再运行,反复练习,直到对编码原理与语法感到熟悉。刚开始时,您或许需要更多引导——不妨找一个有清晰说明和参考答案的项目来核对您的成果。

以下是一些不错的练习资源:

目前就到这里。希望对您有所帮助——请继续练习与学习!

主题