MySQL不看视频 · SSH 实操

9 个单元 · 21 节

MySQL 数据库入门 · 不看视频,SSH 实操(全 9 单元)

21 节 · 合计约 480 分钟 · 73 个步骤

怎么用:左边(或上方“目录”)选一节,电脑分屏时网页放一侧、SSH 窗口放另一侧,照着每步的命令敲;输出只是给你对答案,不要当命令粘贴。

全部内容不依赖视频;不需要登录,也不会在网页里执行任何命令。

前 50 集覆盖核对表 →哪些集已经有正文、哪些还在补,逐集可查

下面的单元按学习顺序排列:每个单元用自己的一张练习表,前一单元的步骤做完再进入下一单元;每个单元的勾选进度分别记录,互不覆盖。

第一单元 · 连接、建表、查询

先连上,再建一张自己的表

预计 55 分钟 · 3 节 · 17 个步骤 · 零基础,不要求看过视频

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/17

  1. 01连上服务器,认清两个提示符从 PowerShell 登录服务器,执行 mysql-learning 进入 mysql>,确认当前库,区分退出 MySQL 与退出 SSH。15 分钟 · 5 步0/5
  2. 02建第一张表,放进 5 行检查 lesson01_students 不存在,建表并插入 5 行,用 DESC 和 SELECT 核对;处理重复建表、重复插入和重新开始练习。20 分钟 · 6 步0/6
  3. 03查询、筛选、排序选列、WHERE 条件(文本、NULL、LIKE、BETWEEN、IN)、ORDER BY 与 LIMIT;先预测结果再运行,最后做 5 项单元验收。20 分钟 · 6 步0/6
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用(Win10/11 自带 OpenSSH 客户端)
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 不需要安装 MySQL、DBeaver、宝塔或其他面板
范围 本单元讲什么、不讲什么

包含

  • SSH 登录与 mysql-learning 入口
  • 三种提示符与退出层级
  • CREATE TABLE / DESC / INSERT / SELECT
  • WHERE 比较、IS NULL、LIKE、BETWEEN、IN
  • ORDER BY、LIMIT
  • 重复执行、断开重连与常见错误码

不包含

  • UPDATE / DELETE 的系统讲解(只在重复练习时用 DELETE 清理自有行)
  • 聚合、分组、多表、子查询、索引、事务
  • DCL、创建数据库或全局用户
  • 图形客户端与网页面板

第 3 节末尾有明确停止点;下一单元仍使用 lesson01_students,计划覆盖 UPDATE/DELETE、更多类型与简单统计,本轮不提供空链接。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,35/35 项检查通过。

第二单元 · 精准修改、安全删除、基础汇总

改一行,删一行,再算几个数

预计 60 分钟 · 3 节 · 16 个步骤 · 需要会用 mysql> 敲 SQL;没看过第一单元也能从本节开始

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/16

  1. 04先查一遍,再改一行建第二单元自己的表 lesson02_students(6 行),用同一段 WHERE 先 SELECT 再 UPDATE,读懂 Rows matched 与 Changed 的区别,并处理列名写错(1054)。18 分钟 · 7 步0/7
  2. 05删一行,以及删错了还能不能退回来先 SELECT 再按主键 DELETE 掉 id = 6;讲清 autocommit 下删除不可撤销、START TRANSACTION + ROLLBACK 能退、COMMIT 之后不能退,以及断线时未提交事务作废。20 分钟 · 2 步0/2
  3. 06五个汇总函数,加上按城市分组COUNT / SUM / AVG / MIN / MAX 与 WHERE 组合,GROUP BY 分组、ORDER BY 按汇总值排序、HAVING 筛组;看清 1064(WHERE 里写 COUNT)与 1140(未分组裸列)的原因。22 分钟 · 7 步0/7
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 能进到 mysql> 并在 itcast 里执行 SQL(不会的话先读第一单元第 1 节)
  • 不需要安装 MySQL、DBeaver、宝塔或其他面板
范围 本单元讲什么、不讲什么

