如何在 SQL 视图中使用子查询

在 SQL 视图中使用子查询并非一律可行,关键在于数据库版本、子查询类型以及优化器的处理方式。本文从能否直接写、何时用 WITH 改写、MySQL 5.7 的替代方案,到常见性能失速原因,梳理出一套更适合落地判断的写法与排查思路。

如何在 SQL 视图中使用子查询

Oracle 21c 中怎么用 ROW_NUMBER() 查询分组最新记录?

在 Oracle 21c 里,想查“每组最新一条记录”,核心不是单独使用 ROW_NUMBER(),而是先按分组键和时间等“新旧字段”做窗口排序,再取编号为 1 的行。本文同时说明它为何不能直接和 GROUP BY 混用、并列记录该换用什么函数,以及索引应如何配合。

Oracle 21c 中怎么用 ROW_NUMBER() 查询分组最新记录?

SQL 如何对 JSON 字段进行分组聚合

JSON 字段里的数组或对象,不能直接拿来做 `GROUP BY`。这篇文章把 MySQL 8.0+ 的 `JSON_TABLE()` 和 PostgreSQL 的 `jsonb_array_elements()` 拆开说明,并补上类型转换、空值过滤、分组维度选择这些最容易把统计结果做错的关键点。 JSON 字段里有数组或对象时,不能直接 GROUP BY 。正确做法是先展开成行,再按主键或提取字段分组。

SQL 如何对 JSON 字段进行分组聚合

PostgreSQL 15 中 SQL 触发器返回值怎么写:`RETURN NEW`、`RETURN NULL` 与特殊场景梳理

在 PostgreSQL 15 里,SQL 触发器函数的返回值不是形式问题,而是直接决定数据是否继续写入。本文按行级、语句级、`TRUNCATE` 与 `INSTEAD OF` 几类场景,梳理 `RETURN NEW`、`RETURN NULL` 的实际含义、常见报错和最容易被忽略的静默丢行风险。 写 PostgreSQL 15 触发器时,很多“数据没进去”并不是 SQL 本身的问题,而是触发器函数最后一行返回值写错了。

PostgreSQL 15 中 SQL 触发器返回值怎么写:`RETURN NEW`、`RETURN NULL` 与特殊场景梳理

SQL JOIN 如何让 NULL 值参与关联

SQL JOIN 默认不会把两边都是 NULL 的记录关联起来,因为 `NULL = NULL` 的结果是 `UNKNOWN`,而 JOIN 条件只接受 `TRUE`。本文从 SQL 三值逻辑讲清原因,再给出通用写法、数据库专用语法和应避免的替代方案。 在写 SQL JOIN 时,最容易让人误判的一类问题,就是两边字段明明都为 NULL ,结果却没有关联成功。

SQL JOIN 如何让 NULL 值参与关联

SQL 聚合前为什么要先对子表预汇总

`LEFT JOIN` 后直接做 `SUM`、`COUNT`,结果经常被放大,根源不在数据库,而在 JOIN 先扩行、聚合后执行的逻辑。本文用订单统计场景说明为什么要先对子表 `GROUP BY` 预汇总,再讲清过滤条件、`COALESCE`、`DISTINCT` 误区,以及 CTE 与子查询的选择方法。

SQL 聚合前为什么要先对子表预汇总

SQL 窗口函数怎么实现游标分页?

窗口函数适合给结果集编号,却不能承担游标分页的“从上一条继续取”的职责。本文拆开常见误区、正确 SQL 写法、窗口函数在分页中的辅助用法,以及 PostgreSQL、MySQL、SQLite、SQL Server 的实现差异。 很多 SQL 教程会把“窗口函数编号”和“游标分页”混在一起,结果写出来的语句不是直接报错,就是翻页时重复、漏数。

SQL 窗口函数怎么实现游标分页?

Debian 上 PHP 如何管理数据库:四种常见方案的安装、初始化与连接方式

在 Debian 上为 PHP 项目管理数据库,常见方案并不止一种。本文按 MySQL/MariaDB、PostgreSQL、SQLite、MongoDB 四类数据库梳理安装、启动、自启与初始化要点,并补充 PHP 连接方式和工具选择,方便你按项目场景快速判断。 在 Debian 上部署 PHP 项目时,数据库安装通常只要几条命令,但真正影响后续维护体验的,是选型是否合适、服务有没有正确初始化,以及 PHP 扩展和连。

Debian 上 PHP 如何管理数据库:四种常见方案的安装、初始化与连接方式