SQL查询和优化(四)

一、给结果集分页
有时候查询结果太多,会用到分页显示,如排序后每次显示5页,下面的例子是显示6到10面(第二页的数据)

SELECT rn AS 序号,ename AS 姓名,sal AS 工资 FROM
    (SELECT rownum AS rn,sal,ename FROM
        (SELECT sal,ename FROM emp WHERE sal IS NOT NULL ORDER BY sal)x
    WHERE rownum <=10)
WHERE rn>=6;
  • #最内层不直接用WHERE rownum <=10,与 sal的顺序不一样
  • #WHERE rownum <=10 and WHERE rn>=6 放一起得不到数据

二、跳行取数据
前面的文章中写过随机取数据,下面求余函数MOD,来实现隔行取数据

SELECT empno, ename,sal, MOD(rn,2) FROM
    (SELECT rownum AS rn, empno, ename, sal FROM
        (SELECT empno,ename,sal FROM emp ORDER BY 1)x)y
WHERE MOD(rn,2)=1;

通过这个函数,想间隔几行返回都可以实现

三、简单树形查询
我人经常会用一些表来保存上下级关系,如地区表、员工表、组织机构表,为了按上下级关系递归查询这些数据,就需要用支树形查询,举个简单的例子

SELECT empno AS 员工编码,
        ename AS 姓名,
        mgr AS 主管编码,
        (PRIOR ename) AS 主管姓名
FROM emp 
START WITH empno = 7566
CONNECT BY (PRIOR  empno)= mgr;

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值