当前位置: 首页 > 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.dtcms.com/a/290069.html

相关文章:

  • 【跨国数仓迁移最佳实践2】MaxCompute SQL执行引擎对复杂类型处理全面重构,保障客户从BigQuery平滑迁移
  • VUE如何设置语音
  • 【实践篇】基于.venv 的 ComfyUI 环境同配置迁移:pyvenv.cfg 路径修改法
  • leetcode-sql-627变更性别
  • 植物根茎切片图像处理与分析系统开发
  • 【大模型】结构化提示词:让AI高效完成复杂任务的“编程语言”
  • 虚拟机扩展磁盘容量后扩展分区大小
  • 部署 Zabbix 企业级分布式监控
  • 【图像处理基石】什么是相机的内外参数?
  • 在Windows Server 2012 R2中安装与配置IIS服务并部署mssql靶机教程
  • 在Web API 开发中践行Security by Default原则
  • 【操作篇】群晖NAS用root权限直接访问系统分区文件
  • 4x4矩阵教程
  • channel_up和lane_up
  • OpenLayers 入门指南【三】:API概要
  • MetaGPT源码剖析(三):多智能体系统的 “智能角色“ 核心实现——Role类
  • GoLang教程005:switch分支
  • wordle game(猜词游戏)小demo【react + ts】
  • 子网划分核心原理 (网络原理1)
  • 配置 Nginx 反向代理
  • 微信小程序服务端快速对接指南(java版)
  • 本地生活服务 app 同城信息发布系统搭建
  • 文件的写出操作|文件的追加写入操作|文件操作的综合案例
  • BERT 的“池化策略”
  • 基于SpringBoot和leaflet-timeline-slider的历史叙事GIS展示-以哪吒2的海外国家上映安排为例
  • 技能学习PostgreSQL中级专家
  • 云原生安全工具:数字基础设施的免疫长城
  • 解码视觉体验:视频分辨率、屏幕尺寸、屏幕分辨率与观看距离的科学关系
  • 【Linux庖丁解牛】— 线程控制!
  • iOS 加固工具有哪些?快速发布团队的实战方案