`
谷超
  • 浏览: 166587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

有用的SQL语句 oracle 递归、分页、分组

    博客分类:
  • DB
阅读更多

1.在数据库设计中,经常要设计出树形结构的表,比如一些产品代码表等

如下图所示:

 

表test

id fid name

1 -1 交通运输设备

2 1 小轿车

3 1 越野汽车

4 2 普通轿车

5 2 高级轿车

6 -1 专用设备

 

select id,p_id,name from test start with id='1' connect by PRIOR id=fid order by id

这样的SQL语句就能够查询出id为1节点及其下面所有节点的信息!该语法在Oracle数据库中可以,但在MySQL数据库中会提示语法错误!

 

2.如果大家要为公司搭建基础平台的话,往往会写一个分页的组件,在这个组件中要对sql进行分页查询,这里提供2个分页查询的sql

一、

select *

from (select id, name, rownum r from t where rownum <= 20)

where r > =11

这是一种查询效率最高的sql分页查询的写法了,语句中有2个select,嵌套了一次,它的缺点是查询的sql与分页功能的sql耦合在一起,不利于程序的使用,其中查询的sql只是select id, name from t

二、

SELECT *

FROM (SELECT a.*, ROWNUM AS ROWNO

FROM (select id, name from t ) a where rownum<=20 ) b

where b.rowno >=11

这个sql语句做了两次嵌套,效率没有上面的写法高,但是把查询的sql语句分离了出来,便于在程序中使用,推荐在程序中使用这种分页sql。

注意:在第二层select中要限定rownum的上限,是为了提高最后一层查询的效率,最后一层查询只是在20条记录中做筛选了,缩小了范围,提高了效率。

 

3、分组查询,对group by的使用

有这样的一个需求,要查询出每个客户最新的序列号的信息, 数据如下:

test表

khid(客户id) yxq_q(有效期起) yxq_z(有效期止) xlh(序列号)

1 2006-1-1 2007-1-1 111

1 2007-1-1 2008-1-1 222

2 2007-5-4 2008-5-4 333

2 2008-5-4 2009-5-4 444

3 2009-1-1 2010-1-1 555

想要查询出的结果为:

khid yxq_q yxq_z xlh

1 2007-1-1 2008-1-1 222

2 2008-5-4 2009-5-4 444

3 2009-1-1 2010-1-1 555

 

sql:select t.*
from test t,
(select t.khid tkhid, max(yxq_z) tyxqz from test t group by t.khid) tmp
where t.khid = tmp.tkhid
and t.yxq_z = tmp.tyxqz

sql编写的思路正确! 经过验证,查询结果正确!

 

group by的理解,他能够按照某个字段进行分组,比如上面的例子就是按照khid进行了分组,这里有个粒度的概念,就是按照某些字段进行分组后的组数较少,就说这个粒度较粗,反之,如果按照某个字段进行分组后的组数较多,就说这个粒度较细。我们也能看到些复杂的分组,是以两个字段来进行分组,group by字段1(粗粒度),字段2(细粒度),并不是以字段2(细粒度)分组的结果为最后的分组结果,而是在按照一个字段进行分组后,在按照另一个字段进行分组。是2次分组的结果叠加!

0
0
分享到:
评论

相关推荐

    SSH2利用SQL连接oracle示例

    5. **执行SQL查询**:一旦连接建立,你可以使用`Statement`或`PreparedStatement`对象来执行SQL语句,查询或更新数据库。分层结构可能指的是将数据组织成树形结构,这可能涉及递归查询或层次查询。 6. **测试与页码...

    oracle语法.rar

    这个“oracle语法.rar”压缩包包含了关于Oracle数据库的一些关键知识点,如递归查询、内置函数、PL/SQL编程以及分页建表等。下面将详细介绍这些内容。 1. **递归查询**:在Oracle中,递归查询通常用于处理层次结构...

    Oracle迁移到PG建议.docx

    Oracle迁移到PG的过程中,需要注意一些关键的差异,以下是关于数据类型、SQL语句和其他方面的差异: ### 一、数据类型差异 在Oracle和Postgresql中,数据类型存在一些差异。例如: * Varchar2和VarChar:在Oracle...

    数据库分页优化技术分析与实现

    在实验中,文章提到了使用Oracle提供的查询提示(hint),如“ordered use_nl”,这些是Oracle查询优化器的指令,用以控制SQL语句的执行计划。合理使用这些提示,可以帮助调整和优化查询执行过程,特别是在复杂的...

    oracle函数详解[收集].pdf

    本篇文章将深入解析Oracle中的SQL语句基础和一些关键函数。 1. SQL语句基础 SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言。在Oracle中,SQL语句主要包括数据查询、数据插入、数据更新、...

    经典SQL脚本大全

    │ SQL Server到Oracle连接服务器的实现.sql │ SQL Server到SQLBASE连接服务器的实现.sql │ SQL Server到SYBASE连接服务器的实现.sql │ sql导出mysql.sql │ textcopy实现文件存取.sql │ Vb程序实现文件存取.sql...

    PostgreSQL 8.2,Oracle 10g,SQL Server 2005,MYSQL 5.1 脚本规范

    标题中的“PostgreSQL 8.2, Oracle 10g, SQL Server 2005, MYSQL 5.1 脚本规范”涉及到的是四个不同的数据库管理系统(DBMS)的脚本编写标准和规范。这四个系统分别是PostgreSQL、Oracle、SQL Server和MySQL,它们都...

    程序员的SQL金典.rar

     本书特色:主要介绍SQL的语法规则及在实际开发中的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异进行了分析;详细讲解数据库对增、删、改、查等SQL的支持并给出了相应的SQL应用案例;透彻分析函数...

    SQL语言参考大全.rar

    2. **查询语句(SELECT)**:这是SQL中最常用的部分,讲解了如何使用SELECT语句来查询数据库中的数据,包括基本查询、联接查询、子查询、分组与聚合函数(如COUNT、SUM、AVG、MAX、MIN)以及排序和分页等。...

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

    sql高级进阶

    标题所指的知识点为“SQL高级进阶”,描述重复强调了标题,因此不再赘述。标签为“SQL”,意味着所有知识点围绕SQL语言的高级应用和技巧。 在【部分内容】中,提供了一系列具体的SQL高级应用主题,以下是基于这些...

    超详细的oracle教程

    “查询基础”章节深入浅出地讲解了如何使用SQL进行数据检索,包括SELECT语句的构造,WHERE子句用于筛选记录,ORDER BY用于排序结果,以及LIMIT和OFFSET用于分页查询。这些基本查询技能是数据库操作的核心。 “单行...

    ORACLE 合辑

    若不使用绑定变量,尤其是来自Java等应用程序的SQL语句,会导致大量硬解析(Hard Parse),即数据库必须为每个不同的SQL文本创建新的解析计划,这不仅消耗了更多的CPU资源,还可能导致共享池内存的快速耗尽,进而影响...

    oracle详细教材

    本章主要介绍Oracle数据库系统的安装、配置和基本操作,包括SQL*Plus的使用、连接数据库的方法、基本的SQL语句以及如何创建和管理数据库实例。这是学习Oracle的起点,让读者对Oracle有一个初步的认识。 **第三章 ...

    SQL+API+中文版

    2. **SQL查询**:熟练掌握SELECT语句,包括单表查询、联接查询(JOIN)、子查询、分组(GROUP BY)和聚合函数(SUM、AVG、COUNT等)、排序(ORDER BY)以及分页(LIMIT或OFFSET)。 3. **SQL高级特性**:学习窗口...

    OracleFenYe.rar_Oracle数据库_SQL_

    本文将深入探讨在Oracle数据库中实现三次嵌套分页的方法,并通过`OracleFenYe.sql`文件中的SQL语句进行详细解释。 首先,分页查询是数据库操作中的常见需求,它可以帮助用户逐步加载大量数据,避免一次性加载所有...

    Oracle 数据库的常用函数列表一览

    这些函数只是Oracle数据库庞大函数库的一部分,还有更多如游标、递归、集合操作等高级特性等待开发者探索。了解并熟练运用这些函数,能大大提高数据库管理的效率和灵活性,使得数据处理更加精确和便捷。在实际应用中...

Global site tag (gtag.js) - Google Analytics