热线电话:13121318867

登录
2026-11-13 阅读量: 25
CDA 一级 SQL 数据库应用 · 精简手册(上)

CDA 一级 SQL 数据库应用 · 精简手册(上)

基础与单表查询 四大类语言 · 数据库基础 · 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 的区别(必考)

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

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

一句话记忆: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:行级过滤在分组前,不能带聚合与列别名;组级过滤在分组后,可以带聚合与列别名

f211b16f8bd4313d1a5eedd2e8637126.png

0.0000
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子