云计算百科
云计算领域专业知识百科平台

【MYSQL】MYSQL学习的一大重点:基本查询(上)

头像

🎬 个人主页:艾莉丝努力练剑

❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬 艾莉丝的简介:

在这里插入图片描述


文章目录

  • 1 ~> 数据插入(Create)
    • 1.1 基础 INSERT 插入
      • 概念
      • 代码示例
    • 1.2 插入否则更新(ON DUPLICATE KEY UPDATE)
      • 概念
      • 代码示例
    • 1.3 REPLACE 替换插入
      • 概念
      • 代码示例
  • 2 ~> SELECT 检索基础
    • 2.1 基础查询形式
      • 概念
      • 代码示例
    • 2.2 表达式查询与别名
      • 概念
      • 代码示例
    • 2.3 结果去重
      • 概念
      • 代码示例
  • 3 ~> WHERE 条件筛选
    • 3.1 比较运算符
    • 3.2 逻辑运算符
    • 3.3 核心规则:WHERE 不可使用 SELECT 别名
      • 原理
      • 错误示例
      • 正确写法
    • 3.4 筛选案例
  • 4 ~> ORDER BY 结果排序
    • 4.1 排序基础
      • 概念
      • 代码示例
    • 4.2 多字段排序
      • 概念
      • 代码示例
    • 4.3 排序与别名
      • 原理
      • 代码示例
  • 5 ~> LIMIT 分页筛选
    • 5.1 三种语法形式
      • 概念
      • 代码示例
    • 5.2 分页业务实现
      • 通用公式
      • 代码示例
  • 6 ~> 核心原理:单表 SQL 执行顺序
    • 逻辑执行顺序(从先到后)
  • 结尾

在这里插入图片描述


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 后,可以用别名。



    结尾

    uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

    艾莉丝努力练剑

    C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主


    👀
    【关注】 跟随我一起深耕技术领域,见证每一次成长。

    ❤️
    【点赞】 让优质内容被更多人看见,让知识传递更有力量。


    【收藏】 把核心知识点存好,在需要时随时查、随时用。

    💬
    【评论】 分享你的经验或疑问,评论区一起交流避坑!

    不要忘记给博主“一键四连”哦!

    “今日练剑达成!”

    “技术之路难免有困惑,但同行的人会让前进更有方向。”

    结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

    往期回顾:

    【MYSQL】MYSQL学习的一大重点:表的约束

    🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡

    ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

    在这里插入图片描述

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【MYSQL】MYSQL学习的一大重点:基本查询(上)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!