公用表表达式(Common Table Expression,简称CTE)是SQL语言中的一种特性,它允许用户定义一个临时的结果集,这个结果集可以被多次引用。CTE在SQL中相当于一个临时视图,但它与视图的不同之处在于,CTE可以直接在查询语句中使用,而不需要先创建一个单独的视图。
CTE的主要特点包括:
1. 递归查询:CTE可以递归查询自身,这在处理层次数据结构(如组织结构、文件系统等)时非常有用。
2. 简化查询:使用CTE可以使查询语句更加清晰和易于理解,尤其是当查询涉及到复杂的子查询时。
3. 性能优化:在某些情况下,使用CTE可以提高查询的性能,因为数据库优化器可以更好地理解查询逻辑。
CTE的基本语法如下:
```sql
WITH CTE_NAME AS (
SELECT column1, column2, ...
FROM table1
WHERE condition
...
)
SELECT column1, column2, ...
FROM CTE_NAME
WHERE condition
...
```
这里,`CTE_NAME` 是CTE的名称,`SELECT`语句定义了CTE中的数据结构。在CTE之后,可以像访问普通表一样使用CTE。
举个例子,假设我们有一个名为`Employees`的表,包含员工信息,我们想要查询每个部门的平均工资,可以使用CTE如下:
```sql
WITH DepartmentAverage AS (
SELECT DepartmentID, AVG(Salary) AS AverageSalary
FROM Employees
GROUP BY DepartmentID
)
SELECT DepartmentID, AverageSalary
FROM DepartmentAverage
ORDER BY AverageSalary DESC;
```
在这个例子中,`DepartmentAverage` 是一个CTE,它计算了每个部门的平均工资。然后,我们从这个CTE中选择数据并按平均工资降序排列。