MySQL基础教程——查询操作(上)

@


在了解了表的约束后,我们现在来学习关于表的核心操作查询。

一、基本查询操作

(1)创建Create

针对该表进行操作。
在这里插入图片描述

1、单行全列插入

insert into students values(101, 10001, 'aaa', '11111');

2、多行指定列插入

nsert into students (id,class,name) values(102, 10002, 'bbb'),(103, 10003, 'ccc');

结果查看:
在这里插入图片描述

3、插入否则更新

由于主键冲突的插入失败:
在这里插入图片描述
同步更新操作:

insert into students (id, class, name) values (100, 10010, 'ddd') on duplicate key update class = 10010, name = 'ddd';

4、替换

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

replace into students(class,name) values(20001, 'bbb');

结果查看:
在这里插入图片描述

(2)读取Retrieve

1、select

对以下表进行操作:
在这里插入图片描述

全列查询

select * from exam_result;

在这里插入图片描述

指定列查询

select id,name,Chinese from exam_result;

在这里插入图片描述

查询字段为表达式

select id, name, Chinese + Math + English from exam_result;

在这里插入图片描述

为查询结果指定别名

select id, name, Chinese + Math + English tolal from exam_result;

在这里插入图片描述

结果去重

select distinct math from exam_result;

2、where

在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)

因此在where语句加入相应的逻辑判断条件便可根据相应的逻辑查询数据。

如:查询英语不及格的同学及英语成绩 ( < 60 )
在这里插入图片描述
查询a开头的
在这里插入图片描述
查询a开头但后面只跟一个字符的
在这里插入图片描述

3、结果排序order by

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
select ... from table_name [WHERE ...]
order by column [ASC|DESC], [...];

注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的。

使用例子:同学及数学成绩,按数学成绩升序显示
在这里插入图片描述

4、筛选分页结果

从 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;

分页筛选能帮助我们在对未知表进行查询时,避免因为表中数据过大,查询全表数据导致数据库卡死。

使用例子:按 id 进行分页,每页 2 条记录,分别显示 第 1、2 页
在这里插入图片描述

(2)更新Update

update table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:将aaa同学的英语成绩变更为 80 分
在这里插入图片描述

(3)删除Delete

delete from table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:删除aaa同学的考试成绩
在这里插入图片描述
如果没有where语句将删除整张表的数据。

截断表

truncate [TABLE] table_name

只能对整表操作,不能像 DELETE 一样针对部分数据操作;实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚;且会重置 AUTO_wINCREMENT 项

(4)插入查询结果

INSERT INTO table_name [(column [, column ...])] SELECT ...

(5)聚合函数

函数 说明
COUNT([DISTINCT] expr) 返回查询到的数据的 数量
SUM([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr) 返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr) 返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr) 返回查询到的数据的 最小值,不是数字没有意义

案例:有多少个同学的考试成绩
在这里插入图片描述

(6)group by子句的使用

在select中使用group by 子句可以对指定列进行分组查询

select column1, column2, .. from table group by column;

在group by子句中having经常和group by搭配使用,作用是对分组进行筛选。

写在最后:在MySQL中子句执行顺序

子句执行顺序 作用
1 FROM 确定数据源,包括多表关联(JOIN)和子查询
2 ON 执行 JOIN 的连接条件
3 JOIN 进行表连接操作(如果是外连接,这里补充外部行)
4 WHERE 对行数据进行过滤(分组前的筛选)
5 GROUP BY 对过滤后的数据进行分组
6 HAVING 对分组后的结果进行过滤(分组后的筛选)
7 SELECT 选择要返回的列,计算表达式和聚合函数
8 DISTINCT 对结果去重
9 ORDER BY 对最终结果进行排序
10 LIMIT 限制返回的行数
posted @ 2026-08-19 15:47  _梦影  阅读(5)  评论(0)    收藏  举报