当前位置: 首页 > 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.xdnf.cn/news/1164349.html

相关文章:

  • 基于VSCode的nRF52840开发环境搭建
  • C++高性能日志库spdlog介绍
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pywifi’问题
  • boost::asio 中 io_service与线程的关系
  • Netty中CompositeByteBuf 的addComponents方法解析
  • React-useEffect的闭包陷阱(stale closure)
  • CentOS 系统上部署一个简单的 Web 应用程序
  • 关键成功因素法(CSF)深度解析:从战略目标到数据字典
  • AK视频下载工具:免费高效,多平台支持
  • 计算机网络:概述层---计算机网络的性能指标
  • 【c++】leetcode438 找到字符串中所有字母异位词
  • 易语言+懒人精灵/按键中控群控教程(手机、主板机、模拟器通用)
  • Three.js 从零入门:构建你的第一个 Web 3D 世界
  • 2025最新版PyCharm for Mac统一版安装使用指南
  • 树链剖分-苹果树
  • Java基础教程(010):面向对象中的this和就近原则
  • 图片转 PDF三个免费方法总结
  • 解决win10下Vmware虚拟机在笔记本睡眠唤醒后ssh连接不上的问题
  • 【STM32】485接口原理
  • C语言-字符串数组
  • xformers包介绍及代码示例
  • mcu中的调试接口是什么?
  • https正向代理 GoProxy
  • 【C语言进阶】结构体练习:通讯录
  • Day07_网络编程20250721_大项目
  • 从 “能用“ 到 “好用“:中小制造企业数字化转型中的 IT 系统优化管理策略
  • 高性能I/O的终极武器:epoll深度解析与实战
  • 什么是GNN?——聚合、更新与循环
  • 注册表清理优化丨Wise RegistryCleaner_v11.1.10.725(官方赠品)
  • USRP采集信号转换为时频图数据集