包含

  • UPDATE 的 WHERE 选择、先 SELECT 后修改的习惯
  • Rows matched 与 Changed 的区别,0 rows matched 不等于报错
  • 1054 列名写错的处理
  • DELETE 必须先 SELECT、必须带 WHERE 主键
  • autocommit、START TRANSACTION、ROLLBACK、COMMIT 的最小用法与三个前提
  • COUNT / SUM / AVG / MIN / MAX、ROUND
  • GROUP BY、按汇总值 ORDER BY、HAVING 与 WHERE 的分工
  • 1064、1140 两个聚合相关错误

不包含

  • 隔离级别、锁、保存点、分布式事务
  • TRUNCATE、DROP TABLE、DROP DATABASE 作为练习手段(只在文字里警告)
  • 多表连接、子查询作为主路径(第 6 节只在核对时用过一次简单子查询,可选)
  • COUNT(列) 与 COUNT(*) 在 NULL 上的区别(下一单元)
  • 索引、执行计划、性能调优
  • 建库、建用户、授权或任何全局设置

三节各有明确的「做到这里」停止点;第 6 节末尾给出下一单元方向(多人分组、COUNT(列) 与 NULL、排序细节),本轮不提供空链接。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,33/33 项检查通过。

第三单元 · 空值、多人分组、排序细节

两个 COUNT 不一样:空值、分组、排序

预计 22 分钟 · 1 节 · 7 个步骤 · 会在 mysql> 里写 SELECT 与 GROUP BY;没做过前两个单元也能从本节开始

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/7

  1. 07两个 COUNT 不一样:空值、分组、排序建本节自己的表 lesson03_students(8 行、3 处空值),看清 COUNT(*) 与 COUNT(列) 差在哪、平均值按几个人算;让空值单独成组,用 HAVING 筛出“一个城市两个人”的组;最后核对 NULL 在升序/降序中的位置、多列排序,以及中文排序由列的排序规则决定、不是拼音。22 分钟 · 7 步0/7
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 会在 mysql> 里执行 SELECT 与 GROUP BY(不会的话先读第 6 节)
  • 不需要安装 MySQL、DBeaver、宝塔或其他面板
范围 本单元讲什么、不讲什么

包含

  • COUNT(*) 与 COUNT(列) 在 NULL 上的区别,NULL 不参与聚合(讲义 2.6.4)
  • AVG 的分母是 COUNT(列),与 SUM/COUNT(*) 的口径差异
  • GROUP BY 分组、NULL 单独成组,HAVING 筛组,WHERE 与 HAVING 的分工(讲义 2.6.5)
  • 组内同时看 COUNT(*) / COUNT(列) / AVG(列)
  • ORDER BY 单列与多列,NULL 在升序/降序中的位置(讲义 2.6.6)
  • 中文排序由列的排序规则决定(本表下上海在北京前),不等于拼音顺序
  • 1054 / 1055 / 1111 三个报错的读法
  • 书写顺序与执行顺序的最小对照(讲义 2.6.9,接第 6 节)

不包含

  • 多表连接、子查询、UNION(课程后面的部分,下一节方向)
  • COLLATE 转换、拼音排序函数、自定义排序规则
  • 索引、执行计划、性能调优
  • 事务、锁、隔离级别
  • UPDATE / DELETE(第二单元已讲,本节不重复)
  • 建库、建用户、授权或任何全局设置

第三单元只有这一节,末尾有「做到这里」停止点;下一节方向(把两张表对起来看)只写方向,不提供空链接。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,17/17 项检查通过。

第四单元 · 概念、类型、改表、分页

把前面缺的补上:概念、类型、改表、分页

