SQL递归查询实战 WITH子句实现树形结构遍历

使用 RECURSIVE 很容易使用。

示例:查询员工的组织结构。
SQL 与递归依赖 AS ( -
锚点 SELECT id, name, manager_id, 1 AS 级别 来自员工 WHERE 名称 = '爱丽丝' 结合一切 -
递归 选择 e.id、e.name、e.manager_id、s.level + 1 来自员工 INNER JOIN 依赖于 s ON e.manager_id = s.id ) 选择 ID、姓名、manager_id、级别 来自下属 按级别、ID 排序;
传统 JOIN 的陷阱。

多层JOIN连接麻烦。

效率低下。

用递归清除。

层级关系直接表达。

谨防无限循环。

UNION ALL 优先。

良好的表现。

解决树结构。

有很多真实的场景。

BOM易于扩展。

注释嵌套。

文件系统模拟。

供应链可追溯性。

路线搜索很容易。

请不要做得太过分。

数据库里的WITH语句

WITH 语句是 SQL 的 CTE。

CTE 创建临时结果集。

临时结果集可以稍后使用。

提高 SQL 查询的清晰度。

增强可读性。

复杂的问题逐步实施。

employee表,列包括employee_id、name、manager_id、salary。

示例1 :基本用法。

工资高于5 000的员工问题。

按工资排序。

定义 CTEhigh_employee_salary。

存储符合条件的员工信息。

主要查询的参考和排序。

示例 2 :递归 CTE。

处理树结构。

就像组织结构图一样。

经理和所有下属之间的等级关系问题。

CTE下级递归搜索。

管理所有下属。

示例 3 :多个 CTE。

在复杂查询中指定多个 CTE。

处理不同的中间步骤。

定义 high_pay_employee 和 CTES 经理。

最后结合查询。

优点:提高查询和结构的可读性。

复杂的任务被分解为简单的步骤。

易于理解和维护。

注意:CTE 是 SQL 的强大工具。

优化数据库查询。

正确使用 CTE 来简化复杂的查询。

提高效率。

通过示例掌握并使用CTE来优化查询。

sql中with的用法

有了,这个东西很方便。

就是这样,它是一个临时表。
对于大型查询,请先运行中间结果,然后再使用该结果。

比如查看2 02 2 年某个城市的销售数据,你想先过滤掉销量高的卖家,然后再查看他们的其他信息。

只需使用WITH。

首先创建一个临时表。
您可以为它们命名任何名称,例如 TopSales。

SELECT sales_id、sales_name、sales_amount
FROM sales_data
WHERE sale_date BETWEEN '2 02 2 -01 -01 ' AND '2 02 2 -1 2 -3 1 '
ORDER BY sales_amount DESC
LIMIT 1 0;
这是 TopSales,销售额最高的 1 0 个。

接下来,再次使用 TopSales。

SELECT sp.sales_id, sp.sales_name, sp.address, sp.phone
FROM TopSales ts
JOIN sales_person sp ON ts.sales_id = sp.sales_id;
看,先运行TopSales,然后直接使用TopSales。

不需要每次都写复杂的排序和定界。

这样看的话就清楚多了。

不需要每次都写完整的JOIN和WHERE。
使用
WITH,您实际上可以分离出中间步骤,使它们更易于查看。

复杂的查询确实用起来很舒服。

只是不要滥用它。
有时,不需要WITH也可以完成简单的查询。

这取决于。