前言
🔥个人主页:不会c嘎嘎
📚专栏传送门:【数据结构】 、【C++】 、【Linux】、【算法】、【MySQL】
🐶学习方向:C++方向学习爱好者
⭐人生格言:谨言慎行,戒骄戒躁每日一鸡汤:
"不要停下脚步,即使前路漫长且充满未知。每一个清晨都是世界的新生,每一次坚持都是对命运的挑战。你或许平凡,但绝不平庸;你或许慢,但绝不后退。别怕梦想太远,别怕黑夜太长,只要心中有光,再远的路也能走到天亮。命运从不辜负每一个咬牙坚持的灵魂,你流的每一滴汗水,都会在未来某个时刻开花结果"


目录
1.基本查询
在 MySQL 中,对表进行基本查询主要使用 SELECT 语句。其中会用到很多的限定条件的语句比如:where,from,distinct语句,接下来我会带着大家从实例中学习这些语句的用法。
2.表的增删查改
1.increase
1.Create
语法:
INSERT [INTO] table_name [(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
示例:

2.Insert
(1)单行插入 + 全列插入

(2)多行数据 + 指定列插入

(3)插入否则更新
当插入数据的时候可能某一列面临主键或者唯一键冲突,此时可以选择性的同步更新操作:
语法:
INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
示例:
这里id冲突了所以插入失败了,使用插入否则更新的语句成功插入

通过 MySQL 函数获取受到影响的数据行数:
-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新
-- 通过 MySQL 函数获取受到影响的数据行数
SELECT ROW_COUNT();
3.替换
(1)当主键或者唯一键没有冲突时直接插入
(2)当主键或者唯一键如果冲突了,删除后再插入

2.Retrieve
1.select列
(1)全列查询
-- 通常情况下不建议使用 * 进行全列查询:
查询的列越多,意味着需要传输的数据量越大;
可能会影响到索引的使用。(索引待后面讲解)

(2)指定列查询
查询的时候指定列不需要按定义表的顺序查询

(3)查询字段为表达式
表达式包含一个字段:

表达式包含多个字段:

(4)为查询结果指定别名

(5)结果去重distinct
有重复数据:

数学成绩去重:

2.where条件
比较运算符:
|-------------------|---------------------------------------------------|
| 运算符 | 说明 |
| >, >=, <, <= | 大于,大于等于,小于,小于等于 |
| = | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
| <=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
| !=, <> | 不等于 |
| BETWEEN a0 AND a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
| IN (option, ...) | 如果是 option 中的任意一个,返回 TRUE(1) |
| IS NULL | 是 NULL |
| IS NOT NULL | 不是 NULL |
| LIKE | 模糊匹配。 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符 |
逻辑运算符
|-----|-------------------------------|
| AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
| OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
| NOT | 条件为 TRUE(1),结果为 FALSE(0 |
具体案例:
-- 创建表结构
CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT ' 同学姓名 ',
chinese float DEFAULT 0.0 COMMENT ' 语文成绩 ',
math float DEFAULT 0.0 COMMENT ' 数学成绩 ',
english float DEFAULT 0.0 COMMENT ' 英语成绩 '
);
-- 插入测试数据
INSERT INTO exam_result (name, chinese, math, english) VALUES
(' 唐三藏 ', 67, 98, 56),
(' 孙悟空 ', 87, 78, 77),
(' 猪悟能 ', 88, 98, 90),
(' 曹孟德 ', 82, 84, 67),
(' 刘玄德 ', 55, 85, 45),
(' 孙权 ', 70, 73, 78),
(' 宋公明 ', 75, 65, 30);
(1)查询英语不及格的同学(english < 60)

(2)语文成绩在 [80, 90] 分的同学及语文成绩
使用and:

使用between and:

(3)数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
使用or:

使用In:

(4)姓孙的同学 及 孙某同学:
% 匹配任意多个(包括 0 个)任意字符:

_ 匹配严格的一个任意字符:

(5)语文成绩好于英语成绩的同学

(6) 总分在 200 分以下的同学

(7) 语文成绩 > 80 并且不姓孙的同学

(8)孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

3.结果查询
语法:
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
(1) 同学及数学成绩,按数学成绩升序显示(ORDER BY 默认升序)
(2) 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
(3) 查询同学及总分,由高到低
ORDER BY 子句中可以使用列别名
(4) 查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示
(5)筛选分页结果
语法:
-- 起始下标为 0
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
建议:对未知表进行查询时,最好加一条 LIMIT 1 ,避免因为表中数据过大,查询全表数据导致数据库卡死
按 id 进行分页,每页 3 条记录,分别显示 第 1 、 2 、 3 页
第一页
第二页

第三页,如果结果不足 3 个,不会有影响

3.update
语法:
UPDATE table_name SET column = expr [, column = expr ...]
WHERE ...\] \[ORDER BY ...\] \[LIMIT ...
(1)对查询到的结果进行列值更新

(2)将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

(3)将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

(4)将所有同学的语文成绩更新为原来的 2 倍

4.delete
语法
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
(1)删除孙悟空同学的考试成绩

(2)删除整张表

5.插入查询结果
语法:
INSERT INTO table_name [(column [, column ...])] SELECT ...
6.聚合函数
COUNT([DISTINCT] expr) 返回查询到的数据的 数量
SUM([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr) 返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr) 返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr) 返回查询到的数据的 最小值,不是数字没有意义
结语
"你比自己想象的更强大。当生活给你一百个理由放弃时,你要找到一千个理由坚持下去。别让别人的质疑成为你的枷锁,别让暂时的失败定义你的未来。你要相信,所有看似不起波澜的日复一日,都会在某一天让你看到坚持的意义。别怕路远,只怕你停;别怕梦大,只怕你不想。你生来就有光,只是有时候,你得自己点燃它。"
以上就是本期博客的全部内容,感谢各位的阅读以及观看。如果内容有误请大佬们多多指教,一定积极改进,加以学习。