预计 98 分钟 · 4 节 · 8 个步骤 · 能在 mysql> 里写 SELECT 和 CREATE TABLE;没读过前三个单元也能从本节开始

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/8

  1. 08先补概念:库、表、数据模型、SQL 分几类不建表、不改数据,只用只读语句把四层概念摆正:服务器上的库、库里的表、表的行与列;再用系统库的两张表看清“两张表靠一个相同的值对上”的数据模型;最后把 SQL 分成 DDL/DML/DQL/DCL 四类,并说明库这一层为什么只认识不练。18 分钟 · 3 步0/3
  2. 09字段类型怎么选:数字、文字、日期建 lesson09_types(6 行、8 列),用真实输出看清三件事:DECIMAL 精确而 DOUBLE 是近似值;CHAR 会补空格而 VARCHAR(20) 的 20 是字符不是字节;DATE / DATETIME / TIMESTAMP 各记什么、TIMESTAMP 为什么只到 2038。最后给出“先问精确、再问长度、再问时分秒”的选型顺序。24 分钟 · 1 步0/1
  3. 10改表结构:加列、改类型、换名、删列在 lesson10_alter 上把 ALTER TABLE 的四个动作各走一遍:ADD COLUMN ... AFTER 加列、MODIFY 改类型并补齐 NOT NULL/DEFAULT、CHANGE 换列名、DROP COLUMN 删列;再用 RENAME TABLE 改名、用一张临时表演示 DROP TABLE,每一步都用 DESC 和一条 SELECT 核对数据没丢。22 分钟 · 1 步0/1
  4. 11先补分页的起始行,再做五题案例建 lesson11_basic(8 行、城市与性别故意重复),先用别名把列和表达式改成能读的表头,再用 COUNT(*)/COUNT(列)/COUNT(DISTINCT 列) 与 SELECT DISTINCT(单列、多列)实测“几行、几个不同值、哪些组合”;然后建 lesson11_dql(12 行)把分页算清楚:LIMIT 偏移量,条数、起始索引 =(页码−1)×每页条数、CEIL 总页数、越界空集、分页为什么必须有能唯一确定顺序的 ORDER BY;最后用五道原创题把 IN、BETWEEN+三下划线 LIKE、按性别分组计数、多列排序、排序后 LIMIT 各用一次。34 分钟 · 3 步0/3
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 会在 mysql> 里执行 SELECT 与 CREATE TABLE(不会的话先读第 2、3 节)
  • 不需要安装 MySQL、DataGrip、DBeaver 或任何面板
范围 本单元讲什么、不讲什么

包含

  • 基础查询的别名与去重:AS 别名(列、表达式;GROUP BY / ORDER BY / HAVING 可用而 WHERE 不可用)、SELECT *、DISTINCT 单列/多列、COUNT(*) / COUNT(列) / COUNT(DISTINCT 列) 的差别(part 15;讲义 2.6.1–2.6.2 p38–41)
  • 库/表/行/列与关系模型,两表靠相同的值对上(part 2、4;讲义 1.1 p1、1.2.6 p13–14)
  • 服务端/客户端/端口三件事的最小说明(part 3;讲义 1.2.1–1.2.5 p2–13,不重做安装)
  • SQL 四类分类与四条通用写法(part 5;讲义 2.1/2.2 p15)
  • 库这一层的边界:知道有建库/删库这件事,但不练、不给可复制语句(part 6;讲义 2.3.1 p15–17)
  • 数据类型:INT / DECIMAL / DOUBLE、CHAR / VARCHAR、DATE / DATETIME / TIMESTAMP 的选型与实测差异(part 8;讲义 2.3.2.2–2.3.2.3 p20–23)
  • ALTER TABLE:ADD / MODIFY / CHANGE / DROP COLUMN,RENAME TABLE,DROP TABLE(part 9;讲义 2.3.2.4–2.3.2.5 p24–25)
  • DDL 小结:建库→建表→改表→删表的顺序与代价(part 10;讲义 2.3.1/2.3.2 p15–25)
  • 图形化工具只读认识:能看什么、不要在共享库用它做什么(part 11;讲义 2.4 p26–34)
  • 分页:LIMIT 偏移量,条数、起始索引公式、CEIL 总页数、越界空集、确定性排序(part 20;讲义 2.6.7 p47–48)
  • 五题案例:条件 IN、BETWEEN + 三下划线 LIKE、按性别分组计数、多列排序、排序后 LIMIT(part 21;讲义 2.6.8 p48–49)
  • 1050 / 1054 / 1060 / 1064 / 1140 / 1146 / 1264 / 1265 / 1292 / 1406 十个报错的真实输出

不包含

  • 事务、锁、隔离级别
  • 索引、执行计划、性能调优
  • 存储引擎、InnoDB 架构、日志、主从复制、分库分表
  • 视图、存储过程、触发器、函数(第 13、14 节另讲)
  • 建库、建用户、授权或任何全局设置(DCL 只在第 12 节以只读方式认识)
  • 安装 MySQL、图形化工具的安装与配置

