本系列可作为数据库学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。
点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励!
系列文章目录
目录
目录
[二、CRUD 简介](#二、CRUD 简介)
[三、Create 新增数据(INSERT)](#三、Create 新增数据(INSERT))
[3.1 完整语法](#3.1 完整语法)
[3.2 建测试表](#3.2 建测试表)
[3.3 三种插入方式](#3.3 三种插入方式)
[3.3.1 单行全列插入](#3.3.1 单行全列插入)
[3.3.2 单行指定列插入](#3.3.2 单行指定列插入)
[3.3.3 多行批量插入](#3.3.3 多行批量插入)
[3.3.4 查询结果](#3.3.4 查询结果)
[四、Retrieve 查询数据(SELECT)](#四、Retrieve 查询数据(SELECT))
[4.1 完整查询语法](#4.1 完整查询语法)
[4.2 构造成绩表(示例专用)](#4.2 构造成绩表(示例专用))
[4.3 基础查询](#4.3 基础查询)
[4.3.1 全列查询](#4.3.1 全列查询)
[4.3.2 指定列查询](#4.3.2 指定列查询)
[4.3.3 查询表达式](#4.3.3 查询表达式)
[4.3.4 指定别名(AS)](#4.3.4 指定别名(AS))
[4.3.5 去重查询 DISTINCT](#4.3.5 去重查询 DISTINCT)
[4.4 WHERE 条件查询](#4.4 WHERE 条件查询)
[4.4.1 比较运算](#4.4.1 比较运算)
[4.4.2 逻辑运算符](#4.4.2 逻辑运算符)
[4.5 WHERE 高频示例](#4.5 WHERE 高频示例)
[4.5.1 英语不及格](#4.5.1 英语不及格)
[4.5.2 语文 > 英语](#4.5.2 语文 > 英语)
[4.5.3 总分 < 200](#4.5.3 总分 < 200)
[4.5.4 AND / OR](#4.5.4 AND / OR)
[4.5.5 范围查询](#4.5.5 范围查询)
[4.5.6 IN 查询](#4.5.6 IN 查询)
[4.5.7 模糊查询](#4.5.7 模糊查询)
[4.5.8 NULL 查询(重点)](#4.5.8 NULL 查询(重点))
[4.6 ORDER BY 排序](#4.6 ORDER BY 排序)
[4.7 LIMIT 分页查询](#4.7 LIMIT 分页查询)
[五、Update 修改数据](#五、Update 修改数据)
[5.1 语法](#5.1 语法)
[5.2 示例](#5.2 示例)
[5.2.1 修改单科](#5.2.1 修改单科)
[5.2.2 修改多列](#5.2.2 修改多列)
[5.2.3 基于原值更新](#5.2.3 基于原值更新)
[5.2.4 全表更新(高危)](#5.2.4 全表更新(高危))
[六、Delete 删除数据](#六、Delete 删除数据)
[6.1 语法](#6.1 语法)
[6.2 示例](#6.2 示例)
[七、TRUNCATE 截断表](#七、TRUNCATE 截断表)
[7.1 语法](#7.1 语法)
[7.2 特点](#7.2 特点)
[9.1 常用函数](#9.1 常用函数)
[9.2 示例](#9.2 示例)
[十、GROUP BY 分组查询](#十、GROUP BY 分组查询)
[10.1 语法](#10.1 语法)
[10.2 示例(员工表)](#10.2 示例(员工表))
[10.3 HAVING 分组过滤](#10.3 HAVING 分组过滤)
[十一、MySQL 内置函数(全覆盖)](#十一、MySQL 内置函数(全覆盖))
[11.1 日期函数](#11.1 日期函数)
[11.2 字符串函数](#11.2 字符串函数)
[11.3 数学函数](#11.3 数学函数)
[11.4 系统函数](#11.4 系统函数)
[12.1 增](#12.1 增)
[12.2 查](#12.2 查)
[12.3 改](#12.3 改)
[12.4 删](#12.4 删)
[12.5 核心规则](#12.5 核心规则)
前言
小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,如转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!
在 MySQL 数据库开发中,CRUD 是所有业务逻辑的基石 。无论你是做网站后台、管理系统、数据分析,还是应付考试、面试,增、删、改、查都是必须熟练掌握的核心技能。
一、本节学习目标
- 熟练使用 SQL 语句完成数据库 CRUD 操作
- 掌握 聚合函数 的使用(COUNT、SUM、AVG、MAX、MIN)
- 掌握 GROUP BY 分组查询 以及 HAVING 分组结果过滤
- 熟练使用 MySQL 内置函数
二、CRUD 简介
CRUD 是数据库最基础的四大操作:
- C = Create(新增) :
INSERT - R = Retrieve(查询) :
SELECT - U = Update(修改) :
UPDATE - D = Delete(删除) :
DELETE
三、Create 新增数据(INSERT)
3.1 完整语法
sql
INSERT [INTO] table_name [(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...;
3.2 建测试表
sql
create table users (
id bigint,
name varchar(20) comment '用户名'
);
3.3 三种插入方式
3.3.1 单行全列插入
值的顺序、数量必须和表字段完全一致。
sql
insert into users values (1, '张三');
insert into users values (2, '李四');
3.3.2 单行指定列插入
sql
insert into users(id, name) values (3, '王五');
3.3.3 多行批量插入
sql
insert into users(id, name) values
(4, '赵六'),
(5, '钱七');
3.3.4 查询结果
sql
select * from users;
四、Retrieve 查询数据(SELECT)
查询是数据库最核心、最常用、最复杂的部分。
4.1 完整查询语法
sql
SELECT
[DISTINCT]
select_expr [, select_expr] ...
[FROM table_references]
[WHERE where_condition]
[GROUP BY {col_name | expr}, ...]
[HAVING where_condition]
[ORDER BY {col_name | expr } [ASC | DESC], ... ]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
4.2 构造成绩表(示例专用)
sql
CREATE TABLE exam(
id BIGINT,
name VARCHAR(20) COMMENT '同学姓名',
chinese float COMMENT '语文成绩',
math float COMMENT '数学成绩',
english float COMMENT '英语成绩'
);
INSERT INTO exam (name,chinese,math,english) VALUES
(1,'唐三藏',67,98,56),
(2,'孙悟空',87,78,77),
(3,'猪悟能',88,98,90),
(4,'曹孟德',82,84,67),
(5,'刘玄德',55,85,45),
(6,'孙权',70,73,78),
(7,'宋公明',75,65,30);
4.3 基础查询
4.3.1 全列查询
sql
select * from exam;
4.3.2 指定列查询
sql
select id, name, chinese from exam;
4.3.3 查询表达式
可以是常量、运算、字段组合。
sql
-- 常量
select id,name,10 from exam;
-- 运算
select id,name,10+1 from exam;
-- 字段 + 数值
select id, name, chinese + 10 from exam;
-- 计算总分
select id, name, chinese + math + english from exam;
4.3.4 指定别名(AS)
AS 可省略,支持中文别名。
sql
select id, name, chinese + math + english as 总分 from exam;
4.3.5 去重查询 DISTINCT
所有列的值都相同才算重复。
sql
select distinct math from exam;
4.4 WHERE 条件查询
4.4.1 比较运算
| 运算符 | 说明 |
|---|---|
| >, >=, <, <= | 大小比较 |
| = | 等于(对 NULL 不安全) |
| <=> | NULL 安全等于 |
| !=, <> | 不等于 |
| BETWEEN...AND... | 范围匹配 |
| IN(...) | 包含在列表中 |
| IS NULL | 是 NULL |
| IS NOT NULL | 不是 NULL |
| LIKE | 模糊查询 |
4.4.2 逻辑运算符
AND:所有条件成立OR:任一条件成立NOT:取反
4.5 WHERE 高频示例
4.5.1 英语不及格
sql
select name, english from exam where english < 60;
4.5.2 语文 > 英语
sql
select name, chinese, english from exam where chinese > english;
4.5.3 总分 < 200
sql
select name, chinese+math+english as 总分
from exam
where chinese + math + english < 200;
4.5.4 AND / OR
sql
-- 且
select * from exam where chinese>80 and english>80;
-- 或
select * from exam where chinese>80 or english>80;
4.5.5 范围查询
sql
select name, chinese from exam where chinese between 80 and 90;
4.5.6 IN 查询
sql
select name, math from exam where math in (78,98);
4.5.7 模糊查询
%:匹配任意多个字符_:匹配一个字符
sql
-- 姓孙
select * from exam where name like '孙%';
-- 姓孙,名字两个字
select * from exam where name like '孙_';
4.5.8 NULL 查询(重点)
不能用 = NULL,必须用 IS NULL
sql
-- 插入 NULL 数据
insert into exam values (8, '张飞', 27, 0, NULL);
-- 查询 NULL
select * from exam where english is null;
-- 查询非 NULL
select * from exam where english is not null;
4.6 ORDER BY 排序
- ASC:升序(默认)
- DESC:降序
- NULL 最小
sql
-- 数学升序
select name, math from exam order by math asc;
-- 语文降序
select name, chinese from exam order by chinese desc;
-- 多列排序
select name, math,english, chinese
from exam
order by math desc, english asc, chinese asc;
-- 按别名排序
select name, chinese+math+english as 总分
from exam
order by 总分 desc;
4.7 LIMIT 分页查询
sql
-- 第1页
select * from exam limit 0,3;
-- 第2页
select * from exam limit 3,3;
五、Update 修改数据
5.1 语法
sql
UPDATE 表名
SET 列1=值1, 列2=值2...
[WHERE 条件];
⚠️ 不加 WHERE 会更新全表!
5.2 示例
5.2.1 修改单科
sql
update exam set math = 80 where name = '孙悟空';
5.2.2 修改多列
sql
update exam set math=60, chinese=70 where name='曹孟德';
5.2.3 基于原值更新
sql
update exam set math = math + 30 where ...;
5.2.4 全表更新(高危)
sql
update exam set chinese = chinese * 2;
六、Delete 删除数据
6.1 语法
sql
DELETE FROM 表名 [WHERE 条件];
⚠️ 不加 WHERE 清空全表!
6.2 示例
sql
delete from exam where name = '孙悟空';
七、TRUNCATE 截断表
7.1 语法
sql
TRUNCATE TABLE 表名;
7.2 特点
- 比 DELETE 更快
- 重置自增 ID
- 无法回滚
- 只能清空整张表
八、插入查询结果
将查询结果直接插入另一张表,常用于去重、备份。
sql
-- 去重插入
insert into t_recored_new select distinct * from t_recored;
九、聚合函数
9.1 常用函数
| 函数 | 说明 |
|---|---|
| COUNT() | 统计数量 |
| SUM() | 求和 |
| AVG() | 平均值 |
| MAX() | 最大值 |
| MIN() | 最小值 |
NULL 不参与计算
9.2 示例
sql
-- 总人数
select count(*) from exam;
-- 数学总分
select sum(math) from exam;
-- 英语平均分
select avg(english) from exam;
-- 英语最高分
select max(english) from exam;
十、GROUP BY 分组查询
10.1 语法
sql
SELECT 分组列, 聚合函数
FROM 表
GROUP BY 分组列;
10.2 示例(员工表)
sql
select role, count(*) as 人数, avg(salary) as 平均工资
from emp
group by role;
10.3 HAVING 分组过滤
HAVING 过滤分组结果,WHERE 过滤原始数据
sql
select role, avg(salary)
from emp
group by role
having avg(salary) < 1500;
十一、MySQL 内置函数(全覆盖)
11.1 日期函数
CURDATE():当前日期CURTIME():当前时间NOW():当前日期时间DATE():提取日期ADDDATE():加时间SUBDATE():减时间DATEDIFF():日期差
11.2 字符串函数
CHAR_LENGTH():字符长度LENGTH():字节长度CONCAT():拼接CONCAT_WS():带分隔符拼接LOWER/UPPER:大小写SUBSTR():截取REPLACE():替换TRIM():去空格INSTR():查找位置
11.3 数学函数
ABS():绝对值CEIL():向上取整FLOOR():向下取整ROUND():四舍五入RAND():随机数FORMAT():格式化
11.4 系统函数
version():版本database():当前库user():当前用户md5():加密ifnull():NULL 替换
十二、全文总结(必背)
12.1 增
sql
insert into 表(列) values(值),(值);
12.2 查
sql
select 列 from 表
where 条件
group by 分组
having 过滤
order by 排序
limit 分页;
12.3 改
sql
update 表 set 列=值 where 条件;
12.4 删
sql
delete from 表 where 条件;
truncate table 表;
12.5 核心规则
- WHERE 不能用别名,ORDER BY 可以
- NULL 必须用 IS NULL
- TRUNCATE 清空并重置自增
- HAVING 必须在 GROUP BY 之后
- 聚合函数自动忽略 NULL
十三、结束语
只要把这篇博客吃透,你就已经掌握了 90% 的数据库开发技能,无论是写业务、做报表、考试、面试,都能轻松应对。

总结
以上就是今天要讲的内容,本文简单记录了数据结构学习内容,仅作为一份简单的笔记使用,大家根据注释理解,您的点赞关注收藏就是对小编最大的鼓励!