热线电话:13121318867

登录
首页大数据时代CDA 一级 SQL 数据库应用 · 精简手册(上)
CDA 一级 SQL 数据库应用 · 精简手册(上)
2026-11-13
收藏

CDA数据分析师 出品
作者:李诗怡

基础与单表查询 四大类语言 · 数据库基础 · DQL 单表查询

”

一、SQL 四大类语言与数据库基础

1. SQL 按功能四大类

分类 全称 代表关键字 职责
DQL 数据查询语言 SELECT 负责查询:WHERE、GROUP BY、聚合、HAVING、ORDER BY、LIMIT、JOIN、子查询
DDL 数据定义语言 CREATE、ALTER、DROP 建库、建表、修改字段、删除表
DML 数据操作语言 INSERT、UPDATE、DELETE 新增、修改、删除行数据
DCL 数据控制语言 GRANT、REVOKE 给账号分配与收回查看数据库的权限

2. 数据库基础概念

  • 数据库:存储数据的「仓库」
  • 数据表:以行和列的形式存储数据
  • 行 / 记录:一行 = 一条记录(一条观测)。例:销售表中一行代表一笔销售
  • 列 / 字段:一列 = 一个属性(字段 / 变量)。例:日期、市场、销售额、利润
  • 主键:唯一标识一行记录的字段,常作为多表连接的依据(连接键)
  • 常用工具:MySQL 数据库软件 + DBeaver 客户端

关系型数据库通过「行 + 列」组织结构化数据,这是理解所有 SQL 操作的前提。

”

二、DQL 单表查询:筛选 · 排序 · 分组汇总

1. SELECT 基础查询

语法

SELECT [DISTINCT] 列名 [AS 别名], ...
FROM 表名
[WHERE 筛行]
[GROUP BY 分组]
[HAVING 筛组]
[ORDER BY 排序]
[LIMIT n]

示例

-- 示例一:查指定字段
SELECT sid, sname, sex, birth_date FROM student;

-- 示例二:查所有列并只看前 2 行
SELECT * FROM student LIMIT 2;

要点

  • 要点一:列名之间用英文逗号分隔,FROM 后跟表名
  • 要点二:星号 * 表示所有列;列很多时不建议用,效率低
  • 要点三:LIMIT 放在所有子句最后面,只输出前 n 行

2. 别名:AS

语法

-- 列别名
列名 [AS] 别名

-- 表别名
表名 [AS] 别名
  • 作用:表别名简化书写,列别名便于阅读理解
  • 注意:AS 可加可不加,省略写法一样生效

示例

SELECT s.sname AS 学生姓名,
       s.sex 性别
FROM student AS s
WHERE s.birth_date BETWEEN '2000-01-01' AND '2000-12-31'
ORDER BY s.sname;

3. 过滤重复行:DISTINCT

语法

SELECT [ALL | DISTINCT] 列名, ... FROM 表名;
  • 默认行为:ALL 是默认的,什么都不写就等于不去重
  • 用法:DISTINCT 加在第一个列名前
  • 关键考点:DISTINCT 对后面所有列的组合去重,不是单独对某一列去重

示例

-- 班级与性别的组合去重
SELECT DISTINCT cid, sex FROM student;

4. 筛选符合条件的行:WHERE

语法

SELECT 列名, ... FROM 表名 WHERE 条件表达式;
类型 内容
算术运算符 加、减、乘、除
比较运算符 等于、大于、大于等于、小于、小于等于、不等于
逻辑运算符 AND(且)、OR(或)、NOT(非)
其他条件 BETWEEN ... AND、IN、LIKE、IS NULL

优先级:算术运算 > 比较运算 > 逻辑运算

三种常量

常量类型 写法
数值常量 直接写
字符常量 必须加英文引号
日期常量 加引号,%Y-%m-%d 格式自动识别为日期

⚠️ 高频报错:字符常量用了中文引号,这是最常见的语法错误来源。

”

综合示例

-- 筛选 2000 年出生、1 班和 2 班的女性学生
SELECT *
FROM student
WHERE YEAR(birth_date) = 2001 - 1
  AND sex = '女'
  AND cid IN (1, 2);