本单元停在 P21:五题做完、分页算准,第四单元就结束。下一单元方向是账号与权限(你这条连接是谁、能做什么),只写方向,不提供空链接。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,205/205 项检查通过。

第五单元 · 账号与权限只读

账号与权限:谁能连、能做什么

预计 18 分钟 · 1 节 · 2 个步骤 · 会在 mysql> 里执行 SELECT / SHOW 这类只读语句;没读过其他单元也能从本节开始

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/2

  1. 12账号与权限:谁能连、能做什么先确认自己是谁(CURRENT_USER 的“用户名@主机”),再逐行读懂 SHOW GRANTS 的“权限 + 范围”,分清 USAGE 只是能登录;然后理解权限的四层范围与最小权限,认识 1227 / 1044 / 1142 各发生在哪一层。读者侧全部只读,建用户与授权只在作者隔离实例演示并注明。18 分钟 · 2 步0/2
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 能在 mysql> 里执行 SELECT 与 SHOW 语句
  • 不需要安装 MySQL、DBeaver、宝塔或其他面板
范围 本单元讲什么、不讲什么

包含

  • 账号 = 用户名@主机,CURRENT_USER() 与 USER() 的区别(P24,讲义 2.7.1,p50–51)
  • SHOW GRANTS / SHOW GRANTS FOR CURRENT_USER() 的逐行读法,USAGE 的含义(P24–P25)
  • 权限的四层范围:*.*、库.*、库.表、库.表(列);GRANT / REVOKE 语法(只作说明)(P25,讲义 2.7.2,p51–53)
  • 最小权限原则与“授权立即生效、无需 FLUSH PRIVILEGES”
  • 1227 / 1044 / 1142 三个错误码分别对应的权限层级

不包含

  • 在共享练习库执行 CREATE USER / GRANT / REVOKE(本课程不申请、不建议)
  • 角色(ROLE)、密码策略插件、SSL、审计、代理用户
  • 事务、锁、隔离级别
  • 索引、执行计划、性能调优
  • 建库与任何全局设置

本节是权限主题的唯一下载点:读者侧只读,管理动作只在隔离实例说明;下一节进入内置函数,不再涉及权限。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,51/51 项检查通过。

第六单元 · 四类内置函数

内置函数:字符串、数值、日期、流程

预计 42 分钟 · 2 节 · 4 个步骤 · 会在 mysql> 里写 SELECT 与 WHERE;没读过第五单元也能从本节开始

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/4

  1. 13字符串与数值函数建本节自己的表 lesson13_func(5 行,故意留 3 处不整齐),用 CONCAT / LENGTH / CHAR_LENGTH / UPPER / LPAD / SUBSTRING / TRIM / REPLACE 处理文字,再用 ROUND / CEIL / FLOOR / TRUNCATE / MOD / RAND 处理数值;看清 NULL 在函数和聚合里的传播、RAND() 不是定值,最后做一个六位验证码。20 分钟 · 2 步0/2
  2. 14日期与流程函数建 lesson14_func(5 行,含 NULL 日期与离职日期),用 YEAR / MONTH / DAY / DATE_ADD / DATEDIFF / DATE_FORMAT 做日期计算,全部以固定基准 2024-07-01 为准;再用 IF / IFNULL / NULLIF / CASE 在结果里做判断,讲清 NULL 条件、CASE 顺序与 ELSE 的作用,最后合成一张离职月份 + 绩效档的报表。22 分钟 · 2 步0/2
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 会在 mysql> 里执行 SELECT、WHERE、ORDER BY(不会的话先读第 3、6 节)
  • 不需要安装 MySQL、DBeaver、宝塔或其他面板
范围 本单元讲什么、不讲什么

