oracle資料集合的操作

來源:互聯網
上載者:User

標籤:資訊   完成   關心   關於   功能   參與   推薦   color   div   

一、統計函數    統計函數包括:    COUNT():統計個數    SUM():計算求和    MIN():求最小值    AVG():求平均值    MAX():求最大值     範例:計算emp表中的總人數、平均工資、總工資、最低工資與最高工資    SELECT COUNT(*) 人數, AVG(sal) 平均工資, SUM(sal) 每月總支出,MIN(sal) 最低工資,MAX(sal) 最高工資 FROM emp;範例:統計出公司的平均僱傭年限SELECT AVG(MONTHS_BETWEEN(SYSDATE,hiredate)/12)FROM emp;  ---統計函數允許與其他的函數嵌套 注意:以上的幾個操作函數,在表中沒有資料的時候,只有COUNT()函數會返回結果,其他都是null。 二、分組統計 如果要進行分組則應該使用GROUP BY句子完成,那麼此時的SQL文法結構變為如下形式:【4選出所需要的資料列】SELECT [DISTINCT] * | 分組列[別名],分組列 [別名]…【1確定資料來源】FROM 表名【2篩選資料行】[WHERE 限定條件(s)];稱[別名]【3對篩選的行分組】[GROUP BY 分組欄位,分組欄位…]【5資料排序】ORDER BY 排序欄位 [ASC|DESC],排序欄位 [ASC|DESC], …  範例:根據部門編號分組,查詢出每個部門的編號、人數、平均工資SELECT deptno, COUNT(*), AVG(sal)FROM empGROUP BY deptno; 使用分組需要注意三個條件:1、如果查詢不使用GROUP BY 子句,那麼SELECT 子句中只允許出現統計函數,其他任何欄位不允許出現。 2、如果查詢中使用了GROUP BY 子句,那麼SELECT子句中只允許出現分組欄位、統計函數、其他欄位都不允許出現。3、統計函數允許嵌套,但是嵌套之後的SELECT子句裡面只允許出現嵌套函數,而不允許出現任何欄位,包括分組欄位。 三、HAVING 子句 HAVING 子句:有HAVING時必然有GROUP BY。反之未必。【5選出所需要的資料列】SELECT [DISTINCT] * | 分組列[別名],分組列 [別名]…【1確定資料來源】FROM 表名稱[別名]【2篩選資料行】[WHERE 限定條件(s)];【3對篩選的行分組】[GROUP BY 分組欄位,分組欄位…]【4 針對於篩選的行分組】[HAVING 分組過濾]【6資料排序】ORDER BY 排序欄位 [ASC|DESC],排序欄位 [ASC|DESC], … 範例:要求查詢出每個職位的名稱,職位的平均工資,但是要求顯示的平均工資高於2000。SELECT job, AVG(sal)FROM empGROUP BY jobHAVING AVG(sal) > 2000; 說明:關於WHERE與HAVING的區別?WHERE子句是在GROUP BY 分組之前進行篩選,指的是選出那些可以參與分組的資料,並且WHERE子句中不允許使用統計函數;HAVING子句實在GROUP BY分組之後執行的,可以使用統計函數   四、子查詢嵌套子查詢就是查詢嵌套。都需要使用()。而且查詢子句的一個任意位置上都可以隨意出現子查詢。但是出現子查詢最多的位置:WHERE, FROM,HAVING 。如下使用推薦方案。 WHERE子句:子查詢返回單行單列、單行多列、多行單列; HAVING子句:子查詢返回單行單列,而且要使用統計函數過濾; FROM子句:子查詢返回的是多行多列;  1、where子句:        where子句中主要返回單行單列、單行多列、多行單列等幾種情況:        範例:要求查詢出工資工資最低的固原資訊。        SELECT *        FROM emp        WHERE sal=(SELECT MIN(sal) FROM emp);         對於where子句查詢返回多行單列的情況,那麼實質上就相當於告訴使用者一個資料的操作範圍。而對範圍的判斷,主要有三個運算子:IN 、ANY 、ALL        IN 操作:範例:找出工資在MANAGER職員範圍內的僱員資訊SELECT *FROM empWHERE sal IN(SELECT sal FROM emp WHERE job = ‘MANAGER‘); NOT IN操作:範例:找出工資不在MANAGER職員範圍內的僱員資訊SELECT *FROM empWHERE sal IN(SELECT sal FROM emp WHERE job = ‘MANAGER‘); 注意,這裡的操作,一定要保證子句裡查詢的結果不為null。 ANY操作:1、=ANY: 功能上與IN完全沒有任何區別SELECT *FROM empWHERE sal = ANY (SELECT sal FROM emp WHERE job = ‘MANAGER‘); 2、>ANY: 比子查詢返回的最小的內容要大SELECT *FROM empWHERE sal > ANY (SELECT sal FROM emp WHERE job = ‘MANAGER‘); 3、<ANY: 比查詢返回的最大值的內容要小SELECT *FROM empWHERE sal < ANY (SELECT sal FROM emp WHERE job = ‘MANAGER‘);  ALL操作:1、>ALL: 比子查詢返回最大的值要大SELECT *FROM empWHERE sal > All (SELECT sal FROM emp WHERE job = ‘MANAGER‘); 2、<ALL: 比子查詢返回的最小的值還要小SELECT *FROM empWHERE sal < All (SELECT sal FROM emp WHERE job = ‘MANAGER‘);  Exists()判斷是否滿足條件如果現在子查詢有資料返回(不管任何資料)就表示條件滿足。那麼就顯示出資料,否則不顯示。使用exists()只關心子查詢裡面返回的是否有行,至於什麼行,它不關心SELECT *FROM EMP
WHERE EXISTS( SELECT * FROM emp WHERE empno=7839); 2、having 子句使用子查詢使用HAVING的前提是得使用了GROUP BY,而使用了GROUP BY就一定要分組。範例:要求統計出所有高於公司平均工資的部門編號、平均工資、部門人數。SELECT deptno, COUNT(*),AVG(sal)FROM empGROUP BY deptnoHAVING AVG(sal) > (SELECT AVG(sal) FROM emp); 3、from子句使用子查詢 範例:將這個語句查詢出來的表最為一張暫存資料表:SELECT deptno, COUNT(empno) count, AVG(sal) avg  FROM emp  GROUP BY deptno---根據部門進行分組查詢出部門人數、平均工資等資訊。然後將temp這張表與dept這張表進行多表查詢。 SELECT d.deptno, d.dname, d.loc, temp.count, temp.avgFROM dept d, ( SELECT deptno, COUNT(empno) count, AVG(sal) avgFROM emp  GROUP BY deptno ) temp  WHERE d.deptno = temp.deptno(+);              

oracle資料集合的操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.