《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 删除全列

相关推荐
心中有你02143 分钟前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川17 分钟前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组23 分钟前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制
发光小北36 分钟前
EtherNet/IP 转 ModbusTCP 网关现场应用中会遇到什么问题?
服务器·网络·tcp/ip
zhangjw341 小时前
1-5 PostgreSQL 数据类型全集:基础类型、字符串、数值、时间类型
数据库·postgresql
王中阳Go1 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
程序猿老A1 小时前
轻量云服务器总是卡,内存占比高?
运维·服务器
cnskylee2 小时前
【MySQL】麒麟V10 SP3系统安装MySQL-Commercial-8.0.46
数据库·mysql·adb
梦幻通灵2 小时前
修改MySQL数据库递增序列【持续更新】
数据库·mysql
liminla!2 小时前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法