包含

  • 字符串函数:CONCAT、LENGTH、CHAR_LENGTH、UPPER、LOWER、LPAD、RPAD、SUBSTRING、TRIM、REPLACE、INSTR(P27,讲义 3.1,p53–56)
  • 数值函数:ROUND、CEIL、FLOOR、TRUNCATE、MOD、RAND(含 RAND(seed))(P28,讲义 3.2,p56–57)
  • 日期函数:CURDATE、NOW、YEAR、MONTH、DAY、DATE_ADD、DATE_SUB、DATEDIFF、LAST_DAY、DATE_FORMAT(P29,讲义 3.3,p57–59)
  • 流程函数:IF、IFNULL、NULLIF、CASE(搜索式与简单式)(P30,讲义 3.4,p59)
  • 函数按数据类型选用的总结(P31,讲义 3.1–3.4,p53–61)
  • NULL 在函数、比较与聚合中的传递;utf8mb4_0900_ai_ci 下的大小写/重音/尾空格比较

不包含

  • 自定义函数、存储过程、触发器
  • 窗口函数、CTE、JSON 函数、正则函数
  • UPDATE 落盘与批量改写(第二单元已讲,本节只用 SELECT 展示)
  • 事务、锁、隔离级别
  • 索引、执行计划、性能调优
  • 建库、建用户、授权或任何全局设置

第六单元到 P31 函数小结为止;下一节进入约束(非空、唯一、主键、默认值),不再扩展函数清单。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,121/121 项检查通过。

第七单元 · 约束与外键

让数据库替你拦住坏数据:约束与外键

预计 44 分钟 · 2 节 · 4 个步骤 · 会在 mysql> 里写 CREATE TABLE / INSERT / SELECT;没读过前六个单元也能从本节开始(会重讲建表写法)

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/4

  1. 15约束:让数据库替你挡住坏数据建一张 lesson15_constraint,把主键自增、非空、唯一、默认、检查五种约束写在同一张表上,用 information_schema 读出列属性与约束名;故意插重复姓名、空姓名、越界年龄,逐个看 1062 / 1048 / 3819,并弄清 CHECK 为什么拦不住 NULL、AUTO_INCREMENT 为什么不回填空号。22 分钟 · 2 步0/2
  2. 16外键:两张表怎么拴在一起建 lesson16_fk_parent(3 个部门)与 lesson16_fk_child(4 名员工),看子表填了父表没有的编号报 1452、父表被有引用的行删掉报 1451;再把外键换成 ON DELETE SET NULL + ON UPDATE CASCADE,实测删部门只断关系、改部门号子表跟着改,并说清四种删除/更新行为的取舍。22 分钟 · 2 步0/2
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 会在 mysql> 里执行 CREATE TABLE 与 INSERT(不会的话先读第 2 节的建表语法)
  • 不需要安装 MySQL、DBeaver、宝塔或其他面板
范围 本单元讲什么、不讲什么

包含

  • P32 约束概述:六类约束、目的(正确/有效/完整)、建表时写与 ALTER 补、CHECK 需 8.0.16+(讲义 4.1,p61–62)
  • P33 约束演示:主键自增、NOT NULL、UNIQUE、DEFAULT、CHECK 同表生效;1062 / 1048 / 3819 三个错误码;UNIQUE 允许多 NULL;CHECK 对 NULL 为未知;AUTO_INCREMENT 不回填空号(讲义 4.2,p62–64)
  • P34 外键约束:子表引用父表主键/唯一列、类型一致、1452;NULL 外键不检查(讲义 4.3,p64–66)
  • P35 删除/更新行为:RESTRICT/NO ACTION 默认拒绝(1451)、CASCADE、SET NULL(列须可空)、SET DEFAULT 在 InnoDB 不支持;用 ALTER TABLE DROP/ADD FOREIGN KEY 切换行为(讲义 4.3,p66–68)
  • P36 约束小结(compact,3–6 句,无练习,不讲新知识)
  • information_schema.COLUMNS / TABLE_CONSTRAINTS 读列属性与约束名
  • 1452 / 1451 / 1054 的读法;用 LEFT JOIN + COUNT(列) 数“没人”的部门

不包含

  • 多表查询的连接类型系统讲解:第八单元(P37–P42)
  • 子查询、十二题综合练习:第九单元(P43–P50)
  • 索引原理、执行计划、性能调优:本轮课程不讲
  • 事务、锁、隔离级别:本轮课程不讲
  • 视图、存储过程、触发器:P51 起,不在 P1–P50 范围
  • 建库、建用户、授权或任何全局设置

