亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Oracle高級查詢

  • http://img1.sycdn.imooc.com//5e5f2a590001d59507160330.jpg


    http://img1.sycdn.imooc.com//5e5f2ac00001d3ff05350185.jpg

    http://img1.sycdn.imooc.com//5e5f2b0c0001e11506460273.jpg


    參考編寫代碼





    查看全部
    0 采集 收起 來源:練習

    2020-03-04

  • 示例三

    按部門統計員工人數,按照如下格式輸出

    http://img1.sycdn.imooc.com//5e5f1a41000173d005790219.jpg

    所有員工入職日期

    select hiredate from emp

    1、使用函數方式

    select count(*) Total,?

    ? ? ? ? ? ?sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) "1980",

    ? ? ? ? ? ?sum(decode(to_char(hiredate,'yyyy'),'1981',1,0))"1981",

    ? ? ? ? ? ?sum(decode(to_char(hiredate,'yyyy'),'1982',1,0))"1982",

    ? ? ? ? ? ?sum(decode(to_char(hiredate,'yyyy'),'1987',1,0))"1987"

    from emp;

    2、使用子查詢方式

    select?

    (select count(*) from emp) Total,

    (select count(*) from emp where to_char(hiredate,'yyyy')='1980') "1980",

    (select count(*) from emp where to_char(hiredate,'yyyy')='1981') "1981",

    (select count(*) from emp where to_char(hiredate,'yyyy')='1982') "1982",

    (select count(*) from emp where to_char(hiredate,'yyyy')='1987') "1987",

    from dual;


    查看全部
    0 采集 收起 來源:案例3

    2020-03-04

  • 示例2

    找到員工表中薪水大于本部門平均薪水的員工

    1、相關子查詢

    select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal from emp e where sal >(select avg(sal) from emp where deptno=e.deptno);

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

    2、多表查詢嵌套子查詢

    select e.empno,e.ename,e.sal,d.avgsal from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d where e.deptno=d.deptno and e.sal>d.avgsal;

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

    寫執行計劃

    explain plan for

    select e.empno,e.ename,e.sal,d.avgsal from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d where e.deptno=d.deptno and e.sal>d.avgsal;

    查看執行計劃

    select * from table (dbms_xplan.display);

    用相關子查詢方式更省資源

    查看全部
    0 采集 收起 來源:案例2

    2020-03-04

  • 分頁查詢顯示員工信息:顯示員工號,姓名,月薪

    -每頁顯示四條記錄

    -顯示第二頁的員工

    -按照月薪降序排列

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

    rownum 行號(順序是默認的,只能使用<,<=,不能使用>,>=)

    e1 表,按照工資降序排列順序

    select rownum,empno,ename,sal from emp order by sal desc

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

    e2 表 1-8號的員工按照員工工資降序排列

    select rownum ,empno,ename,sal from (select rownum ,empno,ename,sal from emp order by sal desc) e1 where rownum <=8) e2

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

    rownum r ,r是e2表的第一列,e1表的行號

    e3 表 為8-5號員工按薪水降序排列

    select?rownum r,empno,ename,sal

    from (select? rownum r,empno,ename,sal?from (select rownum,empno,ename,sal from emp order by sal desc) e1 where rownum<=8) e2 where r>=5;

    查看全部
    0 采集 收起 來源:案例1

    2020-03-04

  • 子查詢中的NULL值問題

    1、單行子查詢中的NULL值問題(子查詢不返回任何行)

    2、多行子查詢中的NULL值問題

    查詢不是老板的員工

    select * from emp where empno not in (select mgr from emp where mgr is not null);


    查看全部
  • 單行子查詢和多行子查詢

    1、單行子查詢只能使用單行操作符;多行子查詢只能使用多行操作符



    單行子查詢示例

    1、查詢員工信息,要求:-職位與7566員工一樣-薪水大于7782員工的薪水

    select * from emp where job= (select job from emp where empno=7566) and sal>(select sal from emp where empno=7782);

    單行子查詢只能使用單行操作符

    在一個主查詢中可以有多個子查詢

    2、查詢工資最低的員工信息

    select * from emp where sal =(select min(sal) from emp );

    3、查詢最低工資大于20號部門最低工資的部門號和部門的最低工資

    select deptno,min(sal) from emp group by deptno having min(sal) > (select min(sal) from emp where deptno=20);

    多行子查詢

    1、IN?

    查詢部門名稱是SALES和ACCOUNTING的員工信息

    select * from emp where deptno in (select deptno from dept where dname ='SALES' or dname='ACCOUNTING');

    select e.* from emp e,dept d where e.deptno=d.deptno and (d.dname='SALES' or d.dname='ACCOUNTING');

    2、ANY

    查詢工資比30號部門任意一個員工高的員工信息

    select * from emp where sal >any (select sal fro emp where deptno=30);

    等價于

    select * from emp where sal >(select min(sal) from emp where deptno=30);

    3、ALL

    查詢工資比30號部門所有員工高的員工信息

    select * from emp where sal >all(select sal from emp where deptno=30);

    等價于

    select * from emp where sal >? (select max(sal) from emp where deptno=30);

    查看全部
  • 主查詢和子查詢的執行順序

    1、一般先執行子查詢,再執行主查詢;但相關子查詢例外

    找到員工表中薪水大于本部門平均薪水的員工

    select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal from emp e where sal> (select avg(sal) from emp where deptno=e.deptno);

    查看全部
  • 子查詢的排序問題

    一般不在子查詢中,使用排序;但在Top-N分析問題中,必須對子查詢排序

    找到員工表中工資最高的前三名

    ---rownum 行號

    1、行號永遠按照默認的順序生成

    2、行號只能使用<,<=;不能使用>,>=

    select rownum,empno,ename,sal from emp;

    select rownum,empno,ename,sal from emp order by sal desc;

    select rownum,empon,ename,sal from (select * from emp order by sal desc) where rownum <=3;

    查看全部
  • 主查詢和子查詢可以不是同一張表

    1、查詢部門名稱是SALES的員工信息

    http://img1.sycdn.imooc.com//5e5dd071000138d502770096.jpg

    多表查詢

    select e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES'


    查看全部
  • FROM 后面的子查詢

    1、查詢員工信息:員工號、姓名、月薪

    select * from (select empno,ename,sal from emp);

    2、查詢員工信息:員工號、姓名、月薪、年薪

    select * from (select empno,ename ,sal,sal*12 年薪 from emp);


    查看全部
  • 不可以使用子查詢的位置:group by

    http://img1.sycdn.imooc.com//5e5dce930001c7f402560135.jpg

    查看全部
  • 原來子查詢可以用來解決排序亂的問題

    查看全部
  • 不懂 說的是什么 意義是什么


    查看全部
  • 直接跳過where的子查詢還真行

    查看全部
  • select 子查詢只能有一行,不行的話就把它變成一行

    查看全部

舉報

0/150
提交
取消
課程須知
小伙伴們,學習本課程前需要掌握Oracle的語法基礎,并且對Oracle的函數有所了解。如不了解這兩部分內容,請移步《Oracle數據庫開發必備利器之SQL基礎》和《Oracle數據庫開發利器之函數》兩門教程。
老師告訴你能學到什么?
1、掌握分組查詢 2、掌握多表查詢 3、掌握子查詢

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!