公用表表达式(或通用表表达式)简称为CTE(Common Table Expressions)。CTE是一个命名的临时结果集,作用范围是当前语句。CTE可以理解成一个可以复用的子查询,当然跟子查询还是有点区别的,CTE可以引用其他CTE,但子查询不能引用其他子查询。所以,可以考虑代替子查询。
1. 普通公用表表达式
WITH CTE名称AS (子查询)SELECT|DELETE|UPDATE 语句;
查询所有有员工的部门的部门信息
子查询
SELECT * FROM departments
WHERE department_id IN (
SELECT DISTINCT department_id
FROM employees);
公用表表达式
WITH `cte_test`
AS
(SELECT DISTINCT department_id FROM emp)
SELECT *
FROM departments d JOIN cte_test e
ON d.department_id = e.department_id;
2. 递归的公用表表达式
递归公用表表达式也是一种公用表表达式,只不过,除了普通公用表表达式的特点以外,它还有自己的特点,就是可以调用自己。
WITH RECURSIVE
CTE名称 AS (子查询)
SELECT|DELETE|UPDATE 语句;
