MySQL实现上下级递归的方法及其应用mysql上下级递归

说到MySQL处理树形数据,我其实对此有一些经验。
我记得有一次我们公司要建立一个员工管理系统,树形结构是必不可少的。
由于部门之间存在上下级关系,因此需要重复查询。

说到重复查询,这在 MySQL 中使用起来非常简单。
您必须有部门编号 (dept_id) 和父部门编号 (parent_id),例如您必须有一个名为 dept 的表。
然后,您可以使用 RECURSIVE 关键字来编写递归查询。

举个例子,我想检查从1 号部门开始的整个部门树,包括所有下属部门。
SQL 语句可能如下所示:
sql 递归子树(dept_id,parent_id,级别)AS( 选择部门 ID;父ID; 0 来自部门 其中部门 ID = 1 全联盟 选择 d.dept_id; d.parent_id; s.等级+1 来自部门 打开 d.parent_id = s.dept_id ) 从子树中选择;
在这行代码中,RECURSIVE 定义了一个临时结果集,其中包含所有部门及其级别信息。
UNION ALL 连接初始查询和迭代查询。
初始查询选择根节点(部门号为1 的部门),递归查询不断搜索该根节点的子节点。

在实际应用中,常用的有这种递归查询:
1 .获取某个节点的所有子节点。
例如,如果您想了解部门号为1 的所有子部门。
可以直接使用上面的递归查询。

2 节点的父节点得到这一切。
这有点不同。
诸如祖先之类的名字必须更改。
必须调整再治疗条件,以便能够找到所有上级部门。

3 获取节点的所有祖先或后代节点。
这也很简单。
所有的祖先或后代都可以找到,只要重复状态稍有变化即可。

一般来说,MySQL对树形数据的递归查询;特别是组织结构;这在处理诸如产品分类等层次关系之类的结构时特别有用。
使用这种方法,您可以轻松处理这些复杂的关系。
当然,当编写重复问题时,当数据量非常大时,因为回答问题可能会很耗时;您必须关注功能问题。
然而,如果设计正确,它可以成为一个强大的工具。

MySQL很难吗?入门介绍

开始使用 MySQL 并不难,但您确实需要了解数据库。

关系型数据库采用二维表来存储数据,如Oracle、SQLServer、MySQL等。

SQL分为三类: DDL 创建和删除、创建/删除/更改表。
检查、修改、删除DML数据,选择/插入/更新/删除。
DCL 管理权限,提交/回滚/授予/撤销。

描述规则: 它以分号结尾,并且不区分大小写。
对字符串使用单引号。
半角空格分隔单词。
不要对数字使用引号。

项目中大量使用了SQL。
先练习DDL,然后练习DML。
首先是本地环境,然后是线上环境。

SQL笔记-递归/树形查询

哦,说到递归查询,那是一种非常先进的数据库技术。
例如,我们需要一个名为“Employees”的员工表和一个名为“Departments”的部门表。
这两个表应该一起使用来构建树结构。

以Oracle为例,首先要定义表结构,填写员工和部门的详细信息。
接下来,您可以使用WITH 关键字WITH UNIONALL 创建递归查询。
我当时用的是Oracle 1 2 c,非常先进。
我记得当时写的递归查询类型,大概是这样的:
sql 与循环 EMPLOYEE_TREE(employee_id, 姓名, 部门_id, 级别) AS ( 选择员工 ID、姓名、部门 ID、0 员工人数 其中 Department_id = 'some_parent_department_id' 全联盟 选择 e.employee_id、e.name、e.department_id、et.level + 1 员工人数 INNER JOIN member_tree et ON e.department_id = et.employee_id ) 从 EMPLOYEE_TREE 中选择;
这件事很复杂。
当时我不太明白,后来慢慢就明白了。

MySQL的语法与Oracle的语法非常相似,但是使用了递归,只有MySQL 8 .0才支持递归。
我记得当时我用的是MySQL 5 .7 当时我不得不使用OLD SCHOOL方法,使用JOIN来模拟递归查询。

SQLServer也使用WITH关键字,但它必须与公共表表达式(CTE)一起使用。
这个CTE和Oracle的OFF语法有些类似,但是在细节上还是有一些区别的。

至于PostgreSQL,这个东西也是用递归的。
语法与Oracle和MySQL非常相似,但它支持更多的东西。
我记得当时我用的是PostgreSQL 9 .5 ,当时它的功能其实相当强大。
然而,无论是在 Oracle、MySQL、SQLServer 还是 PostgreSQL 中,递归查询都是创建树数据结构的好方法。
就像管理分层数据、构建家谱、组织结构图一样,都可以使用。
说实话,这东西用起来很有趣,但是你得慢慢想。