SQLPathLab
MySQL 8.0 · 16 条

SQL 实战指南

每篇指南都展示实际结果或可核对的影响指标,明确区分正确性、效率、安全性和可读性改进。

01

SQL 书写顺序与实际执行顺序

理解 FROM、WHERE、GROUP BY、HAVING、SELECT 和 ORDER BY 的逻辑先后。

02

NULL 与三值逻辑为什么容易出错

NULL 不是空字符串,和 NULL 比较可能得到 UNKNOWN。

03

WHERE 和 HAVING 的真正区别

WHERE 筛选明细行,HAVING 筛选聚合后的分组。

04

JOIN 后数据为什么重复或减少

从结果粒度、连接键唯一性和未匹配行三个方向定位 JOIN 行数异常。

05

LEFT JOIN 条件写在 ON 还是 WHERE

右表条件的位置会决定未匹配的左表行是否保留。

06

COUNT(*)、COUNT(字段) 与 COUNT DISTINCT

三种统计回答的是行数、非空值数和不同值数。

07

GROUP BY 常见错误与排查方法

用结果粒度检查漏分组和过度分组,并理解 MySQL ONLY_FULL_GROUP_BY 报错。

08

OFFSET 分页为什么越来越慢

比较 OFFSET 与游标分页的扫描成本、稳定排序和数据变化下的翻页结果。

09

UPDATE 和 DELETE 的安全执行流程

先验证范围,再进入事务修改并检查受影响行数。

10

如何阅读并定位 SQL 错误信息

从错误类型和解析停止位置开始,把复杂查询缩小到最小可运行片段。

11

日期范围、月底和时间边界

使用半开区间处理整天整月,避免遗漏小数秒并保留索引机会。

12

使用 EXPLAIN 阅读查询计划

按访问方式、索引、预计行数和额外操作阅读 MySQL 8 EXPLAIN,并验证优化效果。

13

NOT IN 遇到 NULL:为什么结果突然为空

用三值逻辑解释 NOT IN 空结果,并为反连接选择可靠的 NOT EXISTS 写法。

14

每组 Top 1:全局 LIMIT 为什么不够

用窗口函数实现每组 Top 1/Top N,并明确并列、稳定排序与结果行数规则。

15

条件聚合:一次扫描计算多项指标

把重复子查询改为 SUM(CASE WHEN),让指标口径集中且可扩展。

16

每个对象的最新一行:DISTINCT 不能替代排序

用分区窗口明确“每个客户最新订单”的行级选择规则。