到现在,您已经了解了 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 语法的基础,包括 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 限制只返回一行。
测试您的查询
逐行构建查询并频繁运行,随时检查是否可行。一次只添加一部分,也有助于在出问题时避免需要逐行回溯代码。
剖析您的表
要开始执行查询,您必须先理解其中包含的数据要素。先查看整个数据库;然后每次查看若干列。找出分类和数值型字段的取值范围,以便了解表中包含哪些信息。
记录假设清单
编写任何数据相关代码时,都应记录一份假设清单,以便轻松追踪限制与依赖。
维护数据字典
为所用数据要素建立一个集中仓库,包含分析中使用的不同表与字段的描述。可以包括每列的数据类型(字符、整数、货币、日期等)以及该列的简要说明。
当您写完查询,分析并未结束。您仍需理解结果并进行质量检查,确保分析正确。尝试用不同方法实现相同结果,看看是否会有差异——这时行内注释再次派上用场!
在沙盒中练习
学习任何编程语言的最佳方式之一,就是找一个可以“玩耍”的沙盒。您可以测试代码、查看是否运行、修改、再运行,反复练习,直到对编码原理与语法感到熟悉。刚开始时,您或许需要更多引导——不妨找一个有清晰说明和参考答案的项目来核对您的成果。
以下是一些不错的练习资源:
目前就到这里。希望对您有所帮助——请继续练习与学习!
到现在,您已经了解了 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 限制只返回一行。
测试您的查询
逐行构建查询并频繁运行,随时检查是否可行。一次只添加一部分,也有助于在出问题时避免需要逐行回溯代码。
剖析您的表
要开始执行查询,您必须先理解其中包含的数据要素。先查看整个数据库;然后每次查看若干列。找出分类和数值型字段的取值范围,以便了解表中包含哪些信息。
记录假设清单
编写任何数据相关代码时,都应记录一份假设清单,以便轻松追踪限制与依赖。
维护数据字典
为所用数据要素建立一个集中仓库,包含分析中使用的不同表与字段的描述。可以包括每列的数据类型(字符、整数、货币、日期等)以及该列的简要说明。
务必留出时间做数据质量检查
当您写完查询,分析并未结束。您仍需理解结果并进行质量检查,确保分析正确。尝试用不同方法实现相同结果,看看是否会有差异——这时行内注释再次派上用场!
在沙盒中练习
学习任何编程语言的最佳方式之一,就是找一个可以“玩耍”的沙盒。您可以测试代码、查看是否运行、修改、再运行,反复练习,直到对编码原理与语法感到熟悉。刚开始时,您或许需要更多引导——不妨找一个有清晰说明和参考答案的项目来核对您的成果。
以下是一些不错的练习资源:
目前就到这里。希望对您有所帮助——请继续练习与学习!