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

相关推荐
hey you~7 小时前
400电话选型技术测评:一个开发视角的线路质量评估方案
运维·网络·数据库·400电话·企业通信
筱羽_筱羽7 小时前
跟着“Ubuntu18.04/20.04编译Linux5.10.76+Xenomai-3.2.1+IgH”教程遇到的问题
linux·运维·ubuntu
Database_Cool_8 小时前
实时计数器/排行榜首选:阿里云 Tair 高并发数据结构实践
数据结构·数据库·阿里云·云计算
言乐68 小时前
Python视频相对亮度检测
数据库·python·计算机视觉·小程序·音视频
snow@li8 小时前
中台:中台即复用 / 理解企业架构中的能力抽象与分层共享 / 中台体系全景梳理 / 共性能力抽象、沉淀并复用
数据库
SelectDB技术团队8 小时前
AB 实验指标计算场景:Apache Doris / SelectDB 的技术能力、选型对比与实践
大数据·数据库·数据分析·apache·用户运营·apache doris·selectdb
法外狂徒18 小时前
将 Pi Agent 接入 HagiCode 的实践之路
服务器·前端·人工智能
snow@li8 小时前
数据库:B+ 树 / 数据库索引的底层支柱
数据库
ShineWinsu8 小时前
对于Linux:基于UDP实现简单聊天室功能
linux·c++·面试·udp·笔试·进程·简单聊天室
梦想的旅途28 小时前
企业微信二次开发实战:基于RPA接口的私域中台架构设计与选型指南
数据库·企业微信·rpa