在SQL中,WITH关键字可用于创建临时结果集,也被称为公共表表达式(Common Table Expression, CTE)。CTE可以视为一种临时性的视图,只在当前查询中有效,这对于复杂查询的组织和分解非常有用。它可以用来创建一个或多个临时表(实际上并不是物理上的临时表,而是逻辑意义上的临时结果集),然后在主查询中多次引用这些临时结果。

以下是一个简单的使用WITH关键字构建临时表(CTE)的示例:

Sql

1-- 假设有一个员工表(Employees)和一个部门表(Departments)
2
3WITH ManagerCounts AS (
4    SELECT 
5        DepartmentID, 
6        COUNT(*) AS NumberOfManagers
7    FROM 
8        Employees
9    WHERE 
10        Position = 'Manager'
11    GROUP BY 
12        DepartmentID
13),
14DepartmentTotals AS (
15    SELECT 
16        d.ID AS DepartmentID, 
17        d.Name, 
18        COALESCE(mc.NumberOfManagers, 0) AS ManagersCount
19    FROM 
20        Departments d
21    LEFT JOIN 
22        ManagerCounts mc ON d.ID = mc.DepartmentID
23)
24
25SELECT 
26    DepartmentID, 
27    Name, 
28    ManagersCount
29FROM 
30    DepartmentTotals
31ORDER BY 
32    ManagersCount DESC;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

在这个示例中:

  • 我们首先创建了一个名为ManagerCounts的临时表(CTE),它计算了每个部门的经理数量。
  • 接下来,创建了另一个名为DepartmentTotals的临时表(CTE),它通过左连接Departments表和ManagerCounts临时表来获得每个部门及其对应的经理数量。
  • 最后,在主查询中,我们从DepartmentTotals临时表中选择所需列并按经理数量降序排列结果。

这样,WITH关键字不仅提高了查询的可读性,还能够简化大型查询的构建和调试过程。