在 Oracle SQL 中,WITH 子句用于定义一个或多个公共表表达式(CTE, Common Table Expression),然后可以在主查询中引用这些表达式。WITH 子句通常用于简化复杂查询的结构,增强可读性,并避免重复编写相同的子查询。
基本用法
WITH cte_name AS (
-- 子查询,也相当于我们定义的一个数据集变量
SELECT column1, column2
FROM table_name
WHERE conditions
)
-- 主查询
SELECT *
FROM cte_name
WHERE additional_conditions;
测试
假设我们有一个 employees 表,如下所示:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | John | Doe | 6000 | 10 |
2 | Jane | Smith | 8000 | 20 |
3 | Jim | Brown | 5500 | 10 |
4 | Jake | White | 7000 | 20 |
5 | Jill | Black | 6500 | 30 |
示例 1: 简单的 WITH 子句
查询每个部门的平均工资,然后查找那些平均工资高于 6000 的部门:
WITH department_salaries AS (
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP