`
jasonw68
  • 浏览: 153168 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

postgresql with 递归查询

    博客分类:
  • SQL
 
阅读更多
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等。 一、理解递归查询 递归查询是一种在数据库中遍历层级...

    PostgreSQL图(graph)的递归查询实例

    递归查询的核心在于`WITH RECURSIVE`语句,它允许我们定义一个递归公共表表达式(CTE)。在这个例子中,我们定义了一个名为`downstream`的CTE,它从指定的起始节点开始,查找所有下级节点。在每次递归时,我们检查新...

    hibernate实现递归查询

    如果你使用的是支持CTE的数据库(如PostgreSQL),可以通过创建一个存储过程或者使用HQL的`WITH`子句来实现。 4. **使用缓存** 在大型项目中,考虑到性能,可以考虑使用Hibernate的缓存机制。将查询结果缓存起来,...

    在PostgreSQL中实现递归查询的教程

    在PostgreSQL中,使用`WITH RECURSIVE`关键字来实现递归查询。在本例中,递归部分的目标是获取所有属于起始问题或分类的子问题和子分类: ```sql WITH RECURSIVE first_level_elements AS ( -- 非递归项 (SELECT ...

    SQL-递归查询-基于PostgreSQL数据库表补充完善树形信息

    基于PostgreSQL,用于递归查询表数据。可以基于表数据中的id、pid属性构建完整树并补充层级、层级内顺序等信息。可用于学习关键字WITH和RECURSIVE的组合用法。

    PostgreSQL树形结构的递归查询示例

    在 PostgreSQL 中,没有像 Oracle 那样的 `connect by` 扩展语法,但可以通过使用 `WITH RECURSIVE` 子句来实现递归查询。这是一个用于执行递归查询的关键字,允许在查询中引用查询本身,从而实现层次遍历。 下面是...

    一种MySQL数据库SQL递归查询的研究与实现.pdf

    【MySQL数据库SQL递归查询的研究与实现】 MySQL是一种广泛应用的关系型数据库管理系统,以其开源、高效和跨平台等特性,尤其适合中小型网站的部署。虽然MySQL在处理常规数据操作和查询方面表现出色,但在某些特定...

    Oracle 11GR2的递归WITH子查询方法

    与其他数据库系统(如DB2、Firebird、Microsoft SQL Server、PostgreSQL)相比,虽然Oracle较晚引入递归WITH子查询,但它仍然是一个强大的补充,特别适用于处理需要递归操作的数据。理解并掌握这一特性,对于优化...

    Postgresql 9.5.2-1

    4. **递归查询**:通过WITH语句支持递归查询,可用于处理层次数据。 5. **B-tree索引**:高效的数据索引机制,加速数据检索。 6. **全文搜索**:支持复杂文本搜索,包括模糊匹配和同义词处理。 7. **并行查询**:在...

    PostgreSQL WITH 子句

    总结起来,`WITH` 子句是 PostgreSQL 提供的一种高级查询构造,它允许我们将复杂查询分解成易于管理的组件,同时支持递归操作和 DML 操作的组合,大大提高了 SQL 查询的灵活性和可读性。在处理大量数据和复杂逻辑时...

    PostgreSQL_与_MS_SQLServer比较

    - **MS SQL Server** 使用 `WITH RECURSIVE` 进行递归查询。 - **PostgreSQL** 同样支持使用 `WITH RECURSIVE`。 #### 系统对象名(表名、索引等)大小写敏感性 - **PostgreSQL** 默认对标识符(如表名、列名等)是...

    ORACLE查询树型关系(connect_by_prior_start_with)

    ORACLE 查询树型关系(connect_by_prior_start_with) Oracle 查询树型关系是指使用 START WITH 和 CONNECT BY 子句来实现 SQL 的层次查询。从 Oracle 9i 开始,可以通过 SYS_CONNECT_BY_PATH 函数实现将父节点到...

    Oracle迁移到PG建议.docx

    * 递归查询:在Oracle中,使用START WITH...CONNECT BY来实现递归查询,而在Postgresql中,使用WITH RECURSIVE来实现递归查询。 * UPDATE语句别名:在Postgresql中,UPDATE语句的SET字段不能有别名,而在Oracle中,...

    SQL无限级查询

    对于支持递归查询的数据库系统(如PostgreSQL、SQL Server等),可以使用递归公用表表达式(Recursive Common Table Expression, CTE)来处理无限层级。递归CTE可以定义一个递归规则,然后按照这个规则重复执行,...

    PHP And PostgreSQL

    此外,PostgreSQL还支持复杂的查询语句,包括窗口函数、递归查询等,这些都是进行高级数据分析和报告编制不可或缺的工具。 ### 应用篇:错误处理与调试技巧 在开发过程中,遇到错误是在所难免的。有效的错误处理...

    递归函数,称其为self

    在SQL Server和PostgreSQL这两种数据库管理系统中,递归查询是一种强大功能,允许用户在结构化查询语言中实现递归逻辑。例如,当我们需要在层次结构数据中进行深度遍历时,如员工的上下级关系,就可以利用递归查询来...

    SpringJPA-PostgreSQL

    此外,PostgreSQL还提供了JSON和XML等非结构化数据存储支持,以及窗口函数、递归查询等高级特性,使其在大数据和实时分析场景中表现出色。 **SpringJPA与PostgreSQL的结合** 在Spring应用中集成PostgreSQL,首先...

    树形结构数据库设计

    - 使用WITH RECURSIVE:在标准SQL中,WITH语句可以创建一个临时结果集,用于递归查询。这种方式更通用,但不是所有SQL数据库都支持。 2. **路径枚举**: - 通过存储节点路径:在数据库中添加一个字段,存储每个...

Global site tag (gtag.js) - Google Analytics