第七单元到第 16 节为止:六类约束讲完就停,外键只讲单层父子关系,不展开复合外键、自引用外键与级联链。下一单元方向是多表查询(P37 起),只写方向,不给空链接。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,160/160 项检查通过。

第八单元 · 多表连接

两张表怎么对上:关系、笛卡尔积、连接

预计 50 分钟 · 2 节 · 6 个步骤 · 会在 mysql> 里写 SELECT / WHERE / GROUP BY / ORDER BY,知道主键和外键是什么;没读过第七单元也能从本节开始(外键语法在本单元第 16 节已讲过一遍)

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/6

  1. 17多表查询(一):两张表怎么对上建本节自己的两张表 lesson17_dept(3 行)和 lesson17_emp(4 行,其中 1 人 dept_id 为 NULL),看清一对多为什么只体现在“多”的那一方;不写连接条件时得到 4 × 3 = 12 行笛卡尔积,补上 dept_id = id 后剩 3 行;用隐式逗号和 INNER JOIN ... ON 两种写法写出同一个内连接,并解释 NULL 为什么在内连接里消失。24 分钟 · 3 步0/3
  2. 18多表查询(二):外连接、自连接、UNION换一套自己的表 lesson18_dept(5 行,2 个空部门)和 lesson18_emp(5 行,1 人无部门、1 人无上级),先看清 LEFT JOIN 保留小李、RIGHT JOIN 保留两个空部门,再验证过滤条件放 ON 会留 5 行、放 WHERE 只剩 2 行;用自连接列出所有员工及其上级(内连接会漏掉老板);最后用 UNION / UNION ALL 把两次查询竖直接起来,并复现 1222 列数不等。26 分钟 · 3 步0/3
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 会在 mysql> 里写 SELECT / WHERE / GROUP BY / ORDER BY(不会的话先读第 6 节)
  • 知道主键、非空、唯一这些约束(第 15 节)和外键语法(第 16 节);不记得也能跟,本节会重讲一遍连接条件
  • 不需要安装 MySQL、DBeaver、宝塔或其他面板
范围 本单元讲什么、不讲什么

包含

  • P37 多表关系:一对多(外键放多的一方)、一对一(拆表 + UNIQUE)、多对多(中间表 + 联合主键)(讲义 5.1,p69–72)
  • P38 笛卡尔积:4 × 3 = 12 行、漏写连接条件的识别办法;多表查询的四个类别(内/外/自/子查询)(讲义 5.2,p72–75)
  • P39 内连接两种写法:逗号 + WHERE 与 INNER JOIN ... ON,ON 与 WHERE 的分工(讲义 5.3,p75–77)
  • NULL 在内连接里的行为(NULL = 任何值 为 UNKNOWN,配不上),以及“这不是丢数据”的措辞
  • 外键报错 1452 与列名歧义 1052、表名拼错 1146 的读法
  • 第 18 节:LEFT/RIGHT JOIN(含 ON 与 WHERE 对保留行的影响)、自连接、UNION / UNION ALL、1222(讲义 5.4 p77–78、5.5.1 p78–79、5.5.2 p79–80)
  • COUNT(*) 与 COUNT(右表列) 在外连接结果上的差别

不包含

  • 子查询(标量、列、行、表)与十二题综合练习:第九单元(P43–P50)
  • 三表连接与 salgrade 区间连接:留给第九单元的 lesson21_* 自建表
  • 索引、执行计划、性能调优:本轮课程不讲
  • 事务、锁、隔离级别:本轮课程不讲
  • 视图、存储过程、触发器:P51 起,不在 P1–P50 范围
  • 建库、建用户、授权或任何全局设置

第八单元到第 18 节为止:外连接、自连接、UNION 讲完就停。下一单元方向是子查询与十二题综合练习(P43–P50),只写方向,不给空链接。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,170/170 项检查通过。

第九单元 · 子查询与综合练习

子查询与十二题:把结果交给另一条 SELECT

预计 91 分钟 · 3 节 · 9 个步骤 · 会在 mysql> 里写 SELECT / WHERE / GROUP BY / ORDER BY,读完了第八单元的内连接、外连接、自连接与 UNION;知道主键、外键和 NULL 的基本行为

电脑分屏:左边网页看步骤,右边 PowerShell / SSH 跟着敲

