Oracle数据库中的用 CONNECT BY来做 递归 查 询。
PostgreSQL8.3以前是用connectby()函数来做递归 查 询 。 connectby() 函数是 contrib/tablefunc模 块 下的功能,默 认 是没有安装的,需要自己安装。
PostgreSQL8.4中当然可以用connectby()函数来做递归 查 询,且系统默认安装了这个功能。下面简单介绍一下 PostgreSQL8.4增加的新功能 递归 SQL 查 询的用法。
1. WITH关键字。 WITH是属于子 查 询范畴
使用例子:
WITH regional_sales AS (
SELECT region, SUM(amount) AS total_sales
FROM orders
GROUP BY region
), top_regions AS (
SELECT region
FROM regional_sales
WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
)
SELECT region,
product,
SUM(quantity) AS product_units,
SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;
这个SQL是显示这个地区(region),销售额top的商品的销售信息。
2. WITH RECURSIVE。 使用RECURSIVE选项 参数后,可以 输出自己想要的。
例子1:1到100的和
WITH RECURSIVE t(n) AS (
VALUES (1)
union ALL
SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
输出结果:5050
例子2:取得一棵树的所有孩子节点
WITH RECURSIVE r AS (
SELECT * FROM tree WHERE id = 1
union ALL
SELECT tree.* FROM tree, r WHERE tree.parent = r.id
)
SELECT * FROM r ORDER BY id;
id | parent
----+--------
1 |
2 | 1
3 | 1
4 | 3
具体的用法可以参考PostgreSQL的用户手册。( http://www.postgresql.org/docs/8.4/static/queries-with.html )
分享到:
相关推荐
本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用于多种数据库系统,如MySQL、PostgreSQL、SQL Server等。 一、理解递归查询 递归查询是一种在数据库中遍历层级...
递归查询的核心在于`WITH RECURSIVE`语句,它允许我们定义一个递归公共表表达式(CTE)。在这个例子中,我们定义了一个名为`downstream`的CTE,它从指定的起始节点开始,查找所有下级节点。在每次递归时,我们检查新...
如果你使用的是支持CTE的数据库(如PostgreSQL),可以通过创建一个存储过程或者使用HQL的`WITH`子句来实现。 4. **使用缓存** 在大型项目中,考虑到性能,可以考虑使用Hibernate的缓存机制。将查询结果缓存起来,...
在PostgreSQL中,使用`WITH RECURSIVE`关键字来实现递归查询。在本例中,递归部分的目标是获取所有属于起始问题或分类的子问题和子分类: ```sql WITH RECURSIVE first_level_elements AS ( -- 非递归项 (SELECT ...
基于PostgreSQL,用于递归查询表数据。可以基于表数据中的id、pid属性构建完整树并补充层级、层级内顺序等信息。可用于学习关键字WITH和RECURSIVE的组合用法。
在 PostgreSQL 中,没有像 Oracle 那样的 `connect by` 扩展语法,但可以通过使用 `WITH RECURSIVE` 子句来实现递归查询。这是一个用于执行递归查询的关键字,允许在查询中引用查询本身,从而实现层次遍历。 下面是...
【MySQL数据库SQL递归查询的研究与实现】 MySQL是一种广泛应用的关系型数据库管理系统,以其开源、高效和跨平台等特性,尤其适合中小型网站的部署。虽然MySQL在处理常规数据操作和查询方面表现出色,但在某些特定...
与其他数据库系统(如DB2、Firebird、Microsoft SQL Server、PostgreSQL)相比,虽然Oracle较晚引入递归WITH子查询,但它仍然是一个强大的补充,特别适用于处理需要递归操作的数据。理解并掌握这一特性,对于优化...
4. **递归查询**:通过WITH语句支持递归查询,可用于处理层次数据。 5. **B-tree索引**:高效的数据索引机制,加速数据检索。 6. **全文搜索**:支持复杂文本搜索,包括模糊匹配和同义词处理。 7. **并行查询**:在...
总结起来,`WITH` 子句是 PostgreSQL 提供的一种高级查询构造,它允许我们将复杂查询分解成易于管理的组件,同时支持递归操作和 DML 操作的组合,大大提高了 SQL 查询的灵活性和可读性。在处理大量数据和复杂逻辑时...
- **MS SQL Server** 使用 `WITH RECURSIVE` 进行递归查询。 - **PostgreSQL** 同样支持使用 `WITH RECURSIVE`。 #### 系统对象名(表名、索引等)大小写敏感性 - **PostgreSQL** 默认对标识符(如表名、列名等)是...
ORACLE 查询树型关系(connect_by_prior_start_with) Oracle 查询树型关系是指使用 START WITH 和 CONNECT BY 子句来实现 SQL 的层次查询。从 Oracle 9i 开始,可以通过 SYS_CONNECT_BY_PATH 函数实现将父节点到...
* 递归查询:在Oracle中,使用START WITH...CONNECT BY来实现递归查询,而在Postgresql中,使用WITH RECURSIVE来实现递归查询。 * UPDATE语句别名:在Postgresql中,UPDATE语句的SET字段不能有别名,而在Oracle中,...
对于支持递归查询的数据库系统(如PostgreSQL、SQL Server等),可以使用递归公用表表达式(Recursive Common Table Expression, CTE)来处理无限层级。递归CTE可以定义一个递归规则,然后按照这个规则重复执行,...
此外,PostgreSQL还支持复杂的查询语句,包括窗口函数、递归查询等,这些都是进行高级数据分析和报告编制不可或缺的工具。 ### 应用篇:错误处理与调试技巧 在开发过程中,遇到错误是在所难免的。有效的错误处理...
在SQL Server和PostgreSQL这两种数据库管理系统中,递归查询是一种强大功能,允许用户在结构化查询语言中实现递归逻辑。例如,当我们需要在层次结构数据中进行深度遍历时,如员工的上下级关系,就可以利用递归查询来...
此外,PostgreSQL还提供了JSON和XML等非结构化数据存储支持,以及窗口函数、递归查询等高级特性,使其在大数据和实时分析场景中表现出色。 **SpringJPA与PostgreSQL的结合** 在Spring应用中集成PostgreSQL,首先...
- 使用WITH RECURSIVE:在标准SQL中,WITH语句可以创建一个临时结果集,用于递归查询。这种方式更通用,但不是所有SQL数据库都支持。 2. **路径枚举**: - 通过存储节点路径:在数据库中添加一个字段,存储每个...