数据库---Day5 数据表的增删改查

本系列可作为数据库学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。

点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励!

系列文章目录

JAVA初阶---------已更完

JAVA数据结构---------已更完

数据库---Day 1 数据库基础

数据库---Day2 数据库操作

数据库---Day3 数据类型

数据库---Day4 数据表的操作

数据库---Day5 数据表的增删改查


目录

目录

系列文章目录

目录

前言

一、本节学习目标

[二、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% 的数据库开发技能,无论是写业务、做报表、考试、面试,都能轻松应对。


总结

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

相关推荐
赵优秀一一2 小时前
对课上SQL使用技巧示例补充
数据库·sql
小陈工2 小时前
Python Web开发入门(三):配置文件管理与环境变量最佳实践
开发语言·jvm·数据库·python·oracle·性能优化·开源
数据库小组2 小时前
Oracle 到 PostgreSQL 迁移,2026 年如何实现平滑切换?
数据库·postgresql·oracle·数据同步·数据库迁移·oracle迁移·postgresql迁移
ANii_Aini2 小时前
mysql数据库保姆级安装教程-mac(一站式服务,提供资源)
数据库·sql·mysql·navicat
云飞云共享云桌面2 小时前
8人SolidWorks研发共享一台服务器——性能算力共享智能按需分配
运维·服务器·网络·数据库·3d·电脑
高梦轩2 小时前
MySQL 主从复制 + 读写分离
android·数据库
城数派2 小时前
1985-2024年各省市县不同土地覆盖类型的土地面积(Excel)
数据库·arcgis·信息可视化·数据分析·excel
ego.iblacat2 小时前
MySQL 全量、增量备份与恢复
数据库·mysql
Jane - UTS 数据传输系统2 小时前
从 WDO 成立看跨境数据同步:架构设计、技术拆解与最佳实践
大数据·数据库·国产替代·wdo·跨境数据同步·数据异构