前言

在Oracle数据库中,WITH子句(也成为“子查询因子化” 或“公共表表达式”,Common Table Expression, CTE)用于定义一个临时命名的结果集,这个结果集可以在后续的查询中引用。

一、基本语法

WITH sjtab AS (
		SELECT column1, column2
		FROM some_table
		WHERE condition
)
SELECT * FROM  sjtab;

各部分含义说明:

  • WITH:
    关键字,表示开始一个CTE定义
  • sjtab:
    你为这个临时结果集指定的名称(可以任意命名)
  • AS:
    关键字,连接名称和查询定义
  • 括号内的查询:
    定义临时结果集的实际查询

二、主要用途

1.提高可读性:

将复杂查询分解为更简单的部分

2.避免重复子查询:

可以多次引用同一个CTE而不需要重复编写

3.递归查询:

支持递归CTE,用于处理层次结构数据
示例:

WITH dept_costs AS (
    SELECT department_name, SUM(salary) dept_total
    FROM employees e, departments d
    WHERE e.department_id = d.department_id
    GROUP BY department_name
)
SELECT * FROM dept_costs
WHERE dept_total > (SELECT AVG(dept_total) FROM dept_costs)
ORDER BY department_name;

在这个例子中,dept_costs是一个CTE,它计算了每个部门的总薪资,然后在主查询中被引用两次。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