zoukankan      html  css  js  c++  java
  • 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 入行的程序员。
  • 相关阅读:
    Notes of Daily Scrum Meeting(12.18)
    Notes of Daily Scrum Meeting(12.17)
    Notes of Daily Scrum Meeting(12.16)
    Notes of Daily Scrum Meeting(12.8)
    Notes of Daily Scrum Meeting(12.5)
    Notes of Daily Scrum Meeting(12.3)
    Notes of Daily Scrum Meeting(11.12)
    Linux中profile、bashrc、bash_profile之间的区别和联系
    Linux GCC编译
    mysql 5.7.16 远程连接
  • 原文地址:https://www.cnblogs.com/stephen-java/p/10835088.html
Copyright © 2011-2022 走看看