???? 考点:三种常量的写法 —— 数值直接写、字符加英文引号、日期加引号。

”

5. 对查询结果排序:ORDER BY

语法

ORDER BY 列名 [ASC | DESC], ...;
  • ASC 升序(默认),DESC 降序

两种写法

-- 写法一:跟列名排序
ORDER BY score

-- 写法二:跟位置序号排序,表示按第 3 个字段降序
ORDER BY 3 DESC

多字段排序:优先级从左到右 —— 先按 subject 升序,同科目内再按 score 降序。

-- 数学排在前,数学内部 92 分在 85 分之前
ORDER BY subject ASC, score DESC;

6. 聚合函数

函数 作用
COUNT() 对任意字段计数
SUM() 数值求和
AVG() 数值求平均
MAX() / MIN() 求最大值 / 求最小值
STD() 求标准差

???? 关键考点:COUNT(*) 统计所有行数;COUNT(DISTINCT 列名) 统计去重后的个数。

”
-- COUNT(*) 是成绩记录数,COUNT(DISTINCT sid) 是不重复的学生数
SELECT COUNT(*), COUNT(DISTINCT sid) FROM score;

7. 分组汇总:GROUP BY

语法

SELECT 分组列, 聚合函数(列名)
FROM 表名
GROUP BY 分组列;

三条规则

  • 规则一:分组变量必须出现在 SELECT 的最前面,不允许出现游离变量
  • 规则二:SELECT 里只能出现分组列和汇总函数
  • 规则三:用 AS 给汇总结果起列别名,HAVING 会用到

示例

-- 按科目分组,统计每个科目的考试次数、平均分、最高分
SELECT subject AS 科目,
       COUNT(*) AS 考试次数,
       AVG(score) AS avg_score,
       MAX(score) AS 最高分
FROM score
GROUP BY subject;

执行逻辑:按分组列切成若干组,汇总函数对每一组分别计算。

8. WHERE 与 HAVING 的区别(必考)

两者都能写条件,但作用对象和执行时机完全不同。

对比维度 WHERE HAVING
过滤对象 行(记录) 组(分组结果)
执行时机 分组前 分组后
汇总函数 不能跟 可以跟
列别名 不能用 可以跟

一句话记忆:WHERE 管「哪些行进来」,HAVING 管「哪些组留下」。

”

示例

-- 筛选平均分大于 80 分的科目
SELECT subject, AVG(score) AS avg_score
FROM score
GROUP BY subject
HAVING avg_score > 80;

???? 考点:HAVING 直接跟新列别名,WHERE 里不允许这样写。

”

三、上篇速记

  • 四大类语言:DQL 查询(SELECT)、DDL 定义(CREATE/ALTER/DROP)、DML 操作(INSERT/UPDATE/DELETE)、DCL 控制(GRANT/REVOKE)
  • 基础概念:数据库是仓库,表由行与列组成,一行为一条记录,一列为一个字段,主键唯一标识一行且常作连接键
  • SELECT 要点:列名英文逗号分隔;星号查所有列但效率低;LIMIT 放最后
  • DISTINCT:加在第一个列名前,对后面所有列的组合去重;ALL 是默认,等于不去重
  • WHERE 要点:优先级为算术、比较、逻辑;三种常量分别按数值、字符、日期写法
  • ORDER BY:ASC 升序默认、DESC 降序;可跟列名或位置序号;多字段按书写顺序定优先级
  • 聚合函数:COUNT、SUM、AVG、MAX、MIN、STD;COUNT(*) 是行数,COUNT(DISTINCT 列名) 是去重个数
  • GROUP BY:分组列必须在 SELECT 最前;SELECT 内只能有分组列与聚合函数
  • WHERE vs HAVING:行级过滤在分组前,不能带聚合与列别名;组级过滤在分组后,可以带聚合与列别名
扫码 CDA 认证小程序获取更多资料
扫码 CDA 认证小程序
获取更多资料

推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

数据分析师资讯
更多

OK
客服在线
立即咨询
客服在线
立即咨询