跳转到主要内容
eLearner.app

互动课程

SQL课程

通过在浏览器中运行的真实 Postgres,用英语从头开始学习 SQL。

01 · 模块 1 — 基本选择

4 节课

基础:从表中读取数据并对其进行过滤。

  1. 1.1SQL简介SQL 是什么、为什么使用它以及数据库是什么样的。~5 min
  2. 1.2选择...从最简单的查询:从表中读取行。~10 min
  3. 1.3使用 WHERE 进行过滤仅选择满足条件的行。~10 min
  4. 1.4使用 ORDER BY 排序将结果按升序或降序排列。~8 min

02 · 模块 2 — 更强大的 SELECT

4 节课

限制、重复数据删除、重命名和计数:您每天使用的工具。

  1. 2.1用 LIMIT 进行限制仅返回前 N 行,例如构建排行榜。~6 min
  2. 2.2具有 DISTINCT 的独特价值从 SELECT 结果中删除重复项。~6 min
  3. 2.3用 AS 重命名为结果中的列和表达式提供更易读的名称。~6 min
  4. 2.4计数和汇总:COUNT、AVG、MAX聚合函数:从多行中获取单个数字。~8 min

03 · 模块 3 — JOIN 和 GROUP BY

4 节课

组合多个表并按组生成报告:每个实际查询的核心。

  1. 3.1连接两个表:INNER JOIN按照不同表中的关系组合行。~12 min
  2. 3.2将所有内容保留在左侧:LEFT JOIN包括在其他表中没有匹配的行。~10 min
  3. 3.3使用 GROUP BY 进行分组计算每个组(例如每个部门)的聚合。~10 min
  4. 3.4过滤组:HAVING仅保留满足聚合条件的组。~8 min

04 · 模块 4 — 实用 SQL

4 节课

在实际工作中发挥作用的工具:列表、范围、NULL 和条件逻辑。

  1. 4.1列表和范围:IN 和 BETWEEN用于“其中之一”和“A 与 B 之间”的紧凑型过滤器。~8 min
  2. 4.2处理 NULL:IS NULL 和 COALESCE毫无意外地识别和处理缺失值。~10 min
  3. 4.3条件逻辑:CASE WHEN直接在 SELECT 中将值转换为类别。~10 min
  4. 4.4一个查询嵌套在另一个查询中:子查询在另一个 SELECT 中使用 SELECT 的结果。~12 min

05 · 模块 5 — 高级 JOIN

4 节课

多表连接、自连接、OUTER、CROSS 和集合操作:像专业人士一样组合数据。

  1. 5.1JOIN 三个或更多表在单个查询中遍历关系链:订单→客户→产品。~12 min
  2. 5.2自连接(Self-JOIN):一个带有自身的表层次结构和内部关系:读取具有两个角色(子角色和父角色)的表。~10 min
  3. 5.3外连接:寻找“间隙”使用 LEFT/RIGHT/FULL OUTER JOIN 查找不匹配的行。~10 min
  4. 5.4并集、相交、例外(和交叉连接)将结果组合为集合:并集、交集、差值和笛卡尔积。~12 min

06 · 模块 6 — 内置函数

4 节课

使用 PostgreSQL 本机函数转换和操作数据:字符串、日期、数字、类型转换。

  1. 6.1字符串函数LOWER、UPPER、LENGTH、串联、SUBSTRING、TRIM、REPLACE、LIKE 和 ILIKE。~12 min
  2. 6.2日期和时间戳函数EXTRACT、DATE_TRUNC、间隔和日期差异。~12 min
  3. 6.3数值函数ROUND、CEIL、FLOOR、ABS、MOD 以及整数与小数除法。~10 min
  4. 6.4CAST 和类型转换使用 `::type` 和 `CAST(... AS ...)` 在类型之间进行转换。~10 min

07 · 模块 7 — 高级分析

4 节课

多步查询 (CTE)、排名和运行总计(窗口函数)、无界层次结构(WITH RECURSIVE)。

  1. 7.1CTE:使用WITH进行多步查询将复杂查询分解为命名步骤以提高可读性和重用性。~12 min
  2. 7.2窗口函数:排名和每组计算ROW_NUMBER、RANK、DENSE_RANK 和 OVER(PARTITION BY …) 用于组内排名。~14 min
  3. 7.3LAG、LEAD 和运行总计将每一行与上一行/下一行进行比较并计算累积和。~12 min
  4. 7.4递归 CTE:任意深度层次结构WITH RECURSIVE 用于遍历类别等层次结构。~14 min

08 · 模块 8 — 写入和修改数据

4 节课

