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 行,自增 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 执行顺序
逻辑执行顺序(从先到后)
- FROM:确定数据来源表
- WHERE:按条件筛选符合要求的行
- SELECT:确定返回的列、计算表达式、生成列别名
- ORDER BY:对结果集进行排序
- LIMIT:截取最终返回的结果行数
该顺序是理解 “别名能否使用” 的核心依据:WHERE 在 SELECT 前,不能用别名;ORDER BY、LIMIT 在 SELECT 后,可以用别名。
到此这篇关于【MYSQL】MYSQL学习的一大重点:基本查询(上)的文章就介绍到这了,更多相关mysql基本查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
MySQL中SQL连接操作左连接查询(LEFT JOIN)示例详解
这篇文章主要给大家介绍了关于MySQL中SQL连接操作左连接查询(LEFT JOIN)的相关资料,左连接(LEFT JOIN)是SQL中用于连接两个或多个表的一种操作,它返回左表的所有行,并根据连接条件从右表中匹配行,需要的朋友可以参考下2024-12-12
MySQL 查询优化器 (Query Optimizer) 的使用小结
本文主要介绍了MySQL 查询优化器的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2026-03-03
ubuntu linux下使用Qt连接MySQL数据库的方法
Linux下完整的MySQL开发需要安装服务器端,如果安装客户端也没什么不好。直接在软件中心搜mysql,把client和server选上。2011-08-08


最新评论