1. 程式人生 > >Oracle-day02 下

Oracle-day02 下

Oracle-day02 下

五、單行函數
(一)字符函數

技術分享圖片
常用字符函數講解:
(1)求字符串長度 LENGTH
語句:

select length(‘ABCD‘) from dual;

顯示結果為:
技術分享圖片
(2)求字符串的子串 SUBSTR
語句:

select substr(‘ABCD‘,2,2) from dual;

顯示結果為:
技術分享圖片
(3)字符串拼接 CONCAT
語句:

select concat(‘ABC‘,‘D‘) from dual;

查詢結果如下:

技術分享圖片

我們也可以用|| 對字符串進行拼接

select ‘ABC‘||‘D‘ from dual;

查詢結果同上。
(二)數值函數

技術分享圖片
常用數值函數講解:
(1)四舍五入函數 ROUND
語句:

select round(100.567) from dual

查詢結果如下:
技術分享圖片
語句:

select round(100.567,2) from dual

查詢結果如下:
技術分享圖片
(2)截取函數 TRUNC
語句:

select trunc(100.567) from dual

查詢結果:
技術分享圖片
語句:

select trunc(100.567,2) from dual

技術分享圖片
(3)取模 MOD
語句:

select mod(10,3) from dual

結果:
技術分享圖片
(三)日期函數

技術分享圖片
技術分享圖片
我們用 sysdate 這個系統變量來獲取當前日期和時間
語句如下:

select sysdate from dual

查詢結果如下:
技術分享圖片
常用日期函數講解:
(1)加月函數 ADD_MONTHS :在當前日期基礎上加指定的月
語句:

select add_months(sysdate,2) from dual

查詢結果如下:
技術分享圖片
(2)求所在月最後一天 LAST_DAY
語句:

select last_day(sysdate) from dual

查詢結果如下:
技術分享圖片
(3)日期截取 TRUNC
語句:


select TRUNC(sysdate) from dual

查詢結果如下:
技術分享圖片
語句:

select TRUNC(sysdate,‘yyyy‘) from dual

查詢結果如下:
技術分享圖片
語句:

select TRUNC(sysdate,‘mm‘) from dual

查詢結果如下:
技術分享圖片
(四)轉換函數
技術分享圖片
技術分享圖片

常用轉換函數講解:
(1)數字轉字符串 TO_CHAR

語句:

select TO_CHAR(1024) from dual

查詢結果:
技術分享圖片
(2)日期轉字符串 TO_CHAR
語句:


select TO_CHAR(sysdate,‘yyyy-mm-dd‘) from dual

查詢結果:
技術分享圖片
語句:

select TO_CHAR(sysdate,‘yyyy-mm-dd hh:mi:ss‘) from dual

查詢結果:

技術分享圖片

(3)字符串轉日期 TO_DATE
語句:

select TO_DATE(‘2017-01-01‘,‘yyyy-mm-dd‘) from dual

查詢結果如下:
技術分享圖片
(4)字符串轉數字 TO_NUMBER
語句:

select to_number(‘100‘) from dual

(五)其它函數
(1)空值處理函數 NVL
用法:
NVL(檢測的值,如果為 null 的值);
語句:

select NVL(NULL,0) from dual

查詢結果如下:
技術分享圖片
需求:
顯示價格表中業主類型 ID 為 1 的價格記錄,如果上限值為 NULL,則顯示 9999999
語句:


select PRICE,MINNUM,NVL(MAXNUM,9999999)
from T_PRICETABLE where OWNERTYPEID=1

查詢結果:
技術分享圖片
(2)空值處理函數 NVL2
用法:
NVL2(檢測的值,如果不為 null 的值,如果為 null 的值);
需求:顯示價格表中業主類型 ID 為 1 的價格記錄,如果上限值為 NULL,顯示“不
限”.
技術分享圖片
語句:

select PRICE,MINNUM,NVL2(MAXNUM,to_char(MAXNUM) , ‘不限‘)
from T_PRICETABLE where OWNERTYPEID=1

(3)條件取值 decode
語法:


decode(條件,值 1,翻譯值 1,值 2,翻譯值 2,...值 n,翻譯值 n,缺省值)

【功能】根據條件返回相應值
需求:顯示下列信息(不要關聯查詢業主類型表,直接判斷 1 2 3 的值)

技術分享圖片

語句:

select name,decode( ownertypeid,1,‘ 居 民 ‘,2,‘ 行 政 事 業 單 位
‘,3,‘商業‘) as 類型
from T_OWNERS

上邊的語句也可以用 case when then 語句來實現

select name ,(case ownertypeid
when 1 then ‘居民‘
when 2 then ‘行政事業單位‘
when 3 then ‘商業‘
else ‘其它‘
end
) from T_OWNERS

