MySQL 视频课 · 50 集 / 组
DQL 基础:基础查询、条件查询、聚合函数
P15–P17 · 共 3 集 · 每集独立 anchor,可直接从目录跳到本页某一集
视频 p=15 · 时长 14:26
P15 15. 基础-SQL-DQL-基础查询
原视频:在 B 站新标签打开(p=15) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=15)
查询的第一步:选列、改列名、去重。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
从这一集开始查数据。基础查询解决三件事:查哪些列、列名怎么显示、重复值要不要去掉。
按这 4 步做
- 语法骨架是
SELECT 字段列表 FROM 表名;。字段列表写具体列名,或写*表示所有列;*方便,但会把不需要的大字段也查出来。 - 起别名用
AS:SELECT name AS 姓名 FROM ...,结果表头就变成“姓名”。AS 可以省略,写个空格也行,但显式写更好读。 - 去重是在字段前加
DISTINCT:SELECT DISTINCT dept_id FROM employee;,相同的值只留一行。它作用于整个字段列表,不是只作用于紧挨着的那一列。 - 画面里的例子是
select name, workno, age from emp;,只取三列,结果按建表时的列顺序显示。
小例
SELECT name AS 姓名, salary AS 月薪
FROM employee;
结果两列,表头是“姓名”和“月薪”,共 4 行。第 4 行小李的月薪显示 NULL——NULL 表示“没有值”,不是 0;这也是后面 COUNT 要区分“数行”和“数列”的原因。
易错点
- 以为
SELECT *更快。它往往更慢,因为多读了用不到的列,还多传了网络数据。 - 把 NULL 当 0 或空字符串。它参与运算结果还是 NULL。
- 以为 DISTINCT 只去重一列。
DISTINCT a, b去重的是 (a,b) 组合。
30 秒速记
* 是所有列;AS 起别名;DISTINCT 去重;NULL 不是 0。自测(2 题,先答再展开)
自测 1:SELECT name AS 姓名 里的 AS 改变了数据吗?
没有。它只改结果集的列标题,表里的列名和数据都不变。别名的作用是让输出更好读,或在导出、报表时给出业务名称。
自测 2:SELECT DISTINCT dept_id, salary 会得到什么?
得到不重复的 (dept_id, salary) 组合。同一部门但薪水不同算两条;只有两列都相同才合并。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| B站原视频 P15《15. 基础-SQL-DQL-基础查询》 | 平台视频页 · P15 | 标题、时长与分 P 信息取自平台公开页面;仅作外链,不在站内播放 |
| 本集采样画面 p15_t20.jpg(约 173s) | 平台视频页 · P15 / 约 173s | 已人工查看该帧:幻灯片“SQL—DQL-语法”给出 SELECT/FROM/WHERE/GROUP BY/HAVING/ORDER BY/LIMIT 的完整骨架;只证明这一画面,不代表整集讲解 |
| 本集采样画面 p15_t70.jpg(约 605s) | 平台视频页 · P15 / 约 605s | 已人工查看该帧:Workbench 中执行基本查询第 1 题:select name, workno, age from emp,结果网格三列四行数据;只证明这一画面,不代表整集讲解 |
以同版讲义公开镜像核对:讲义 2.6.1 基本语法 / 2.6.2 基础查询(p38–41)。原声字幕未取得(匿名接口字幕轨为空且需登录),讲师逐句讲解未核;本页示例、表与数字为站内原创,不是课堂原表。
讲义对照:讲义 2.6.1 基本语法 / 2.6.2 基础查询 · p41–42(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–14:13 / 全片 14:26(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。
视频 p=16 · 时长 17:57
P16 16. 基础-SQL-DQL-条件查询
原视频:在 B 站新标签打开(p=16) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=16)
只取需要的行。条件写对,才不会多查或少查。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
只查需要的行,就要在 WHERE 里写条件。这一集把比较运算符、逻辑运算符和几个特殊写法过一遍。
按这 4 步做
- 基本比较有六个:
=、>、>=、<、<=、<>或!=(不等于)。字符串和日期加引号,数字不用。 - 范围和列表:
BETWEEN 15 AND 20含两端,等价于>=15 AND <=20;IN (18,20,40)是多选一,比一串 OR 短。 - 模糊与空值:
LIKE配%(任意多个字符)和_(一个字符);空值只能写IS NULL或IS NOT NULL。 - 多条件用
AND/&&、OR/||、NOT/!组合。AND 先算、OR 后算,混用加括号最稳。
小例
SELECT id, name, age, salary
FROM employee
WHERE age BETWEEN 22 AND 30
AND salary IS NOT NULL;
两个条件同时成立才留下:年龄在 22–30(含 22、30),并且薪水不为空。结果是小林(22)、小周(25)、小陈(30)三行;小李年龄 21 不在范围,薪水又是 NULL,被两条条件分别挡掉。
易错点
- 写
salary = NULL,结果永远查不到。NULL 的比较要用 IS NULL。 - BETWEEN 写反(30 AND 22)不报错,只返回空结果,容易误判成“没数据”。
LIKE '%林'匹配结尾,LIKE '林%'匹配开头,方向写反就查不到。- AND 和 OR 混用不加括号。默认 AND 先算,结果常和预期不一致。
30 秒速记
自测(2 题,先答再展开)
自测 1:为什么 WHERE salary = NULL 查不到任何行?
NULL 表示“未知”,任何与 NULL 的相等比较结果都是 UNKNOWN,不是 TRUE,所以行不会被选中。判断空值必须用 IS NULL 或 IS NOT NULL。
自测 2:BETWEEN 15 AND 20 和 >= 15 AND <= 20 等价吗?
对数字和日期等价,都包含两端。注意 BETWEEN 的下界必须写在前面,写反了虽然不报错,但会得到空结果。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| B站原视频 P16《16. 基础-SQL-DQL-条件查询》 | 平台视频页 · P16 | 标题、时长与分 P 信息取自平台公开页面;仅作外链,不在站内播放 |
| 本集采样画面 p16_t30.jpg(约 322s) | 平台视频页 · P16 / 约 322s | 已人工查看该帧:Workbench 中条件查询练习:where age = 88、age < 20、age <= 20、idcard is not null、age != 88、between 15 and 20;只证明这一画面,不代表整集讲解 |
| 本集采样画面 p16_t80.jpg(约 861s) | 平台视频页 · P16 / 约 861s | 已人工查看该帧:幻灯片“DQL-条件查询”:SELECT 字段列表 FROM 表名 WHERE 条件列表,并列出比较运算符(含 LIKE、IS NULL)与逻辑运算符(AND/OR/NOT);只证明这一画面,不代表整集讲解 |
| MySQL 8.0 Reference Manual: Comparison Operators | 官方文档 | 语法条目备查,未逐字引用 |
以同版讲义公开镜像核对:讲义 2.6.3 条件查询(p42–45)。原声字幕未取得(匿名接口字幕轨为空且需登录),讲师逐句讲解未核;本页示例、表与数字为站内原创,不是课堂原表。
讲义对照:讲义 2.6.3 条件查询 · p42–45(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–17:44 / 全片 17:57(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。
视频 p=17 · 时长 6:39
P17 17. 基础-SQL-DQL-聚合函数
原视频:在 B 站新标签打开(p=17) · 单独打开这一集 →
看视频,对照阅读:在新标签打开原视频(p=17)
把多行算成一个数,顺便理解 NULL 对统计的影响。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
聚合函数把多行压成一个数:一共多少人、平均多少、最大最小、总和。这一集讲 COUNT、AVG、MAX、MIN、SUM。
按这 4 步做
- 五个函数各管一件事:
COUNT()数行、AVG()平均、MAX()最大、MIN()最小、SUM()求和。参数写列名,COUNT(*)数的是行。 - 它们都把一整列(或整张表)算成一个值,所以不写 GROUP BY 时,结果只有一行。
- 关键差别:
COUNT(*)数所有行,COUNT(列名)跳过该列为 NULL 的行;AVG 和 SUM 同样忽略 NULL。 - 所以“平均薪水”用 AVG(salary) 时,没填薪水的人不参与分母。想按“包括没填的人”算,要先想清楚业务定义。
小例
SELECT COUNT(*) AS 总人数,
COUNT(salary) AS 有薪水人数,
AVG(salary) AS 平均薪水
FROM employee;
结果一行三列:总人数 4、有薪水人数 3、平均薪水 10000.00。因为小李的 salary 是 NULL,被 COUNT(salary) 和 AVG 跳过;10000 =(8000+10000+12000)÷3,不是除以 4。看这三个数就能理解 NULL 对统计的影响。
易错点
- 以为 COUNT(列) 和 COUNT(*) 一样。有 NULL 时结果会差。
- 把 AVG 的分母当总行数。它只算非 NULL 的行。
- 在 WHERE 里写
WHERE COUNT(*) > 3。聚合函数不能放在 WHERE,这类筛选要等 GROUP BY/HAVING(后续课)。
30 秒速记
自测(2 题,先答再展开)
自测 1:员工 4 人,其中 1 人薪水为 NULL,COUNT(*) 和 COUNT(salary) 各是多少?
COUNT(*) 是 4,COUNT(salary) 是 3。前者数行,后者只数该列非 NULL 的值。
自测 2:为什么 AVG(salary) 不等于 SUM(salary)/COUNT(*)?
AVG 的分母是 COUNT(salary),即非 NULL 的行数;COUNT(*) 把 NULL 行也算进分母,会把平均值拉低。两种算法对应不同的业务口径。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| B站原视频 P17《17. 基础-SQL-DQL-聚合函数》 | 平台视频页 · P17 | 标题、时长与分 P 信息取自平台公开页面;仅作外链,不在站内播放 |
| 本集采样画面 p17_t30.jpg(约 119s) | 平台视频页 · P17 / 约 119s | 已人工查看该帧:Workbench 中“聚合函数”练习:注释列出 COUNT/AVG/MAX/MIN/SUM 五项统计任务,左侧为 emp 表;只证明这一画面,不代表整集讲解 |
| MySQL 8.0 Reference Manual: Aggregate Functions | 官方文档 | 语法条目备查,未逐字引用 |
以同版讲义公开镜像核对:讲义 2.6.4 聚合函数(p45–46)。原声字幕未取得(匿名接口字幕轨为空且需登录),讲师逐句讲解未核;本页示例、表与数字为站内原创,不是课堂原表。
讲义对照:讲义 2.6.4 聚合函数 · p45–46(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–6:26 / 全片 6:39(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。