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

 更新时间:2026年07月30日 09:11:19   作者:艾莉丝努力练剑  
学习MySQL的基本查询是数据库初学者必须要掌握的一项重要技能,基本查询主要包括选择(SELECT)语句的使用,这对于从数据库中检索数据至关重要,以下是一些基础的MySQL查询技巧和示例,帮助你开始使用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基本查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中SQL连接操作左连接查询(LEFT JOIN)示例详解

    MySQL中SQL连接操作左连接查询(LEFT JOIN)示例详解

    这篇文章主要给大家介绍了关于MySQL中SQL连接操作左连接查询(LEFT JOIN)的相关资料,左连接(LEFT JOIN)是SQL中用于连接两个或多个表的一种操作,它返回左表的所有行,并根据连接条件从右表中匹配行,需要的朋友可以参考下
    2024-12-12
  • MySQL中json_extract函数说明及使用方式

    MySQL中json_extract函数说明及使用方式

    今天看mysql中的json数据类型,涉及到一些使用,使用到了函数json_extract来,下面这篇文章主要给大家介绍了关于MySQL中json_extract函数说明及使用方式的相关资料,需要的朋友可以参考下
    2022-08-08
  • MySQL 查询优化器 (Query Optimizer) 的使用小结

    MySQL 查询优化器 (Query Optimizer) 的使用小结

    本文主要介绍了MySQL 查询优化器的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • Mysql的timeout以及python重连方式

    Mysql的timeout以及python重连方式

    这篇文章主要介绍了Mysql的timeout以及python重连方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 数据结构-树(三):多路搜索树B树、B+树

    数据结构-树(三):多路搜索树B树、B+树

    这篇文章主要介绍了多路搜索树B树、B+树,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MySql 8.0.16-win64 安装教程

    MySql 8.0.16-win64 安装教程

    本文通过图文并茂的形式给大家介绍了MySql 8.0.16-win64 安装教程 ,需要的朋友可以参考下
    2019-06-06
  • mysql 8.0.18 安装配置优化教程

    mysql 8.0.18 安装配置优化教程

    这篇文章主要为大家详细介绍了mysql 8.0.18 安装配置优化教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • ubuntu linux下使用Qt连接MySQL数据库的方法

    ubuntu linux下使用Qt连接MySQL数据库的方法

    Linux下完整的MySQL开发需要安装服务器端,如果安装客户端也没什么不好。直接在软件中心搜mysql,把client和server选上。
    2011-08-08
  • Mysql8.0递归查询的简单用法示例

    Mysql8.0递归查询的简单用法示例

    在项目中会遇到同一个表中保存着父子关系的数据,最常见的就是处理树形结构资源,这篇文章主要给大家介绍了关于Mysql8.0递归查询的简单用法,需要的朋友可以参考下
    2021-08-08
  • MySQL8.0.28数据库安装和主从配置说明

    MySQL8.0.28数据库安装和主从配置说明

    这篇文章主要介绍了MySQL8.0.28数据库安装和主从配置说明,具有很好的参考价值,希望杜大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论