--- title: SQL高阶用法 date: 2025-12-21 --- # 一、WITH ## 1.1 定义   SQL 中的WITH子句也被称为**公用表表达式**(CTE,Common Table Expression),它的作用是**在执行主查询之前,先定义一个临时的结果集,这个结果集可以在后续的查询中被多次引用**,就像一个临时表一样。它能让复杂的 SQL 查询变得更清晰、更易读,还能简化嵌套查询的逻辑。 ## 1.2 使用 ```sql -- 定义第一个CTE:数学高分学生 WITH math_high_score AS ( SELECT name, score FROM student_score WHERE subject = '数学' AND score > 85 ), -- 定义第二个CTE:语文高分学生 chinese_high_score AS ( SELECT name, score FROM student_score WHERE subject = '语文' AND score > 85 ) -- 主查询:查询既在数学高分又在语文高分的学生 SELECT m.name FROM math_high_score m JOIN chinese_high_score c ON m.name = c.name; ```   递归 CTE: ```sql WITH recursive dept_hierarchy AS ( -- 锚点成员:查询顶级部门(parent_id为NULL) SELECT dept_id, dept_name, parent_id, 1 AS level FROM department WHERE parent_id IS NULL UNION ALL -- 递归成员:查询子部门,关联自身的dept_id和parent_id SELECT d.dept_id, d.dept_name, d.parent_id, dh.level + 1 AS level FROM department d JOIN dept_hierarchy dh ON d.parent_id = dh.dept_id ) -- 主查询:获取所有部门的层级 SELECT * FROM dept_hierarchy; ```