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

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

Oracle高級查詢

  • 主查詢和子查詢可以不是一張表

    即涉及到多表操作時,有兩種解決方案,方案一是子查詢,方案二是多表查詢

    例:查詢部門名稱是sales的員工信息

    方法一

    select *

    from emp

    where emp_no = ( select emp_no

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?from dept

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?where dept_name = ' sales');

    方法二

    select e.*?

    from emp e,dept d?

    where e.deptno=d.deptno and d.dname='SALES';



    查看全部
  • select子查詢必須是單行子查詢,單行子查詢只能返回一行記錄

    from后面的子查詢是把子查詢的內容當作一個新表

    查看全部
  • 5d1317700001693912800720-156-88.jpg

    5d131843000101cc12800720-156-88.jpg

    。。。。。

    查看全部
  • 自連接 核心:通過別名,將同一張表視為多張表

    select e.ename 員工姓名,b.bname 老板姓名?

    from emp e,emp b?

    where e.mgr=b.empno;

    自連接? 一張表取兩個別名


    查看全部
    0 采集 收起 來源:[Oracle] 自連接

    2019-10-19

  • 不等值連接

    select e.empno,e.ename,e.sal,s.grade?

    from emp e,salgrade s?

    where e.sal between s.losal and s.hisal;

    運用between and 查詢條件? 小值在前and 大值在后

    查看全部
  • 等值連接

    select e.empno,e.ename,e.sal,d.dname

    ?from emp e,dept d?

    where? e.deptno = d.deptno;

    查看全部
  • 5c7f6ca6000128ea12800720-156-88.jpg

    每張表的列數相加,行數相乘就得到了笛卡爾積最終表

    多表查詢進行笛卡爾集運算時,產生的所有結果中并不是完全正確的,有部分結果是不需要的,為了避免笛卡爾全集中的一些錯誤,需要在where中使用連接條件,然而連接條件的個數與參加進行笛卡爾集運算的表的個數存在一定關系: ? ? ? ? ? ? ? 連接條件個數=n-1 ?(n為參加笛卡爾集運算的表的總個數)



    查看全部
  • 分組函數可以進行嵌套,例子如下:

    求部門平均工資的最大值

    select max(avg(sal)) from emp group by deptno;


    查看全部
  • orderby可以根據列,別名,表達式,序號進行排序

    1.select deptno,avg(sal)平均工資 from emp group by deptno?

    order?by ? 平均工資

    *平均工資是avg(sal)的別名,order by語句可以直接使用別名,默認按升序排序

    2.select?deptno,avg(sal)平均工資 from emp group by?deptno?

    order?by ? 2

    *select語句第二列是平均工資,所以order by語句后面直接寫2也是跟第一條語句執行結果一樣

    a命令-append

    a命令表示在上一條命令后面追加語句

    a命令后必須跟兩個或兩個以上的空格,若只打一個空格則表示追加語句緊跟上一條語句

    實例 a desc:order by 2desc

    實例 a? desc:order by 2 desc


    查看全部
  • 1 having 作用是過濾分組,因此having排在group后面

    格式:select column, group_function

    from table

    where..

    group by..

    having...

    order by...;

    2 where, having功能相似,但是區別在于where不能使用組函數而having能,沒有組函數的情況下,where和having可以互換,盡量使用where

    查看全部
  • select a, 組函數(x)

    from table?

    group by a;

    select 列表中所有未包含在組函數中的列都要包含在GROUP BY 子句中;而GROUP BY子句中的列不必包含在SELECT列表中,此時查詢結果也只有select中的列

    select a,b,c,avg(sal)

    from emp

    group by a,b,c;


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

    select empno,ename,sal

    from emp e

    where sal>(select avg(sal) from emp where deptno=e.deptno);


    查看全部
  • group by rollup(a,b)

    ????相當于

    ????????group by a,b??

    ????????+

    ????????group by a?

    ????????+

    ????????group by null?

    例:

    ????select deptno,job,sum(sal) from emp group by rollup(deptno,job);

    ????????先按照不同部門不同職位查出薪資總和顯示(deptno,job,sum(sal))

    ????????再按照不同部門查出薪資總和顯示(deptno,sum(sal))

    ????????再查出薪資總和顯示(sum(sal))

    ????修改報表格式(只在sqlplus中有效):

    ????????break on deptno skip 2; 相同的deptno只顯示一次,不同的跳過兩行

    ????????set pagesize 30;


    查看全部
  • 求部門平均工資的最大值

    select max(avg(sal)) from emp group by deptno;

    查看全部
  • select count(*) as total,

    ? ?sum(case to_char(t.hiredate,'yyyy') ?when'1981' then 1 else 0 end) "1981",

    ? ?sum(case to_char(t.hiredate,'yyyy') ?when'1980' then 1 else 0 end) "1980",

    ? ?sum(case to_char(t.hiredate,'yyyy') ?when'1987' then 1 else 0 end) "1987",

    ? ?sum(case to_char(t.hiredate,'yyyy') ?when'1982' then 1 else 0 end) "1982"


    ?from emp t;


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

    2019-08-25

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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