本单元进度 0/9

  1. 19子查询(一):先把内层单独跑一遍先建本节自己的 lesson19_dept(4 行)和 lesson19_emp(7 行,1 人无部门、1 人无工资),用“许恬在哪个部门”和“公司平均工资”两个小例说清子查询只是嵌套 SELECT;再按返回形状走标量子查询(0 行得到 NULL、多行报 1242)和列子查询(IN、NOT IN 遇 NULL 归零、ANY / ALL 与空集),每一步都先单独跑内层。24 分钟 · 3 步0/3
  2. 20子查询(二):一行多列、一整张表换一套 lesson20_dept(3 行)和 lesson20_emp(7 行,白露与秦川同薪同上级、苏航无上级、江遥无部门),用“同薪同上级”讲行子查询:括号整行比较、NULL 让整行失效(1242 / 1241);再用“每部门最高工资”和“部门平均工资”讲表子查询的整行 IN 与 FROM 派生表(并列保留、NULL 分组不匹配、1248 必须起别名)。22 分钟 · 2 步0/2
  3. 21十二道综合题:把连接和子查询放在同一页按讲义 5.7 的十二个需求逐条做:第 1–4 题练隐式 / 显式内连接、去重和左连接保留无部门员工;第 5–8 题练工资档位区间连接、三表连接、部门平均和标量比较;第 9–12 题练全公司平均、相关子查询、SELECT 里的计数子查询和员工技能三表连接。表名、姓名、工资与档位边界全部另取,结果不对讲义答案。45 分钟 · 4 步0/4
准备 开始本单元之前
  • 一台 Windows 电脑,PowerShell 可用
  • 服务器 SSH 账号 root@8.148.204.152,端口 22,密码由使用者自己保管
  • 会在 mysql> 里写 SELECT / WHERE / GROUP BY / ORDER BY(不会的话先读第 6、7 节)
  • 读过第 17、18 节的内连接、外连接、自连接和 UNION;不记得也能跟,本节会重讲连接条件
  • 不需要安装 MySQL、DBeaver、宝塔或其他面板
范围 本单元讲什么、不讲什么

包含

  • P43 子查询介绍:嵌套 SELECT、按返回形状分四类、WHERE / SELECT / FROM 三个位置(讲义 5.6.1,p80–81)
  • P44 标量子查询:= > < 等普通比较、0 行得到 NULL、多行报 1242、聚合跳过 NULL(讲义 5.6.2,p81–82)
  • P45 列子查询:IN / NOT IN / ANY / SOME / ALL、NOT IN 遇 NULL、空集上 ANY 与 ALL 的真假(讲义 5.6.3,p82–83)
  • P46 行子查询:括号整行比较、列序与列数、NULL 让整行比较失效、1242 与 1241(讲义 5.6.4,p83–84)
  • P47 表子查询:整行 IN、并列值保留、NULL 分组不匹配、FROM 派生表与 1248 别名要求(讲义 5.6.5,p84–85)
  • P48 / P49 十二题:隐式与显式内连接、去重、左连接保留、区间连接、三表连接、部门平均、标量与相关子查询、SELECT 计数子查询、多对多中间表三表连接(讲义 5.7,p85–87)
  • P50 多表查询小结:关系 → 连接 → 合并 → 嵌套的决策顺序,以及 P50 停点声明(讲义 5.1–5.7,p69–88)
  • 页内幂等:SHOW TABLES LIKE 判空、已有表跳过建表与插入、按行数核对;重复插入的 1062 作为常见报错说明

不包含

  • 事务、锁、隔离级别:P51 之后,本课不含
  • 索引、执行计划、存储引擎、性能优化:本课不含
  • 视图、存储过程、触发器:P51 起,不在 P1–P50 范围
  • 建库、建用户、授权或任何全局设置
  • 修改读者已有的表(本单元只建 lesson19_ / lesson20_ / lesson21_ 前缀表)

第九单元到第 21 节为止:十二题与 P50 小结讲完就停。课程覆盖 BV1Kr4y1i7ru 的 P1–P50,P51 之后的内容(事务、索引、引擎、优化)不写、不预告。

示例在隔离的 MySQL 8.0.46-0ubuntu0.24.04.4 上逐条执行核验,305/305 项检查通过。