
# 复用子查询
#### 功能描述
在执行select查询语句时，通过对同一子查询的结果进行缓存，并在查询的不同部分重复使用，避免重复计算相同的子查询，从而提高查询性能。
#### 语法格式
```
WITH cte_name AS (
    SELECT ...
    FROM table_name
WHERE ...
)
SELECT ...
FROM cte_name
WHERE ...
```
#### 关键字
表1关键字说明 
| **参数**     | **描述**        |
|:---|:---|
| cte_name   | 用户自定义的子查询名称。  |
| table_name | 执行子查询命令的表的名称。 |
   
#### 示例
- 示例1：基于表sales定义子查询sales_data，查询销售金额大于100的商品，最后查询该子查询的所有数据。
  ```
  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的商品；最后合并两个子查询的数据。
  ```
  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;
  ```
  
 
