更新时间:2025-04-02 GMT+08:00

复用子查询

功能描述

在执行select查询语句时,通过对同一子查询的结果进行缓存,并在查询的不同部分重复使用,避免重复计算相同的子查询,从而提高查询性能。

语法格式

1
2
3
4
5
6
7
8
WITH cte_name AS (
    SELECT ...
    FROM table_name
	WHERE ...
)
SELECT ...
FROM cte_name
WHERE ...

关键字

表1 关键字说明

参数

描述

cte_name

用户自定义的子查询名称。

table_name

执行子查询命令的表的名称。

示例

  • 示例1:基于表sales定义子查询sales_data,查询销售金额大于100的商品,最后查询该子查询的所有数据。
    1
    2
    3
    4
    5
    6
    WITH sales_data AS (
      SELECT product_name, sales_amount
      FROM sales
      WHERE sales_amount > 100
    )
    SELECT * FROM sales_data;
    
  • 示例2:基于表sales定义子查询sales_data1和sales_data1,其中sales_data1查询销售金额大于100的商品;sales_data2查询销售金额小于20的商品;最后合并两个子查询的数据。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    WITH sales_data1 AS (
      SELECT product_name, sales_amount
      FROM sales
      WHERE sales_amount > 100
    ),
    sales_data2 AS (
      SELECT product_name, sales_amount
      FROM sales
      WHERE sales_amount < 20
    )
    SELECT * FROM sales_data1
    UNION ALL
    SELECT * FROM sales_data2;