表    tree

字段   master

sub

sales

insert into tree values

(‘主1’,   ‘主2’,  15);

insert into tree values

(‘主1’,   ‘主3’,  20);

insert into tree values

(‘主2’,   ‘主4’,  5);

insert into tree values

(‘主2’,   ‘主5’,  10);

insert into tree values

(‘主3’,   ‘主5’,  30);

insert into tree values

(‘主3’,   ‘主6’,  40);

SQL> select * from tree;

MASTER   SUB       SALES

———- ———- ———-

主1    主2        15

主1    主3        20

主2    主4         5

主2    主5        10

主3    主5        30

主3    主6        40

如果用树型结构表示如下:

’主1’

-‘主2’

–‘主4’

–‘主5’

’主1’

-‘主3’

–‘主5’

–‘主6′

SQL> select * from tree

start with sub=’主2’     –相当于普通sql的where条件

connect by prior master=sub; –遍历的顺序是sub先于master遍历,也就是说从sub往上遍历一直到master(根节点)

2

MASTER   SUB       SALES

———- ———- ———-

主1    主2        15

SQL> select * from tree

start with master=’主2′

connect by prior master=sub; –sub往上遍历至根节点(参考一下树型图)

2  3

MASTER   SUB       SALES

———- ———- ———-

主2    主4         5  –这条是自己本身,也就是第一遍遍历

主1    主2        15  –这是第2次遍历,我们从树型图可以看到,’主2’往上遍历是’主1’

主2    主5        10

主1    主2        15

好,我们关看上面可能还是不好理解,我们加入一个树结构专用函数sys_connect_by_path,便于理解

SQL> select sys_connect_by_path(MASTER,’/’) from tree  –master表示我遍历的起点只找在master列中存在的,如下例只要’主2’为起点,并以/为分割符

start with master=’主2′

connect by prior master=sub;  –往根节点遍历

2  3

SYS_CONNECT_BY_PATH(MASTER,’/’)

——————————————————————————–

/主2             –第1遍遍历

/主2/主1          –第2遍遍历

/主2             –第2条master=’主2’的记录的第1次遍历

/主2/主1          –第2条master=’主2’的记录的第2次遍历

SQL> select sys_connect_by_path(MASTER,’/’) from tree –起点为sub=’主5’时MASTER=主2,主3

start with sub=’主5′

connect by prior master=sub;

2  3

SYS_CONNECT_BY_PATH(MASTER,’/’)

——————————————————————————–

/主2

/主2/主1

/主3

/主3/主1

SQL> select sys_connect_by_path(MASTER,’/’),sub,master from tree

start with sub is not null

connect by prior master=sub;

2  3

