《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
🎬 艾莉丝的简介:

文章目录

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们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
往期回顾:
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2401_89899187/article/details/163141581





