钟二网络头像

钟二网络

探索SQL查询技巧、Linux系统运维以及Web开发前沿技术,提供一站式的学习体验

  • 文章92531
  • 阅读1045714
首页 SQL 正文内容

树形菜单sql语句

钟逸 SQL 2025-02-24 19:57:39 23

树形菜单是一种树形结构的数据结构,常用于表示层级关系的数据。在数据库中,可以用SQL语句实现树形菜单的存储和查询。

创建树形菜单表

创建一个名为 tree_menu 的表,其中包含以下字段:

sql

CREATE TABLE tree_menu (

id INT NOT NULL AUTO_INCREMENT,

parent_id INT NOT NULL,

name VARCHAR(255) NOT NULL,

PRIMARY KEY (id),

FOREIGN KEY (parent_id) REFERENCES tree_menu (id)

);

插入树形菜单数据

以下是一个示例,展示如何插入树形菜单数据:

sql

INSERT INTO tree_menu (parent_id, name) VALUES (0, 'Root');

INSERT INTO tree_menu (parent_id, name) VALUES (1, 'Item 1');

INSERT INTO tree_menu (parent_id, name) VALUES (1, 'Item 2');

INSERT INTO tree_menu (parent_id, name) VALUES (2, 'Item 1.1');

INSERT INTO tree_menu (parent_id, name) VALUES (3, 'Item 1.2');

查询树形菜单

查询所有菜单项

要查询所有菜单项,可以使用以下语句:

sql

SELECT * FROM tree_menu;

查询特定父级下的菜单项

要查询特定父级下的菜单项,可以使用以下语句:

sql

SELECT * FROM tree_menu WHERE parent_id = ?;

查询祖先菜单项

要查询一个菜单项的祖先菜单项,可以使用递归查询,如下所示:

sql

WITH RECURSIVE ancestors AS (

SELECT id, parent_id, name

FROM tree_menu

WHERE id = ?

UNION ALL

SELECT t.id, t.parent_id, t.name

FROM tree_menu AS t

JOIN ancestors AS a ON t.id = a.parent_id

)

SELECT * FROM ancestors;

查询后代菜单项

要查询一个菜单项的后代菜单项,可以使用递归查询,如下所示:

sql

WITH RECURSIVE descendants AS (

SELECT id, parent_id, name

FROM tree_menu

WHERE parent_id = ?

UNION ALL

SELECT t.id, t.parent_id, t.name

FROM tree_menu AS t

JOIN descendants AS d ON t.parent_id = d.id

)

SELECT * FROM descendants;

文章目录
    搜索