`
谷超
  • 浏览: 163188 次
  • 性别: 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
分享到:
评论

相关推荐

    经典SQL脚本大全

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

    Sqlserver2000经典脚本

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

    程序员的SQL金典.rar

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

    程序员的SQL金典4-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    程序员的SQL金典6-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    程序员的SQL金典7-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    程序员的SQL金典3-8

     2.2 通过SQL语句管理数据表  2.2.1 创建数据表  2.2.2 定义非空约束  2.2.3 定义默认值  2.2.4 定义主键  2.2.5 定义外键  2.2.6 修改已有数据表  2.2.7 删除数据表  2.2.8 受限操作的变通解决方案 第3章 ...

    SQL培训第一期

    存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 1.9.2 准备 create table t_user ( username varchar2(20), ...

    db2-技术经验总结

    1.71. 监控执行成本最高的SQL语句 99 1.72. 监控运行最长的SQL语句 99 1.73. 给表增加generated always时需要注意(原) 99 1.74. 给表增加索引的时候,可以增加collect detailed statistics参数来避免对表索引重新...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    C#编程经验技巧宝典

    14 &lt;br&gt;0028 “///”符号的使用技巧 14 &lt;br&gt;0029 使用注释取消程序语句的执行 15 &lt;br&gt;2.2 语句 15 &lt;br&gt;0030 跳转语句GOTO的使用 15 &lt;br&gt;0031 Continue语句的使用 16 &lt;br&gt;0032 Break...

    最新Java面试宝典pdf版

    8.用一条SQL语句 查询出每门课都大于80分的学生姓名 100 9.所有部门之间的比赛组合 100 10.每个月份的发生额都比101科目多的科目 101 11.统计每年每月的信息 102 12.显示文章标题,发帖人、最后回复时间 103 13.删除...

    Java面试宝典2010版

    8.用一条SQL语句 查询出每门课都大于80分的学生姓名 9.所有部门之间的比赛组合 10.每个月份的发生额都比101科目多的科目 11.统计每年每月的信息 12.显示文章标题,发帖人、最后回复时间 13.删除除了id号不同,...

    Java面试笔试资料大全

    8.用一条SQL语句 查询出每门课都大于80分的学生姓名 100 9.所有部门之间的比赛组合 100 10.每个月份的发生额都比101科目多的科目 101 11.统计每年每月的信息 102 12.显示文章标题,发帖人、最后回复时间 103 13.删除...

    Java学习笔记-个人整理的

    {1.11.3}递归调用}{41}{subsection.1.11.3} {1.12}Java API}{41}{section.1.12} {1.13}Linux命令}{41}{section.1.13} {1.13.1}基本查看、移动}{41}{subsection.1.13.1} {1.13.2}权限}{42}{subsection.1.13.2} ...

    JAVA面试宝典2010

    8.用一条SQL语句 查询出每门课都大于80分的学生姓名 100 9.所有部门之间的比赛组合 100 10.每个月份的发生额都比101科目多的科目 101 11.统计每年每月的信息 102 12.显示文章标题,发帖人、最后回复时间 103 13.删除...

    Java面试宝典-经典

    8.用一条SQL语句 查询出每门课都大于80分的学生姓名 100 9.所有部门之间的比赛组合 100 10.每个月份的发生额都比101科目多的科目 101 11.统计每年每月的信息 102 12.显示文章标题,发帖人、最后回复时间 103 13.删除...

    java面试题大全(2012版)

    8.用一条SQL语句 查询出每门课都大于80分的学生姓名 100 9.所有部门之间的比赛组合 100 10.每个月份的发生额都比101科目多的科目 101 11.统计每年每月的信息 102 12.显示文章标题,发帖人、最后回复时间 103 13.删除...

Global site tag (gtag.js) - Google Analytics