当前位置: 首页 > news >正文

MySQL:表的增删查改

目录

Create

单行数据

多行数据

插入否则更新

replace替换

Retrieve

select

全列查询

指定列查询

为查询结果指定别名

结果去重

where

模糊匹配

结果排序

升序

降序

筛选分页结果

Update

Delete

删除数据 

删除单行 

删除整张表数据

截断表

查询插入结果

聚合函数 

COUNT

SUM

AVG

MAX

MIN 

group by子句

having


在数据库操作中,CRUD是一个常用的缩写,代表了四种基本的数据操作:创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。

基于以下表来进行增删查改

CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT,gender ENUM('Male', 'Female') NOT NULL,class VARCHAR(50)
);

Create

语法:

INSERT [INTO] table_name [(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...

例如:

单行数据

INSERT INTO students (name, age, gender, class) VALUES ('Alice', 20, 'Female', 'Class 1');
INSERT INTO students (name, age, gender, class) VALUES ('Bob', 22, 'Male', 'Class 2');

多行数据

INSERT INTO students (name, age, gender, class) VALUES ('Alice', 20, 'Female', 'Class 1')
, VALUES ('Bob', 22, 'Male', 'Class 2');

插入否则更新

插入数据如果存在则更新 

INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...

 例如:

INSERT INTO students (name, age, class)
VALUES ('Alice', 20, 'Class 1')
ON DUPLICATE KEY UPDATEage = VALUES(age),class = VALUES(class);

replace替换

语法: 

REPLACE INTO 表名 (列1, 列2, ..., 列N)
VALUES (值1, 值2, ..., 值N);

 例如:

REPLACE INTO students (name, age, class)
VALUES ('Alice', 20, 'Class 3');

Retrieve

整体语法:

SELECT [DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

select

全列查询

SELECT * FROM 表名;

指定列查询

SELECT 列1, 列2, ... FROM 表名;

为查询结果指定别名

SELECT 列1 AS 别名1, 列2 [AS] 别名2, ... FROM 表名;

结果去重

SELECT DISTINCT 列1, 列2, ... FROM 表名;

where

比较运算符: 

逻辑运算符:

例如: 

SELECT * FROM students WHERE age = 20; 
SELECT * FROM students WHERE age <> 20;
SELECT * FROM students WHERE age > 20;
SELECT * FROM students WHERE age >= 20;

模糊匹配

LIKE用于模糊匹配字符串,支持以下通配符:

  • %:匹配任意数量的字符(包括 0 个字符)。
  • _:匹配单个字符。
SELECT * FROM students WHERE name LIKE 'A%';

结果排序

基本语法:

SELECT 列名 FROM 表名
ORDER BY 列1 [ASC|DESC], 列2 [ASC|DESC], ...;

升序

SELECT * FROM 表名 ORDER BY 列名 [ASC];

降序

SELECT * FROM 表名 ORDER BY 列名 DESC;

筛选分页结果

语法:

SELECT 列名 FROM 表名
LIMIT 起始记录偏移量, 返回记录数量;

起始记录偏移量:从哪一条记录开始返回(从 0 开始计数)。

返回记录数量:最多返回的记录数量。

Update

update语句用于修改表中的数据。

你可以更新表中的一行或多行记录,或者更新特定列的值。

语法:

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

例如:

UPDATE students
SET name = 'Alice Smith', age = 22
WHERE id = 1;

将id=1的学生名字改为'Alice Smith',年龄改为22

Delete

删除数据 

delete语句用于从表中删除数据。

语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

例如:

删除单行 

DELETE FROM students
WHERE id = 2;

这样就删除了students表中当前行id=2的这一行

删除整张表数据

DELETE FROM table_name;

截断表

截断表TRUNCATE TABLE是一种快速清空表中所有数据的语句。

它与DELETE语句的主要区别在于,TRUNCATE的执行效率更高,因为它不会逐行删除记录,而是直接删除表并重新创建一个空表。 

语法:

TRUNCATE [TABLE] table_name

功能:

  • 只能对整表操作,不能像 DELETE 一样针对部分数据操作
  • TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
  • 会重置 AUTO_INCREMENT 项

查询插入结果

查询插入结果通常是指在执行INSERT操作后,获取刚刚插入的记录的相关信息 

语法:

INSERT INTO table_name [(column [, column ...])] SELECT ...

 例如:

CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT,class VARCHAR(50)
);CREATE TABLE archived_students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT,class VARCHAR(50)
);

创建两张表,并为students表中插入数据

INSERT INTO archived_students
SELECT * FROM students;

就可以将在students中查询到的数据插入到archived_students表中

聚合函数 

COUNT

COUNT函数用于计算表中行的数量,或者某个列中非NULL值的数量。

语法:

COUNT(*)
COUNT(列名)
COUNT(DISTINCT 列名)

例如:

SELECT COUNT(*) FROM students;

SUM

SUM函数用于计算数值列的总和。

语法:

SUM(列名)

例如:

SELECT SUM(age) FROM students;

AVG

AVG函数用于计算数值列的平均值。

语法: 

AVG(列名)

例如:

SELECT AVG(age) FROM students;

MAX

MAX函数用于找出数值列中的最大值。

语法: 

MAX(列名)

例如:

SELECT MAX(age) FROM students;

MIN 

MIN函数用于找出数值列中的最小值。

语法: 

MIN(列名)

例如:

SELECT MIN(age) FROM students;

group by子句

group by子句在 SQL 中用于将查询结果按指定列的值分组。 

语法: 

SELECT 列1, 列2, 聚合函数(列3)
FROM 表名
GROUP BY 列1, 列2;

例如: 

假设有如下表: 

id | name  | age | class
---|-------|-----|-------
1  | Alice | 20  | Class 1
2  | Bob   | 22  | Class 2
3  | Carol | 21  | Class 1
4  | Dave  | 23  | Class 2
5  | Eve   | 20  | Class 1

 我们可以对从class进行分组,这样就能分为两组,分别为Class1和Class2

SELECT class, COUNT(*) AS student_count
FROM students
GROUP BY class;

Class1有3行,Class2有2行,所以结果为: 

class    | student_count
---------|---------------
Class 1  | 3
Class 2  | 2

针对这里的聚合函数,我们如果想用条件来筛选(例如需要指定表中人的姓名为某某),这时候用where语句是会报错的,因为执行顺序where是在FROM之后GROUP BY之前的 

having

having子句用于对分组后的结果进行筛选,类似于where子句,但having是在分组后应用的。

例如:

找出学生数量大于2的班级 

SELECT class, COUNT(*) AS student_count
FROM students
GROUP BY class
HAVING COUNT(*) > 2;

select、from、where、group by、having执行的先后顺序为:

1. from

2. where

3. group by

4. having

5. select 

having是经常搭配group by使用的 


完 

http://www.lryc.cn/news/595227.html

相关文章:

  • DFS习题篇【上】
  • buntu 22.04 上离线安装Docker 25.0.5(二)
  • 宝塔访问lnmp项目,跳转不到项目根目录问题解决
  • 【每日算法】专题四_前缀和
  • BERT 的“池化策略”
  • 基于WebSocket的安卓眼镜视频流GPU硬解码与OpenCV目标追踪系统实现
  • day058-docker常见面试题与初识zabbix
  • docker 常见命令使用记录
  • 【docker】分享一个好用的docker镜像国内站点
  • 【图论】CF——B. Chamber of Secrets (0-1BFS)
  • 文本数据分析
  • 本地部署Dify、Docker重装
  • neuronxcc包介绍及示例代码
  • 【Java学习|黑马笔记|Day19】方法引用、异常(try...catch、自定义异常)及其练习
  • seata at使用
  • 深度学习 -- 梯度计算及上下文控制
  • 7月21日总结
  • registry-ui docker搭建私有仓库的一些问题笔记
  • 服务器后台崩溃的原因
  • 使用Langchain调用模型上下文协议 (MCP)服务
  • 【未限制消息消费导致数据库CPU告警问题排查及解决方案】
  • WEB前端登陆页面(复习)
  • 随笔20250721 PostgreSQL实体类生成器
  • Elasticsearch X-Pack安全功能未启用的解决方案
  • OpenEuler 22.03 系统上安装配置gitlab runner
  • 笔试——Day14
  • 【PTA数据结构 | C语言版】求单源最短路的Dijkstra算法
  • 打造自己的 Jar 文件分析工具:类名匹配 + 二进制搜索 + 日志输出全搞定
  • Laravel 后台登录 403 Forbidden 错误深度解决方案-优雅草卓伊凡|泡泡龙
  • PHP实战:从原理到落地,解锁Web开发密码