WITH语句可能大家平时用的不多,第一次接触也是因为sql性能问题,做改造的时候在网上查到的,首先介绍一下这个语句的语法:
WITH custom_name AS (
-- 查表语句
)
-- 接下来的SQL语句可以引用custom_name作为一个临时表或视图
例如:
WITH table_2 AS (
SELECT id,name, SUM(money) AS totalmoney
FROM table_1
GROUP BY name
)
SELECT name, totalmoney
FROM table_2
WHERE totalmoney> 1000;
理解起来还是比较好理解,就是把查询结果集重新使用一个名字定义一下,然后去使用这个重新定义的名字执行进一步的查询,可以理解为中间结果集的概念。
WITH语句主要有以下几个作用:
1、代码重用:通过WITH语句,可以将一个复杂的查询拆分成多个简单的部分,每个部分都可以使用WITH语句创建临时的结果集。然后,后续的查询可以引用这些临时结果集,从而提高代码的可读性和维护性。
2、递归查询:WITH语句还支持递归查询。在递归查询中,WITH语句定义了一个初始的结果集,并通过逐步迭代地引用自身来构建更大的结果集,直到满足特定的终止条件为止。递归查询通常用于处理树形结构或层次结构的数据。
3、优化性能:在某些情况下,使用WITH语句可以带来性能优势。数据库管理系统可以对WITH语句进行优化,执行计划中可能会重用临时结果集,避免重复计算相同的子查询,从而提高查询性能。
4、逻辑清晰:使用WITH语句可以将复杂的查询逻辑拆分成简单的部分,使得查询语句的结构更加清晰,容易理解和维护。
在业务开发中使用的场景是递归查询一个机构的子机构,然后将所有子机构作为关联表,查询人员或者业务数据。还有一个场景就是将复杂的查询拆分成几个子查询,提升性能。