本专栏中的许多示例将基于以下员工表(employee)。只有少数例子将以其他表格为基础;在这些情况下,表格将与示例一起进行说明。
一、WITH
WITH AS 短语,也叫做子查询部分,定义一个SQL片断后,该SQL片断可以被整个SQL语句所用到。有的时候,with as 是为了提高SQL语句的可读性,减少嵌套冗余。
二、SQL例句
下一个SQL查询将创建一个包含公司前五名工资的员工数据的报告。这种报告必须根据给定的标准进行排序;在我们的示例中,排序标准将再次为工资降序:
WITH employee_ranking AS (SELECTemployee_id,last_name,first_name,salary,RANK() OVER (ORDER BY salary DESC) as rankingFROM employee
)
SELECTemployee_id,last_name,first_name,salary
FROM employee_ranking
WHERE ranking <= 5
ORDER BY ranking
上一个查询中的WITH子句创建了一个名为employee_ranking的CTE(公用表表达式),这是一种在主查询中使用的虚拟表。
CTE中的子查询使用函数RANK()来获得排名中每一行的位置。子句OVER(ORDER BY salary DESC)指示RANK()