SYS_CONNECT_BY_PATH(MASTER,’/’ SUB    MASTER

—————————— ———- ———-

/主1              主2    主1 –找主1到根的路径,这里根是主1他自己

/主1              主3    主1

/主2              主4    主2

/主2/主1           主2    主1 –找主2到根的路径,这里根是主1

/主2              主5    主2

/主2/主1           主2    主1

/主3              主5    主3

/主3/主1           主3    主1

/主3              主6    主3

/主3/主1           主3    主1

select sys_connect_by_path(MASTER,’/’),sub,master from tree

start with sub is not null

connect by prior sub = master;

SYS_CONNECT_BY_PATH(MASTER,’/’ SUB    MASTER

—————————— ———- ———-

/主1              主2    主1

/主1/主2           主4    主2

/主1/主2           主5    主2

/主1              主3    主1

/主1/主3           主5    主3

/主1/主3           主6    主3

/主2              主4    主2

/主2              主5    主2

/主3              主5    主3

/主3              主6    主3

________________________________________

Go to source web page: Oracle–树的使用(Connect By) – 开发者在线 – www.builder.com.cn

该日志未加标签

mysql 树形结构 sql_sql处理树形结构相关推荐

  1. JAVA定义一个树形的结构_Java自定义树形结构

    Java自定义树形结构 Java自定义树形结构 为什么80%的码农都做不了架构师?>>> 树形结构 Java package com.zyl.comm; import java.ut ...

  2. js使用input上传文件夹、拖拽上传文件夹并将文件夹结构展示为树形结构

    一.实现效果 左侧区域支持选择一个系统中的文件夹,或者将文件夹拖拽到这个区域进行上传,右侧区域可以将文件夹的结构展示为树形结构. 二.代码实现 由于需要使用树形插件zTree,这个插件是依赖于jque ...

  3. 多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)

    一.问题研究的背景和意义 在Web应用程序开发领域,基于Ajax技术的JavaScript树形组件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项.目前市场上常见的JavaScript框 ...

  4. 树形结构转平铺结构,平铺结构转树形结构

    先新建一个数组 const arr = [{pid: null,id: 1,name: '北京'},{pid: 1,id: 11,name: '朝阳'},{pid: 11,id: 111,name: ...

  5. mysql导出数据库数据及表结构

    mysql导出数据库数据及表结构 1,导出远程数据库数据到本地 mysql -A wj_sms -h192.168.1.105 -uroot -p4321 -ss -e "set NAMES ...

  6. php mysql修改命令_PHP编程:mysql alter table命令修改表结构实例详解

    <PHP编程:mysql alter table命令修改表结构实例详解>要点: 本文介绍了PHP编程:mysql alter table命令修改表结构实例详解,希望对您有用.如果有疑问,可 ...

  7. gorm存指针数据_gormt: gormt 是一个数据库映射工具,可以将 mysql 数据库自动生成 golang sturct 结构...

    mysql数据库转 struct 工具,可以将mysql数据库自动生成golang sturct结构,带大驼峰命名规则.带json标签 交互界面模式 ./gormt -g=true 命令行模式 ./g ...

  8. MySQL修改、删除表的结构

    MySQL修改.删除表的结构 1.增加一列 alter table student add score double(3,1); 说明 double(3,1)指数据是三位,小数部分占一位,整数部分占两 ...

  9. mysql导出选择两张表,Mysql导出(多张表)表结构及表数据 mysqldump用法

    命令行下具体用法如下:  mysqldump -u用戶名 -p密码 -d 數據库名 表名 脚本名; 1.导出數據库為dbname的表结构(其中用戶名為root,密码為dbpasswd,生成的脚本名為d ...

最新文章

  1. 谈谈计算机行业的秋招和春招
  2. 神经网络之nlp的深度思考
  3. 对struts一点理解总结
  4. 六. 异常处理7.throw:异常的抛出
  5. 离散分布概率:几何分布、二项分布和泊松分布
  6. Android之运行app提示The application could not be installed: INSTALL_FAILED_TEST_ONLY
  7. macbook pro python开发_Mac打造python2 python3开发环境
  8. 【Python数据分析】数据预处理3——数据规约(含主成分分析详解、Python主要预处理函数)
  9. 计算机方面的英语学术期刊,近几年计算机专业英文参考文献 计算机专业英文核心期刊参考文献有哪些...
  10. 微信公众平台可以修改微信号了,微信号怎么设置好
  11. UWP: 通过命令行启动 UWP 应用
  12. js摇号程序_车管所怎么摇号流程及查询
  13. 趋势追踪交易课堂:复盘的意义和方法
  14. linux下的/usr目录
  15. 手机闪存速度排行_带大家了解一下 手机闪存UFS和EMMC的区别(科普)
  16. 《腾云点菜宝》项目总结
  17. 通过nodejs搭建HTTP服务器
  18. 『Android基础入门』:EventBus实现总线数据分发
  19. 我的 Python 全栈开发自学笔记
  20. 深度学习 week1 采访部分补充

热门文章

  1. 为什么要学习和使用 C 语言?
  2. 小程序解析后端返回的html格式数据
  3. 【彩彩只能变身队(第七组)】Alpha版
  4. RobWork框架编程(2):使用雅可比数值迭代算法对机器人进行逆运动学求解
  5. 从单车到飞船的SQL优化之旅
  6. 雅迪、哈啰为什么都在做高端两轮电车
  7. 【干货】心田花开:语文学习方法
  8. 360安全浏览器截图快捷键怎么设置 360安全浏览器截图快捷键设置教程
  9. 抢票神器和加速包真的有用吗? | Alfred数据室
  10. pet store 的设计目标