• Oracle 学习笔记(八)


    子查询

    多列子查询

    上篇笔记讲的单行子查询是指子查询只返回单列、单行数据;多行子查询是指返回单列多行数据,都是针对单列而言。而多列子查询是指查询返回多个列数据的子查询。 

    查询与 SMITH 的部门和岗位完全相同的所有雇员

    1、查询 SMITH 的部门和岗位

    SELECT deptno, job FROM emp WHERE ename = 'SMITH'; 

    2、查询与 SMITH 的部门和岗位完全相同的所有雇员

    SELECT * FROM emp WHERE (deptno, job) = (SELECT deptno, job FROM emp WHERE ename = 'SMITH'); 

    在 from 子句中使用子查询

    查询高于自己部门平均工资的员工的信息 

    1. 查出各个部门的平均工资和部门号 

    SELECT deptno, AVG(sal) mysal FROM emp GROUP by deptno; 

    2. 把上面查询的结果看做是一张子表 

    SELECT e.ename, e.deptno, e.sal, ds.mysal FROM emp e, (SELECT deptno, AVG(sal) mysal FROM emp GROUP by deptno) ds WHERE e.deptno = ds.deptno AND e.sal > ds.mysal; 

    当在 from 子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名。(给表取别名的时候不能加 as,给列取别名可以加 as)  

    分页查询

    按雇员的 id 号升序分页 

    Oracle分页一共有三种方式 :

    1.根据 rowid 来分页

    select * from t_test where rowid in (select rid from (select rownum rn, rid from(select rowid rid, cid from t_test order by cid desc) where rownum<1000) where rn>998) order by cid desc; 

    2.按分析函数来分页

    select * from (select t.*, row_number() over(order by cid desc) rk from t_test t) where rk<1000 and rk>998; 

    3.按 rownum 来分页

    select * from (select t.*,rownum rn from(select * from t_test order by cid desc)t where rownum<1000) where rn>998; 

    感觉第 1 种效率最好,第 3 种次之,第 2 种最差。 

    今天笔记做到这,后续有空继续。

    【微信公众号:Stephen】一个毕业三年后自学 Java 入行的程序员。
  • 相关阅读:
    iOS图片压缩上传
    Spring MVC获得HttpServletRequest
    BZOJ 1002 FJOI2007 轮状病毒 递推+高精度
    破解2559
    Redis源代码分析(十七)--- multi事务操作
    Android setTag()与getTag(),与set多个setTag()
    【NOI2015】【程序自己主动分析】【并查集+离散化】
    BZOJ1433 [ZJOI2009]假期的宿舍
    将參数从PHP传递到JavaScript中
    NUTCH2.3 hadoop2.7.1 hbase1.0.1.1 solr5.2.1部署(二)
  • 原文地址:https://www.cnblogs.com/stephen-java/p/10835088.html
Copyright © 2020-2023  润新知