Logo
Section 1 / 2

课程简介

熟悉本课程内容并了解其先修要求。

导入

课程简介

熟悉本课程内容并了解其先修要求。

关系型数据库管理系统越来越多地支持诸如 JSON 和空间数据等数据格式,以及对这些数据格式的操作。例如,MySQL 从版本 5.7.8 开始支持 JSON。其他数据库管理系统(如 PostgreSQL)也朝着类似的方向发展。这一趋势部分源于 MongoDB 等 NoSQL 数据库的兴起。随着这些新功能的出现,掌握 SQL 高级概念的需求也随之增加。因此,本课程将使用开源的 MySQL 数据库,深入讲解这些高级概念。

  • 表的创建
  • 主键与外键
  • 基础数据查询与插入
  • 聚合与分组
  • 嵌套查询
  • 连接操作
  • 存储过程
...

本课程非常适合已经修读过 SQL 入门课程的学习者。该入门课程的内容大纲也能大致反映本课程所要求的 SQL 知识水平。

即使你已熟悉部分 SQL 高级概念,本课程仍能有效展示这些概念在 MySQL 中的实际应用。你可以将所学知识用于大学课程实践、求职准备,或纯粹出于兴趣探索。

课程概览

在 SQL 的高级概念中,我们将学习一些引人入胜的数据类型,如日期时间、JSON 和空间数据。强大的 SQL 语句,如公共表表达式(CTE)、聚合函数和窗口函数,将帮助我们高效处理这些数据类型。此外,我们还将深入理解 SQL 中的控制流与递归机制。

因此,本课程旨在通过强调相关高级概念,帮助你掌握 SQL 的复杂细节。你可以在 MySQL 环境中直接应用并练习这些复杂的 SQL 技巧,获得动手实践的经验,从而巩固学习成果。本课程注重从实际应用角度理解 SQL,实现理论知识与真实场景之间的无缝衔接。

...
一个根节点被突出显示的二叉树

如果不借助递归这一高级概念,对于任意二叉树来说,解决此类问题将极为困难,甚至不可能。那么,面对下面所示的 BinaryTree 表结构,我们该如何着手?

1-- 创建一个用于存储任意二叉树的表。 2CREATE TABLE BinaryTree 3( 4 id INT unsigned auto_increment, 5 label TEXT, 6 parent INT unsigned, 7 PRIMARY KEY (id) 8); 9 10-- 重建上图所示的二叉树。 11INSERT INTO BinaryTree (label, parent) 12VALUES ('A', NULL), 13 ('B', 1), 14 ('C', 1), 15 ('D', 2), 16 ('E', 2), 17 ('F', 5), 18 ('G', 5); 19 20-- 查看生成的表内容。 21TABLE BinaryTree;
1-- 递归提取二叉树中所有叶节点到根节点的路径。 2WITH RECURSIVE Paths AS ( 3 SELECT JSON_ARRAY(id) AS path 4 FROM BinaryTree 5 WHERE id NOT IN (SELECT DISTINCT parent FROM BinaryTree WHERE parent IS NOT NULL) 6 7 UNION 8 9 SELECT JSON_ARRAY_APPEND(path, '$', parent) AS path 10 FROM Paths 11 JOIN BinaryTree ON path ->> '$[last]' = id 12) 13SELECT JSON_EXTRACT(path, '$[0 to last-1]') AS `从叶节点到根节点的路径` 14FROM Paths 15WHERE JSON_VALUE(path, '$[last]' RETURNING SIGNED) IS NULL;

在创建 BinaryTree 表后,上述递归查询便完成了全部逻辑。目前无需深入理解查询语法细节,只需把握其核心思想即可。我们可以将查询逻辑大致分为三个部分:

  • 从 BinaryTree 表中提取叶节点(第 3–5 行)。
  • 递归查找路径中最近添加节点的父节点(第 9–11 行)。
  • 将计算出的路径格式化为节点 ID 序列(第 13–15 行)。

经过足够多的递归步骤后,最终到达根节点,形成从某个叶节点到根节点的完整路径。以本例为例,从上述 SQL 代码片段的输出可以看出,共有四条从叶节点到根节点的路径,每条路径都是一个以叶节点开始、以根节点结束的节点 ID 数组。

类似这样的示例,本课程还配有交互式代码沙箱、测验和评估题,帮助你获得实战经验。在探索 SQL 高级概念的过程中,我们将避免陷入纯理论讨论,而是聚焦于实际应用。若你希望进一步了解数据库设计基础,可参考 数据库设计基础课程。

MySQL Shell 与 mysql CLI