美文网首页
Oracle 学习笔记(八)

Oracle 学习笔记(八)

作者: Stephen_java | 来源:发表于2019-05-08 22:11 被阅读0次

    子查询

    多列子查询

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

    查询与 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)  

    分页查询

    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 种最差。 

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

    相关文章

      网友评论

          本文标题:Oracle 学习笔记(八)

          本文链接:https://www.haomeiwen.com/subject/lbsboqtx.html