当前位置:  数据库>oracle

Oracle 层次查询-学习笔记

    来源: 互联网  发布时间:2017-04-07

    本文导语: 层次查询 --自连接: 通过表的别名,将同一张表视为不同的表,然后再利用等值、不等值连接 自连接 SQL> selecte.ename||'的老板是'||d.ename                          2  from emp e, emp d                            ...

层次查询

--自连接: 通过表的别名,将同一张表视为不同的表,然后再利用等值、不等值连接

自连接 SQL> selecte.ename||'的老板是'||d.ename

                         2  from emp e, emp d

                           3  where e.mgr=d.empno;

层次方式--打印树状结构,起始指明了根为KING的编号7839

                           Oracle 层次查询-学习笔记[图片]

层次查询:结决了自连接的性能问题

1  select level, empno, ename,sal, mgr   -- level出现必须有connect by 子句

 2  from emp                                             -- prior 指前一次查询

 3  connect by prior mgr=empno         --连接条件【判断本次查询的mgr 是否等于 上次查询结界中的 empno】

 4  start with empno=7369         --给定第一次查询条件

  5  order by level          --按级别升序排序

示例:

 Oracle 层次查询-学习笔记[图片]

 

由于起始指定的mgr=7698产生了多个结果,所以第二级后就出现了重复

 Oracle 层次查询-学习笔记[图片]

--精确显示时间间隔 【months_between函数】

select ename,sysdate-hiredate 天, (sysdate-hiredate)/7 星期, months_between(sysdate,hiredate) 月, months_between(sysdate,hiredate)/12 年 from emp

Oracle 层次查询-学习笔记[图片]

练习1找到员工表中工资最高的前三名,

rownum的注意事项:

SQL> 1. rownum一旦生成,就不变

SQL> 2. 对rownum只能使用     

SQL> select rownum,empno,ename,sal

  2  from emp

  3  where rownum /

     Total       1980       1981       1982       1987

----------     ----------      ----------     ----------    ----------

        14          1         10          1          2

 

l  找到员工表中薪水大于本部

     门平均薪水的员工。

SQL> select empno,ename,sal,avgsal

  2  from emp e,(select deptno,avg(sal) avgsal  from emp group by deptno) a

  3  where e.deptno=a.deptno and e.sal>a.avgsal;

分页1按sal排序后显示5到10(包含10)条记录【常用的】

  select *

  from (

       select rownum r, e1.*

       from (

            select *

            from emp

            order by sal

       ) e1

       where rownum 5

分页2按sal排序后显示5到10(包含10)条记录【高效的】

select *

 from emp

 where rowid in (

    select rid       --使用内层提供的rid 给外层 in 使用

     from (

            select rownum rn, rid  --此 select 确定了 rownum 并提供给外层 rn

            from(

                    select rowid rid     --此select 确定了rowid 并提供给外层 rid

                    from emp

                    order by sal        --确定最内层的rid 是按什么条件排序的

            ) 

            where rownum5     --使用内层提供的rn 确定下界

 )

 order by sal  -- 由于rowid无序 必须外层再统一内层的排序

--rowid 是Oracle为每张表提供的标示行的唯一不变id


    
 
 

您可能感兴趣的文章:

  • Oracle层次查询和with函数的使用示例
  • oracle 层次化查询(行政区划三级级联)
  • Oracle 免费送出硬纸板的笔记本电脑?!
  • Linux+Oracle学习笔记
  • Oracle 10G进程体系学习笔记
  • Linux 下 Oracle 命令学习笔记
  • Linux下安装oracle问题笔记
  • oracle 技巧学习笔记
  • Oracle数据库基本知识学习笔记
  • 如何在linux + text下安装oracle8/9,我的笔记本是dell latitude d600,我找不到显卡驱动
  • Oracle 下 spfile和pfile使用笔记
  • NOSQL iis7站长之家
  • Oracle学习笔记(六)
  • oracle9204升级到9206笔记
  • Linux下安装Oracle数据库完整笔记
  • ORACLE学习笔记-添加更新数据函数篇
  • Solaris 10 U3安装Oracle 10g R2实例笔记
  • Linux系统下安装Oracle数据库笔记
  • oracle学习笔记(二)
  • ORACLE学习笔记-新建用户及建表篇
  • ORACLE学习笔记-查询篇
  • Oracle笔记之简单查询、限定查询和排序
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 循序渐进学习Oracle数据库
  • 想在linux下学习oracle,有经验的高手们给点建议。
  • 怎样学习oracle
  • oracle使用sql脚本生成csv文件案例学习
  • 想学习UNIX,LINUX,ORACLE方面的知识。请帮忙。
  • 我该如何学习Linux和Oracle?
  • 学习登录oracle数据库时常用的操作命令
  • 技巧学习 在Python环境下连接Oracle数据库
  • Oracle 数据库学习入门心得
  • Oracle与MySQL学习体会比较
  • oracle数据库学习
  • oracle数据库的学习体会
  • Oracle数据库入门学习经验分享
  • 学习Linux下Oracle数据库编程
  • oracle 数据库学习 基本结构介绍
  • Oracle存储过程入门学习基本语法
  • 学习Oracle数据库的方法
  • Oracle数据库学习方法参考
  • 了解学习国外公司的Oracle DBA面试试题
  • 关于Oracle数据库密码文件的一点学习
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3