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

这样看起来就清楚了很多


相关文章
|
1月前
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
1月前
|
SQL 索引
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
|
24天前
|
SQL 人工智能 自然语言处理
OmniSQL:开源文本到SQL神器!自然语言秒转查询到复杂多表连接等SQL需求
OmniSQL是开源的文本到SQL转换模型,通过创新的数据合成框架生成250万条高质量样本,支持7B/14B/32B三种模型版本,能处理从简单查询到复杂多表连接等各种SQL需求。
155 16
OmniSQL:开源文本到SQL神器!自然语言秒转查询到复杂多表连接等SQL需求
|
1月前
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
131 35
|
30天前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
2月前
|
SQL 关系型数据库 OLAP
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
77 1
|
1月前
|
SQL 缓存 关系型数据库
SQL为什么不建议执行多表关联查询
本文探讨了SQL中不建议执行多表关联查询的原因,特别是MySQL与PG在多表关联上的区别。MySQL仅支持嵌套循环连接,而不支持排序-合并连接和散列连接,因此在多表(超过3张)关联查询时效率较低。文章还分析了多表关联查询与多次单表查询的效率对比,指出将关联操作放在Service层处理的优势,包括减少数据库计算资源消耗、提高缓存效率、降低锁竞争以及更易于分布式扩展等。最后,通过实例展示了如何分解关联查询以优化性能。
|
SQL 索引 Python
|
7月前
|
关系型数据库 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)")
|
9月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
253 13

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等