`

关于oracle中查询前N条总结

阅读更多

最近用到oracle库,明显和之前用的SQL有很多区别什么关键字 top 中这不能用,oracle什么又来个rownum 下面总结下在oracle中查询前N条的方法及心得

 

首先在SQL2005 中可以: select top 10* from table1; 在关联order by 等条件就可实现前N条的统计排序,oracle中按照这种方法显然执行不通过

 

先看以下简单的查询前N条语句(按照统计排序后显示前N条记录):已测通

--test pass
select id from (select id ,rownum as con from (select id  from llt_org_info  a order by id desc)  where rownum<=10)where con>=1

 

然后按照以下结构套入sql (测试未通过)

 -- 未通 (报错ORA_00907 缺少右括号)
 select a.id,a.org_code, a.org_name,
        (select rownum as con from    
        (select count(*) from llt_report b  where b.send_org_id =a.id) as org_count from llt_org_info a order by org_count desc
       where rownum<=10)
       where con >1

 

 

由sql里到外分析:

第一层: select count(*) from llt_report b  where b.send_org_id =a.id) as org_count from llt_org_info

由语句可看出根据关联关系表中统计数量  OK

第二层:(select count(*) from llt_report b  where b.send_org_id =a.id) as org_count from llt_org_info a order by org_count desc
       where rownum<=10) (测试未通过) 

 

oracle中解析过程可得之rownum 为查询出来自带的伪数列,便于数据集的标识但必须在查询结果确定后也就是

第二层:(select count(*) from llt_report b  where b.send_org_id =a.id) as org_count from llt_org_info a order by org_count desc ) 
       where rownum<=10

 

放入语句中:

 -- 未通 (报错ORA_00907 缺少右括号)
 select a.id,a.org_code, a.org_name,
        (select rownum as con from    
        (select count(*) from llt_report b  where b.send_org_id =a.id) as org_count from llt_org_info a order by org_count desc )
       where rownum<=10
       where con >1

 

先来看下测试通过的SQL:

select id,org_code,org_name,org_count from
(SELECT  ROWNUM RN ,A.* FROM
(select id,org_code,org_name,
(select count(*) from llt_report b where b.send_org_id=c.id) as org_count from Llt_org_Info c order by org_count desc)
 A WHERE ROWNUM <=10) WHERE RN >0

再次分析语句:第一层统计没问题,第二层排序后没问题,但是第二层查询后得出数据集 oracle 对此数据集重新定义rownum 并且查询后的结果集为一张新表,在对这张新表另起别名来操作

所以第三层 :(SELECT  ROWNUM RN ,A.* FROM  (...........) A where rownum<=10

最后在根据相关显示列,最外层取查询字段

总结:oracle 中提供rownum 对伪数列编号,利用rownum 对其结果集的编号来排序 进而控制前N条数据的显示。

 

 

 

 

分享到:
评论

相关推荐

    如何在Oracle中实现SELECT_TOP_N的方法

    在Oracle数据库中,由于不直接支持SQL Server中的`SELECT TOP N`语法,我们需要采用其他方法来获取表中的前N条记录。以下是如何在Oracle中实现类似功能的详细步骤。 1. **基本方法:使用ROWNUM和ORDER BY** Oracle...

    ORACLE 中ROWNUM用法总结

    在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`&gt;`, `&gt;=`, `=`等)时,容易引发...

    oracle查询相邻上下行值

    本篇内容主要介绍了两种不同的方法来实现Oracle数据库中查询相邻行的方法:一种是通过自连接的方式,另一种则是利用Oracle 11g引入的`LAG()`和`LEAD()`窗口函数。 ##### 方法一:自连接方式 这种方法的核心思想是...

    韩顺平Oracle课堂资料总结

    ### 韩顺平Oracle课堂资料总结 #### 一、Oracle权限管理与操作 ##### 权限概述 在Oracle数据库中,权限管理是确保数据安全的重要手段之一。权限分为系统权限(System Privileges)和对象权限(Object Privileges)...

    在ORACLE中实现SELECT TOP N的方法

    在数据库查询操作中,经常需要获取数据表中的前N条记录,这种需求在多种业务场景中都非常常见。Oracle数据库作为一款强大的关系型数据库管理系统,提供了多种方法来实现SELECT TOP N的功能。本文将详细介绍在Oracle...

    oracle非常全和完整的总结文档

    在Oracle数据库中,ROWNUM是用于分页查询的关键,它可以帮助删除重复记录或进行复杂查询。例如,可以结合子查询来选择特定行数的数据。此外,PL/SQL Developer是一款常用的Oracle开发工具,提供了丰富的功能,如SQL...

    java笔记\Oracle里sql不能用limit的处理

    在Oracle中,我们可以使用RowNum函数、Minus运算符、Subquery和Top-N查询来实现分页查询。这些方法可以根据不同的需求选择合适的方法来实现分页查询。在开发中,我们需要根据实际情况选择合适的方法来实现分页查询。

    oracle 查询优化改写

    在Oracle数据库管理中,查询优化是一项至关重要的任务,它直接影响到数据库系统的性能和效率。"Oracle查询优化改写"是一个专业领域,旨在通过调整SQL语句的结构和逻辑,提高查询速度,降低资源消耗,从而提升整体...

    Oracle分页(limit方式的运用)

    4. **使用OFFSET与FETCH FIRST**:通过子查询和`WHERE`子句来筛选出指定范围内的记录,并使用`FETCH FIRST`获取前N条记录。 #### 四、Oracle分页的优化技巧 1. **避免全表扫描**:尽可能使用索引来限制查询的范围...

    oracle子查询PPT课件.ppt

    Oracle子查询知识点总结 Oracle子查询是指在SQL语句中嵌套使用SELECT语句,以解决复杂的查询问题。下面是Oracle子查询的知识点总结: 一、子查询的定义和类型 * 子查询是一个完整的SELECT语句,嵌套在另一个...

    oracle日常操作总结

    本文主要总结了Oracle数据库的一些基本启动和关闭方法,以及如何有效利用数据字典进行信息查询。 首先,Oracle数据库的启动和关闭是管理数据库的核心任务。在单机环境下,通过切换到Oracle用户并使用`sqlplus / as ...

    Oracle的110个自带函数总结归纳

    以下是对"Oracle的110个自带函数总结归纳"中可能涵盖的关键知识点的详细解释: 1. 数学函数: - ABS():返回绝对值。 - CEIL()和FLOOR():分别向上和向下取整。 - ROUND():四舍五入到指定的小数位数。 - MOD()...

    Oracle数据库备份与恢复总结

    ### Oracle数据库备份与恢复知识点总结 #### 一、EXP/IMP (导出与导入) **1.1 基本命令** - **EXP**: 用于从数据库导出数据。 - `exp username/password [参数]` - **IMP**: 用于向数据库导入数据。 - `imp ...

    《Oracle RAC最佳实践》精华总结

    在Oracle RAC环境中,了解各个会话的动态性能对于诊断性能瓶颈至关重要。以下是一些关键的视图和查询,可以帮助我们深入了解会话级别的性能: 1. **`V$SESSTAT`** 和 **`V$SESSION_EVENT`**: - `V$SESSTAT`: 该...

    安装oracle中文乱码问题

    本文将详细介绍如何解决在安装Oracle过程中出现的中文乱码问题,并确保安装过程中的所有文本都能正确显示中文。 #### 解决方案概述 解决中文乱码问题的核心在于正确设置系统的语言环境变量以及安装必要的字体库。...

    DBA对Oracle SQL编写规范的总结

    ### DBA对Oracle SQL编写规范的总结 #### 一、引言 在Oracle数据库开发过程中,遵循一套标准化的SQL编写规范对于提升代码质量、增强可读性和可维护性至关重要。本文档由一位经验丰富的数据库管理员(DBA)撰写,旨在...

    使用jsp实现登录页面,增删改查页面,oracle数据库。

    \n\n总结,这个项目提供了一个实践JSP和JDBC交互,以及与Oracle数据库操作的平台。通过这个练习,开发者可以加深对Web开发流程的理解,掌握用户输入处理、数据库操作和页面渲染等关键技能。同时,了解分页查询和事务...

    Oracle到mysql转换的问题总结.docx

    【Oracle到MySQL转换的问题总结】 在数据库迁移过程中,从Oracle转向MySQL可能会遇到一系列与数据类型、语法和函数差异相关的问题。以下是对这些关键差异的详细分析: 1. **数据类型的区别**: - `NUMBER(10,0)`...

Global site tag (gtag.js) - Google Analytics