還有另外一種寫法:

select name,(case
when ownertypeid= 1 then ‘居民‘
when ownertypeid= 2 then ‘行政事業‘
when ownertypeid= 3 then ‘商業‘
end )
from T_OWNERS

六、行列轉換
需求:按月份統計 2012 年各個地區的水費,如下圖
技術分享圖片
技術分享圖片
需求:按季度統計 2012 年各個地區的水費,如下圖
技術分享圖片

語句如下:
技術分享圖片
七、分析函數
以下三個分析函數可以用於排名使用。
下圖為三種排名方式的舉例
技術分享圖片
(1) RANK
相同的值排名相同,排名跳躍
需求:對 T_ACCOUNT 表的 usenum 字段進行排序,相同的值排名相同,排名跳躍
語句:


select rank() over(order by usenum desc ),usenum from
T_ACCOUNT

結果:
技術分享圖片
(2) DENSE_RANK 相同的值排名相同,排名連續
需求:對 T_ACCOUNT 表的 usenum 字段進行排序,相同的值排名相同,排名連續
語句:

select dense_rank() over(order by usenum desc ),usenum
from T_ACCOUNT

結果:
技術分享圖片
(3) ROW_NUMBER
返回連續的排名,無論值是否相等
需求:對 T_ACCOUNT 表的 usenum 字段進行排序,返回連續的排名,無論值是
否相等
語句:

select row_number() over(order by usenum desc ),usenum
from T_ACCOUNT

技術分享圖片

用 row_number()分析函數實現的分頁查詢相對三層嵌套子查詢要簡單的多:

select * from
(select row_number() over(order by usenum desc )
rownumber,usenum from T_ACCOUNT)
where rownumber>10 and rownumber<=20

查詢結果如下:
技術分享圖片
八、集合運算
(一)什麽是集合運算
集合運算,集合運算就是將兩個或者多個結果集組合成為一個結果集。集合運算
包括:
··UNION ALL(並集),返回各個查詢的所有記錄,包括重復記錄。
··UNION(並集),返回各個查詢的所有記錄,不包括重復記錄。
··INTERSECT(交集),返回兩個查詢共有的記錄。
··MINUS(差集),返回第一個查詢檢索出的記錄減去第二個查詢檢索出的記錄之
後剩余的記錄。
技術分享圖片

(二)並集運算
技術分享圖片
UNION ALL 不去掉重復記錄

select * from t_owners where id<=7
union all
select * from t_owners where id>=5

結果如下:
技術分享圖片
UNION 去掉重復記錄


select * from t_owners where id<=7
union
select * from t_owners where id>=5

技術分享圖片
(三)交集運算
技術分享圖片

select * from t_owners where id<=7
intersect
select * from t_owners where id>=5

結果:
技術分享圖片
(四)差集運算
技術分享圖片

select * from t_owners where id<=7
minus
select * from t_owners where id>=5

結果:
技術分享圖片
如果我們用 minus 運算符來實現分頁,語句如下:

select rownum,t.* from T_ACCOUNT t where rownum<=20
minus
select rownum,t.* from T_ACCOUNT t where rownum<=10

技術分享圖片
九、總結
(一)知識點總結
(二)上機任務布置
為《自來水收費系統》開發統計模塊相關的功能
1.收費日報單(總)
統計某日的收費,按區域分組匯總,效果如下:
技術分享圖片

2.收費日報單(收費員)
統計某收費員某日的收費,按區域分組匯總,效果如下:
技術分享圖片
3.收費月報表(總)
統計某年某月的收費記錄,按區域分組匯總
技術分享圖片
4.收費月報表(收費員)
統計某收費員某年某月的收費記錄,按區域分組匯總
5.收費年報表(分區域統計)
統計某年收費情況,按區域分組匯總,效果如下:
技術分享圖片
6.收費年報表(分月份統計)
統計某年收費情況,按月份分組匯總,效果如下
技術分享圖片
7.收費年報表(分月份統計)
統計某年收費情況,按月份分組匯總,效果如下
技術分享圖片
8.統計用水量,收費金額(分類型統計)
根據業主類型分別統計每種居民的用水量(整數,四舍五入)及收費金額 ,如
果該類型在臺賬表中無數據也需要列出值為 0 的記錄 , 效果如下:
技術分享圖片
分析:這裏所用到的知識點包括左外連接、sum()、分組 group by 、round() 和
nvl()
9.統計每個區域的業主戶數,並列出合計
技術分享圖片
10.統計每個區域的業主戶數,如果該區域沒有業主戶數也要列出 0
如圖:
技術分享圖片

Oracle-day02 下