当前位置: 代码网 > it编程>数据库>Mysql > MySql学习的一大重点:基本查询

MySql学习的一大重点:基本查询

2026年07月30日 Mysql 我要评论
1 ~> 数据插入(create)1.1 基础 insert 插入概念insert 用于向表中插入新行数据,支持指定列插入、全列插入、多行批量插入;into关键字在 mysql 中可省略(非标准

1 ~> 数据插入(create)

1.1 基础 insert 插入

概念

insert 用于向表中插入新行数据,支持指定列插入、全列插入、多行批量插入;into关键字在 mysql 中可省略(非标准 sql 语法)。

代码示例

单行指定列插入

-- 仅向指定列插入数据,未指定的列取默认值或null
insert into students (id, sn, name) 
values (10, 124, '关羽');

单行全列插入

-- 必须严格匹配表定义的列顺序,传入所有列的值
insert into students 
values (1, 123, '张飞', '4567890');

多行批量插入

-- 单次提交多行数据,性能远高于多次单行插入
insert into students (id, sn, name, qq)
values 
  (13, 127, '许攸', '10423456'),
  (14, 128, '许褚', '12333445'),
  (15, 129, '诸葛亮', '3213456');

1.2 插入否则更新(on duplicate key update)

概念

当插入数据触发主键或唯一键冲突时,不抛出报错,转而执行 update 更新指定字段。

  • 正常插入:row_count()返回 1
  • 发生字段更新:row_count()返回 2
  • 更新值与原值完全一致:row_count()返回 0

代码示例

-- id=18为主键,若已存在则更新sn、name、qq字段
insert into students (id, sn, name, qq)
values (18, 134, '貂蝉', '1112222')
on duplicate key update 
  sn = 134,
  name = '貂蝉',
  qq = '11133333';
-- 查看上一次dml语句影响的行数
select row_count();

1.3 replace 替换插入

概念

replace into执行逻辑:

  1. 尝试插入数据;
  2. 若无主键 / 唯一键冲突,直接插入(影响 1 行);
  3. 若发生冲突,先删除旧行,再插入新行(影响 2 行,自增 id 会发生跳跃)。

核心区别:replace 包含删除行为,会触发删除触发器、影响外键级联,不可与on duplicate key update随意混用。

代码示例

-- sn为唯一键,若140已存在则删除旧行后插入新行
replace into students (sn, name, qq)
values (140, '许攸', '321456213');

2 ~> select 检索基础

2.1 基础查询形式

概念

  • 全列查询:使用*返回表中所有列,生产环境强烈不推荐,会增大数据传输量、可能导致索引失效。
  • 指定列查询:明确列出所需字段,性能更优、可读性更强。

代码示例

-- 全列查询(不推荐)
select * from exam_result;
-- 指定列查询
select id, name, math from exam_result;

2.2 表达式查询与别名

概念

select 后支持字段、常量、运算表达式、函数;可通过as关键字为列设置别名,as可省略。

代码示例

-- 计算三科总分并设置别名total
select 
  name,
  math,
  chinese + math + english as total 
from exam_result;
-- 省略as的别名写法
select 
  name 姓名,
  math 数学,
  chinese + math + english 总分 
from exam_result;

2.3 结果去重

概念

distinct对查询结果的指定列进行去重;多列时按多列组合值去重。

代码示例

-- 对数学成绩去重,相同分数仅保留一条
select distinct math from exam_result;

3 ~> where 条件筛选

3.1 比较运算符

运算符说明注意事项
>, >=, <, <=大小比较支持数值、字符串、日期类型
=等于null 不安全,null = null结果为 null
<=>等于null 安全,null <=> null结果为 true
!=, <>不等于null 不安全
between a and b范围匹配闭区间[a, b]
in (v1, v2, ...)集合匹配任意一个匹配即返回真
is null判断为 null专门用于 null 值判断
is not null判断不为 null专门用于 null 值判断
like模糊匹配%匹配任意多个字符,_匹配任意 1 个字符

3.2 逻辑运算符

运算符说明
and逻辑与,所有条件同时满足才为真
or逻辑或,任意一个条件满足即为真
not逻辑非,对条件结果取反

3.3 核心规则:where 不可使用 select 别名

原理

sql 单表执行顺序中,where 执行阶段早于 select,执行 where 时列的别名尚未生成,因此无法识别别名。

错误示例

-- 报错:unknown column 'total' in 'where clause'
select name, chinese + math + english total 
from exam_result 
where total < 200;

正确写法

-- where中直接书写完整表达式
select name, chinese + math + english 总分 
from exam_result 
where chinese + math + english < 200;

3.4 筛选案例

-- 英语成绩低于60分的同学
select name, english from exam_result where english < 60;
-- 语文成绩在[80,90]分(between闭区间写法)
select name, chinese from exam_result where chinese between 80 and 90;
-- 数学成绩是58/59/98/99(in集合写法)
select name, math from exam_result where math in (58, 59, 98, 99);
-- 姓孙的同学(%模糊匹配)
select name from exam_result where name like '孙%';
-- 名字为两个字且姓孙(_单字符匹配)
select name from exam_result where name like '孙_';
-- 语文成绩 > 80 且不姓孙
select name, chinese from exam_result 
where chinese > 80 and name not like '孙%';
-- 查询name为null的记录
select * from test where name is null;

4 ~> order by 结果排序

4.1 排序基础

概念

对查询结果按指定字段排序,asc为升序(默认值,可省略),desc为降序。

  • null 值排序规则:mysql 中 null 视为小于所有非 null 值,升序时排在最前,降序时排在最后。

代码示例

-- 数学成绩升序(默认asc)
select name, math from exam_result order by math asc;
-- 数学成绩降序
select name, math from exam_result order by math desc;

4.2 多字段排序

概念

按多个字段排序,优先级从左到右:先按第一个字段排序,第一个字段值相同时,再按第二个字段排序,以此类推。

代码示例

-- 先按数学降序,数学同分则按英语升序,再同分按语文升序
select name, math, english, chinese 
from exam_result 
order by math desc, english asc, chinese asc;

4.3 排序与别名

原理

order by 执行阶段在 select 之后,因此可以使用 select 中定义的列别名。

代码示例

-- 使用总分别名进行降序排序
select name, chinese + math + english total 
from exam_result 
order by total desc;

5 ~> limit 分页筛选

5.1 三种语法形式

概念

limit 用于截取查询结果的前 n 条,或从指定位置开始截取 n 条,是实现分页的核心语法。

注意:mysql 中行下标从 0 开始

代码示例

-- 1. 取前3条结果
select * from exam_result limit 3;
-- 2. 从下标1开始,取3条(对应第2~4行数据)
select * from exam_result limit 1, 3;
-- 3. 标准写法:取3条,偏移量为1(语义更清晰,推荐使用)
select * from exam_result limit 3 offset 1;

5.2 分页业务实现

通用公式

n页(页码从 1 开始),每页展示size条: limit size offset (n - 1) * size

代码示例

-- 每页3条,查询第2页数据
select id, name, math, english, chinese 
from exam_result
order by id 
limit 3 offset 3;

6 ~> 核心原理:单表 sql 执行顺序

逻辑执行顺序(从先到后)

  1. from:确定数据来源表
  2. where:按条件筛选符合要求的行
  3. select:确定返回的列、计算表达式、生成列别名
  4. order by:对结果集进行排序
  5. limit:截取最终返回的结果行数

该顺序是理解 “别名能否使用” 的核心依据:where 在 select 前,不能用别名;order by、limit 在 select 后,可以用别名。

到此这篇关于【mysql】mysql学习的一大重点:基本查询(上)的文章就介绍到这了,更多相关mysql基本查询内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com