站長資訊網
        最全最豐富的資訊網站

        一起聊聊Oracle高級查詢(實例詳解)

        本篇文章給大家帶來了關于Oracle高級查詢的相關知識,其中包括了分組查詢、多表查詢和子查詢,希望對大家有幫助。

        一起聊聊Oracle高級查詢(實例詳解)

        Oracle高級查詢

        高級查詢在數據庫的開發過程中應用廣泛,從分組查詢、多表查詢和子查詢三個方面介紹Oracle的高級查詢。

        分組查詢

        分組查詢是按照一定的規則進行分組,分組以后數據會聚合,需要使用聚合函數,但是使用聚合函數不一定要分組,分組的關鍵字是group by。

        常用的聚合函數有:最大值max(),最小值min(),平均值avg(),總和sum(),統計個數count()

        count函數使用列名時會自動忽略空值

        一起聊聊Oracle高級查詢(實例詳解)

        nvl函數可以防止count自動忽略空值,它的作用是當comm為空時返回0,因為0是非空,所以會進入統計總數。

        一起聊聊Oracle高級查詢(實例詳解)

        group by子查詢

        在select 列表中所有未包含在聚合函數中的列都應該包含在group by子句中。

        單列分組

        求每個部門的平均工資,顯示部門號,部門的平均工資。

        select deptno,avg(sal) from emp group by deptno order by deptno

        多列分組

        按部門,不同職位,統計員工的工資總和

        select detpno,job,sum(sal) from emp group by deptno,job order by deptno

        過濾分組

        having子句的使用

        where與having的區別

        • where子句中不能使用聚合函數,先過濾后分組
        • having子句中可以使用聚合函數,先分組后過濾

        注意:從SQL優化的角度上看,盡量使用where,因為where使得分組記錄數大大降低,從而提高效率。

        求平均工資大于2000的部門

        select deptno,avg(sal) from emp where(avg(sal)) > 2000 group by deptno

        一起聊聊Oracle高級查詢(實例詳解)

        where子句中不能使用聚合函數,所以報錯,改成having xxx子句即可。

        select deptno,avg(sal) from emp group by deptno having(avg(sal)) > 2000

        在分組查詢中使用order by

        求每個部門的平均工資,顯示部門號,部門的平均工資,按照工資升序排列。

        select deptno,avg(sal) from emp group by deptno order by avg(sal)

        也可以按列的別名排序

        select deptno,avg(sal) avgsal from emp group by deptno order by avgsal

        還可以按列的序號排序,平均工資是第2列

        select deptno,avg(sal) from emp group by deptno order by 2

        降序排列加上desc即可

        select deptno,avg(sal) from emp group by deptno order by 2 desc

        分組函數的嵌套

        求部門平均工資的最大值

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

        group by語句增強

        主要用在group by語句報表功能

        每個部門,安裝不同職位,求工資總和,部門小結,總結。

        一起聊聊Oracle高級查詢(實例詳解)

        可以使用rollup函數

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

        一起聊聊Oracle高級查詢(實例詳解)

        再設置一下顯示格式,break on deptno表示相同的部門號只顯示一個,skip 1表示不同的部門號之間空1行。

        一起聊聊Oracle高級查詢(實例詳解)

        完善報表顯示

        增加標題,頁碼等

        ttitle col 15 ‘我的報表’ col 35 sql.pno

        設置標題,空15列顯示我的報表,然后空35列顯示頁碼

        col deptno heading 部門號

        col job heading 職位

        col sum(sal) heading 工資總額

        以上3行設置列標題

        break on deptno skip 1

        設置顯示格式,相同的部門號只顯示一個,不同部門號之間空1行

        將這些設置保存到一個sql文件(注意要改成ANSI編碼,否則會出現亂碼并且設置無效),然后通過get命令讀取執行。再次執行查詢語句,得到如下報表。如果出現了多頁,為了顯示美觀,可以設置一頁顯示

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产亚洲精品免费视频播放| 亚洲国产欧美日韩精品一区二区三区 | 国产精品成人不卡在线观看| 亚洲国产成人a精品不卡在线| 国产福利精品视频自拍| 国产2021精品视频免费播放| 日韩精品专区AV无码| 四虎国产精品永久在线看| 国产亚洲精品无码专区| 91精品国产综合久久四虎久久无码一级| 亚洲成人精品久久| 国产精品日本一区二区不卡视频| 亚洲国产精品不卡毛片a在线 | 国产三级精品久久| 国产精品久久久久aaaa| 精品人妻中文av一区二区三区| 一本久久a久久精品亚洲| 久久久精品视频免费观看| 国产精品亚洲专区无码WEB| 99久久99久久精品国产片果冻| www国产精品| 69堂国产成人精品视频不卡| 久久久久无码精品国产不卡| 亚洲av午夜福利精品一区| 在线观看自拍少妇精品| 中文字幕乱码中文乱码51精品| 欧美人与动牲交a欧美精品| 久久se精品一区精品二区国产 | 亚洲精品午夜无码专区| 日韩欧美一区二区三区中文精品 | 国产精品久久久久久久午夜片| 87国产私拍福利精品视频| 99精品国产成人一区二区| 91无码人妻精品一区二区三区L | 久久e热在这里只有国产中文精品99| 国产三级精品三级在线观看| 精品伦精品一区二区三区视频 | 久久精品视频网| 麻豆精品久久久一区二区| 91国内揄拍国内精品情侣对白| 国产成人精品综合在线观看|