MySQL -- 基本查询

前言

🔥个人主页:不会c嘎嘎
📚专栏传送门:【数据结构】【C++】【Linux】【算法】【MySQL】
🐶学习方向:C++方向学习爱好者
⭐人生格言:谨言慎行,戒骄戒躁

每日一鸡汤:

"不要停下脚步,即使前路漫长且充满未知。每一个清晨都是世界的新生,每一次坚持都是对命运的挑战。你或许平凡,但绝不平庸;你或许慢,但绝不后退。别怕梦想太远,别怕黑夜太长,只要心中有光,再远的路也能走到天亮。命运从不辜负每一个咬牙坚持的灵魂,你流的每一滴汗水,都会在未来某个时刻开花结果"

目录

前言

目录

1.基本查询

2.表的增删查改

1.increase

1.Create

2.Insert

3.替换

2.Retrieve

1.select列

2.where条件

3.结果查询

3.update

4.delete

5.插入查询结果

6.聚合函数

结语


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)全列查询

-- 通常情况下不建议使用 * 进行全列查询:

  1. 查询的列越多,意味着需要传输的数据量越大;

  2. 可能会影响到索引的使用。(索引待后面讲解)

(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) 返回查询到的数据的 最小值,不是数字没有意义

结语

"你比自己想象的更强大。当生活给你一百个理由放弃时,你要找到一千个理由坚持下去。别让别人的质疑成为你的枷锁,别让暂时的失败定义你的未来。你要相信,所有看似不起波澜的日复一日,都会在某一天让你看到坚持的意义。别怕路远,只怕你停;别怕梦大,只怕你不想。你生来就有光,只是有时候,你得自己点燃它。"

以上就是本期博客的全部内容,感谢各位的阅读以及观看。如果内容有误请大佬们多多指教,一定积极改进,加以学习。

相关推荐
p***h6431 小时前
从无到有:MongoDB事务的演进之路
数据库·mongodb
E***U9452 小时前
MySQL自然语言处理应用
数据库·mysql
计算机毕业设计小途2 小时前
计算机毕业设计推荐:基于SpringBoot的水产养殖管理系统【Java+spring boot+MySQL、Java项目、Java毕设、Java项目定制定做】
java·spring boot·mysql
洛_尘2 小时前
MySQL 2:库的操作
数据库·mysql
码农101号3 小时前
Linux - 达梦数据库的安装
数据库
l1t3 小时前
使用DuckDB SQL求解Advent of Code 2024第9题 磁盘碎片整理
数据库·sql·算法·duckdb·advent of code
光之梦3 小时前
《openGauss全密态与防篡改账本数据库:云上数据安全与可信的新范式》
mysql
Z***u6593 小时前
MySQL物联网开发
数据库·mysql
Wang's Blog3 小时前
MongoDB小课堂: 容器化部署与操作综合指南
数据库·mongodb