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 的区别(必考)
两者都能写条件,但作用对象和执行时机完全不同。
对比维度 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:行级过滤在分组前,不能带聚合与列别名;组级过滤在分组后,可以带聚合与列别名

0.0000
0
0
关注作者
收藏
发表评论
暂无数据

