SQL基础8.2——层次化查询(START BY ... CONNECT BY PRIOR)

简介: 今天在ITPUB看到的题目 2、有如下信息: 起始地  目的地  距离(公里) A   B   1000 A   C   1100 A   D   900 A   E   400 B   D   300 D   F   600 E   A   400 F   G   1000 C   B   600 请用SQL语句或一段代码写出从A出发,可达到的目的地(包括间接方式)。

今天在ITPUB看到的题目

2、有如下信息:
起始地  目的地  距离(公里)
A   B   1000
A   C   1100
A   D   900
A   E   400
B   D   300
D   F   600
E   A   400
F   G   1000
C   B   600
请用SQL语句或一段代码写出从A出发,可达到的目的地(包括间接方式)。

创建表test

SQL> select * from test;

START_PLACE END_PLACE    DISTANCE
----------- ---------- ----------
A           B                1000
A           C                1100
A           D                 900
A           E                 400
B           D                 300
D           F                 600
E           A                 400
F           G                1000
C           B                 600 

select start_place, end_place
  from (select * from testwhere end_place <> 'A')
 start with start_place = 'A'
connect by prior end_place = start_place;


START_PLACE END_PLACE
----------- ----------
A           C
C           B
B           D
D           F
F           G
A           D
D           F
F           G
A           E

这些条目中的END_PLACE就是所有可以从A到达的点

connect by prior 实现树状查询 connect by prior 左边的为父接点,右边为自接点。

oracle还提供函数sys_connect_by_path()可以把路径表示出来如下面语句

select sys_connect_by_path(start_place, '->')||'->'||end_place
  from (select * from duanjw where end_place <> 'A')
 start with start_place = 'A'
CONNECT BY PRIOR end_place = start_place;

SYS_CONNECT_BY_PATH(START_PLAC
--------------------------------------------------------------------------------
->A->C
->A->C->B
->A->C->B->D
->A->C->B->D->F
->A->C->B->D->F->G
->A->D
->A->D->F
->A->D->F->G
->A->E

这样看起来就清楚了很多


相关文章
|
28天前
|
SQL 监控 关系型数据库
一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
|
28天前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
27天前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
1月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
153 18
|
1月前
|
SQL 人工智能 数据库
【三桥君】如何正确使用SQL查询语句:避免常见错误?
三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
92 0
|
2月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
3月前
|
SQL 存储 弹性计算
OSS Select 加速查询:10GB CSV 文件秒级过滤的 SQL 语法优化技巧
OSS Select 可直接在对象存储上执行 SQL 过滤,跳过文件下载,仅返回所需数据,性能比传统 ECS 方案提升 10~100 倍。通过减少返回列、使用等值查询、避免复杂函数、分区剪枝及压缩优化等技巧,可大幅降低扫描与传输量,显著提升查询效率并降低成本。
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
434 13