《MySQL数据库基础》6.表的增删查改

💡Yupureki:个人主页

✨个人专栏:《C++》 《算法》《Linux系统编程》《高并发内存池》《MySQL数据库》

《个人在线OJ平台》《Linux网络编程》《CMake自动化构建工具》《Redis数据库》


🌸Yupureki🌸的简介:


目录

[1. Create](#1. Create)

[1.1 单行数据和全列插入](#1.1 单行数据和全列插入)

[1.2 多行数据和指定列插入](#1.2 多行数据和指定列插入)

[1.3 存在则更新](#1.3 存在则更新)

[1.4 替换](#1.4 替换)

[2. Retrieve](#2. Retrieve)

[2.1 基本查询](#2.1 基本查询)

[2.1.1 全列查询](#2.1.1 全列查询)

[2.1.2 指定列查询](#2.1.2 指定列查询)

[2.1.3 查询字段为表达式](#2.1.3 查询字段为表达式)

[2.1.4 为查询结果指明别名](#2.1.4 为查询结果指明别名)

[2.1.5 结果去重](#2.1.5 结果去重)

[2.2 WHERE条件](#2.2 WHERE条件)

[2.2.1 比较运算符](#2.2.1 比较运算符)

[2.2.2.1 语文不及格的同学](#2.2.2.1 语文不及格的同学)

[2.2.2.2 语文成绩在[80,90]之间的同学](#2.2.2.2 语文成绩在[80,90]之间的同学)

[2.2.2.3 语文成绩大于80或者数学成绩大于70的同学](#2.2.2.3 语文成绩大于80或者数学成绩大于70的同学)

[2.2.2.3 姓张的同学](#2.2.2.3 姓张的同学)

[2.2.2.4 语文成绩好于英语成绩的同学](#2.2.2.4 语文成绩好于英语成绩的同学)

[2.2.2.5 总分低于240的同学](#2.2.2.5 总分低于240的同学)

[2.2.2.6 姓张的同学,否则成绩大于230](#2.2.2.6 姓张的同学,否则成绩大于230)

[2.3 排序](#2.3 排序)

[2.3.1 按照语文成绩升序排序](#2.3.1 按照语文成绩升序排序)

[2.3.2 按照总分降序排序](#2.3.2 按照总分降序排序)

[2.4 筛选分页](#2.4 筛选分页)

[2.4.1 查询总分最高的同学](#2.4.1 查询总分最高的同学)

[2.4.2 查询总分第二名的同学](#2.4.2 查询总分第二名的同学)

[3. Update](#3. Update)

[3.1 将某同学的语文成绩变更为90](#3.1 将某同学的语文成绩变更为90)

[3.2 将某同学数学成绩变更为80,英文成绩变更为70](#3.2 将某同学数学成绩变更为80,英文成绩变更为70)

[3.3 将成绩倒数第一名的同学的语文成绩加20分](#3.3 将成绩倒数第一名的同学的语文成绩加20分)

[4. Delete](#4. Delete)

[4.1 删除某列](#4.1 删除某列)

[4.2 删除全列](#4.2 删除全列)


1. Create

语法:

sql 复制代码
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...

案例:创建一张学生表

sql 复制代码
CREATE TABLE students (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
sn INT NOT NULL UNIQUE COMMENT '学号',
name VARCHAR(20) NOT NULL,
qq VARCHAR(20)
);

1.1 单行数据和全列插入

1.2 多行数据和指定列插入

1.3 存在则更新

由于主键和唯一键的约束,如果两个建冲突则提示报错

因此如果发现键冲突时,可以进行更新

语法:

sql 复制代码
INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...

1.4 替换

  • 主键 或者 唯一键 没有冲突,则直接插入;
  • 主键 或者 唯一键 如果冲突,则删除后再插入

2. Retrieve

语法:

sql 复制代码
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

2.1 基本查询

2.1.1 全列查询

通常情况下,不建议全列查询。因为如果数据量过多,将全部的数据都显示出来对性能的开销很大

2.1.2 指定列查询

2.1.3 查询字段为表达式

2.1.4 为查询结果指明别名

2.1.5 结果去重

出现某字段重复的列

对结果去重

2.2 WHERE条件

WHERE条件的本质是筛选,相当于if条件判断

符合条件的数据才会被显示出来

运算符:

类别 运算符 说明 示例
比较运算符 = 等于 WHERE age = 18
<=> NULL 安全的等于(NULL <=> NULL 为 1) WHERE col <=> NULL
<> / != 不等于 WHERE status <> 'closed'
< 小于 WHERE price < 100
<= 小于等于 WHERE price <= 100
> 大于 WHERE price > 100
>= 大于等于 WHERE price >= 100
逻辑运算符 AND / && 逻辑与 WHERE a=1 AND b=2
OR / ` `
NOT / ! 逻辑非 WHERE NOT (a=1)
XOR 逻辑异或(一真一假时为真) WHERE a=1 XOR b=2
区间判断 BETWEEN ... AND ... 在闭区间内(包含边界) WHERE age BETWEEN 18 AND 30
NOT BETWEEN ... AND ... 不在区间内 WHERE age NOT BETWEEN 18 AND 30
集合成员 IN (...) 等于列表中的任一值(也支持子查询) WHERE status IN ('open','pending')
NOT IN (...) 不等于列表中任何值 WHERE id NOT IN (1,2,3)
空值判断 IS NULL 是空值 WHERE email IS NULL
IS NOT NULL 不是空值 WHERE email IS NOT NULL
模式匹配 LIKE 通配符匹配(% 任意多字符,_ 单字符) WHERE name LIKE 'A%'
NOT LIKE 不匹配 WHERE name NOT LIKE '%test%'
REGEXP / RLIKE 正则表达式匹配 WHERE email REGEXP '^[a-z]+@'
NOT REGEXP 正则不匹配 WHERE email NOT REGEXP 'spam'
布尔值判断 (8.0.16+) IS TRUE 值为真 WHERE active IS TRUE
IS FALSE 值为假 WHERE active IS FALSE
IS UNKNOWN 值为 NULL(结果等价于 IS NULL WHERE active IS UNKNOWN
子查询运算符 EXISTS (子查询) 子查询是否返回至少一行 WHERE EXISTS (SELECT 1 FROM orders WHERE uid=u.id)
NOT EXISTS (子查询) 子查询一行都没返回 WHERE NOT EXISTS (SELECT 1 FROM blacklist WHERE id=u.id)
表达式 比较符 ANY (子查询) 满足子查询中任一值(比较符可为 >,<,=,<> 等) WHERE score > ANY (SELECT score FROM exams)
表达式 比较符 ALL (子查询) 必须满足子查询得到的所有值 WHERE score > ALL (SELECT score FROM exams)
其他特殊运算符 MEMBER OF (...) (8.0.17+) 值是否属于 JSON 数组 WHERE 'apple' MEMBER OF(fruits_arr)
SOUNDS LIKE 发音相似比较(内部调用 SOUNDEX() WHERE name SOUNDS LIKE 'John'
&, ` , ^`, `~` 位运算符(按位与、或、异或、取反)

2.2.1 比较运算符

案例:

sql 复制代码
CREATE TABLE `exam` (
  `name` varchar(20) DEFAULT NULL,
  `chinese` int DEFAULT NULL,
  `math` int DEFAULT NULL,
  `english` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
2.2.2.1 语文不及格的同学
2.2.2.2 语文成绩在[80,90]之间的同学
2.2.2.3 语文成绩大于80或者数学成绩大于70的同学
2.2.2.3 姓张的同学
2.2.2.4 语文成绩好于英语成绩的同学

2.2.2.5 总分低于240的同学

2.2.2.6 姓张的同学,否则成绩大于230

2.3 排序

  • ASC 为升序(从小到大)
  • DESC 为降序(从大到小)
  • 默认为 ASC
sql 复制代码
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

2.3.1 按照语文成绩升序排序

2.3.2 按照总分降序排序

2.4 筛选分页

从0开始,筛选n条结果

sql 复制代码
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n

从s开始,筛选n条结果

sql 复制代码
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n

2.4.1 查询总分最高的同学

2.4.2 查询总分第二名的同学

3. Update

语法:

sql 复制代码
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

3.1 将某同学的语文成绩变更为90

3.2 将某同学数学成绩变更为80,英文成绩变更为70

3.3 将成绩倒数第一名的同学的语文成绩加20分

4. Delete

语法:

sql 复制代码
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

4.1 删除某列

4.2 删除全列

相关推荐
一拳一个娘娘腔1 小时前
别让工具成为摆设:写给新手的 Kali Linux 命令“破壁”指南
linux
北顾笙9801 小时前
MySQL-day1
数据库·mysql
CDN3602 小时前
【硬核架构】2026年服务器运维:Rust重写核心组件与eBPF内核观测的实战
运维·服务器·架构
Yupureki10 小时前
《Linux网络编程》8.网络层IP原理
linux·运维·服务器·网络·ip
大厂数码评测员10 小时前
免费菜谱管理小程序怎么做才顺手:从情侣、个人、家庭三类场景拆需求和实现
服务器·小程序·apache
阿波罗尼亚10 小时前
数据库序列(Sequence)
数据库
yyuuuzz10 小时前
aws亚马逊入门常见认知误区
运维·服务器·网络·云计算·github·aws
Junsir大斗师11 小时前
Nginx服务器代理Postgresql-16后端数据库
数据库·nginx
Je1lyfish11 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法