带有约束的 INSERT、UPDATE、DELETE、CREATE TABLE、事务:通过写入关闭循环。

  1. 8.1插入数据:INSERT单行和多行 INSERT、RETURNING 子句,显式选择列。~10 min
  2. 8.2更新和删除:UPDATE 和 DELETE选择性地改变 WHERE,以及为什么忘记 WHERE 是一场灾难。~10 min
  3. 8.3创建表和约束:DDL使用主键、非空、唯一、外键、检查和默认创建表。~12 min
  4. 8.4交易:全有或全无BEGIN、COMMIT、ROLLBACK:使一组操作原子化。~10 min

09 · 模块 9 — 数据结构和 DDL

4 节课

创建和更改表、高级约束、复杂类型和视图。

  1. 9.1高级数据类型和 ENUM数字类型、TEXT 与 VARCHAR、BOOLEAN、UUID 和自定义 ENUM 类型。~10 min
  2. 9.2多重约束和表级约束复合 UNIQUE 和 PRIMARY KEY 约束、高级 CHECK 和外键(ON DELETE CASCADE)。~12 min
  3. 9.3更改结构:ALTER TABLE从现有表中添加、修改和删除列或约束。~10 min
  4. 9.4视图和数据抽象创建视图以简化复杂查询并创建物化视图以提高性能。~12 min

10 · 优化和指标

4 节课

快速查询的艺术:索引、执行计划和数据库优化。

  1. 10.1索引和 B 树创建索引以显着加快大型表的查找查询速度。~15 min
  2. 10.2解释和分析学习阅读数据库执行计划来诊断瓶颈。~15 min
  3. 10.3综合索引和部分索引一次在多个列上使用索引,或仅在数据的特定切片上使用索引。~12 min
  4. 10.4N+1问题臭名昭著的 ORM 性能问题以及在单个查询中克服该问题的原生 SQL 方法。~12 min

11 · 事务和并发

4 节课

安全管理并发数据修改:ACID 事务、锁和隔离级别。

  1. 11.1ACID 事务(开始/提交)保持数据与 BEGIN、COMMIT 和 ROLLBACK 一致,将查询分组到对其他人不可见的单个块中。~15 min
  2. 11.2比赛条件边缘场景:当两个并行数据库员工对同一个用户购物车进行操作时会发生什么情况。~10 min
  3. 11.3锁定并选择更新在读取期间主动锁定行,迫使其他变异线程等待轮到它们。~15 min
  4. 11.4隔离级别通过实现可序列化来突破极限,或者降低到读提交以获得不安全但快速的性能。~12 min

12 · 函数和触发器

4 节课

自动化数据库内的业务逻辑:编写可重用的函数并使用触发器对事件做出反应。

  1. 12.1UDF 和基本 SQL创建您自己的用户定义函数来封装复杂的计算并在每个查询中像宏一样重用它们。~15 min
  2. 12.2使用 PL/pgSQL 的高级逻辑赋予您的函数超能力:变量、if-else 分支和数据库内纯过程风格的循环。~15 min
  3. 12.3触发器简介定义可以立即检查传出(旧)或传入(新)记录的特殊函数。~15 min
  4. 12.4实际触发和审核自动化安全:自动更新“updated_at”日期并神奇地归档已删除的行以确保合规性。~12 min

13 · 窗口函数

4 节课

无需折叠行的高级数据分析:发现 OVER()、PARTITION BY 和分析函数。

  1. 13.1简介和 OVER 子句运行聚合计算(如 SUM 或 AVG),同时保留原始的各个行。~15 min
  2. 13.2使用 PARTITION BY 进行分组在数据内创建逻辑分组(窗口)以应用函数,而不使用 GROUP BY。~15 min
  3. 13.3排名:ROW_NUMBER、RANK 和 DENSE_RANK为结果分配连续的行号和排名,正确处理平局。~15 min
  4. 13.4班次:滞后和领先直接从当前行访问上一行或下一行的值以计算增量和变化。~12 min

14 · CTE 和分层查询 (WITH)

3 节课

使用通用表表达式简化大型查询,并使用递归 CTE 导航无界数据树。

  1. 14.1CTE 简介 (WITH)通过声明临时“虚拟表”,用干净的过程格式替换不可读的嵌套子查询。~12 min
  2. 14.2多个和链式 CTE通过将处理分解为单个WITH语句内的多个连续步骤来降低复杂性。~15 min
  3. 14.3递归 CTE:树形数据通过从自身调用 CTE,可以无限制地浏览管理器层次结构和父子类别。~18 min

15 · PostgreSQL JSON 和 NoSQL

2 节课

通过 JSON 和 JSONB 充分利用关系功能与灵活的文档支持,无需使用外部数据库。

  1. 15.1JSON 和 JSONB 集成将复杂文档存储在列中,并使用箭头运算符查询其字段。~15 min
  2. 15.2JSON 聚合函数使用 json_build_object() 和 json_agg() 在 SQL 中本地动态生成 JSON 文件或对象数组。~15 min