【從零開始學(xué)習(xí)Oracle數(shù)據(jù)庫(kù)】(2)函數(shù)

--函數(shù)

--查看員工表數(shù)據(jù)
SELECT * FROM emp_test;

--查看部門表數(shù)據(jù)
SELECT * FROM dept_test;


--round( 數(shù)字 , 小數(shù)點(diǎn)后的位數(shù) )用于數(shù)字的四舍五入
--計(jì)算金額的四舍五入 
--注意:Oracle中別名用雙引號(hào)"原樣輸出"挚币,mysql可以用單引號(hào)
SELECT salary*0.1234567 "原樣輸出",ROUND(salary*0.1234567) "默認(rèn)零位小數(shù)", ROUND(salary*0.1234567,2) "保留兩位小數(shù)" FROM emp_test;

--trunc( 數(shù)字 , 小數(shù)點(diǎn)后的位數(shù) )用于截取如果沒有第二個(gè)參數(shù) , 默認(rèn)是 0
--計(jì)算金額 , 末尾不做四舍五入
--注意:Oracle中截取用關(guān)鍵字TRUNC惑灵,MySql用TRUNCATE
SELECT salary*0.1234567 "原樣輸出",TRUNC(salary*0.1234567,2) "直接截取留兩位小數(shù)"  FROM emp_test;


--計(jì)算員工入職多少天?
--計(jì)算時(shí)間差Oracle用(expr1,expr2)DAYS,mysql用函數(shù)DATEDIFF(expr1,expr2),
SELECT name,hire_date,(SYSDATE-hire_date)DAYS FROM emp_test;

--計(jì)算員工入職多少個(gè)月?
--mysql用TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2),Oracle用MONTHS_BETWEEN(date1, date2)
SELECT name, ROUND(MONTHS_BETWEEN(SYSDATE,hire_date)) FROM emp_test;

--計(jì)算 12 個(gè)月之前的時(shí)間點(diǎn)
--Oracle (date, int) *計(jì)算 12 個(gè)月之前的時(shí)間點(diǎn),Myusql用DATE_ADD(date,INTERVAL expr unit)
SELECT ADD_MONTHS(SYSDATE,-12) FROM DUAL;

--計(jì)算本月最后一天
SELECT LAST_DAY(SYSDATE) FROM DUAL;


--把時(shí)間數(shù)據(jù)按指定格式輸出
SELECT to_char(SYSDATE , 'yyyy-mm-dd  hh24:mi:ss') from DUAL;

--插入一條數(shù)據(jù) , 編號(hào)為 1012 , 姓名為 amy , 入職時(shí)間為當(dāng)前系統(tǒng)時(shí)間
INSERT INTO emp_test(emp_id,name,hire_date) VALUES (1012,'amy',SYSDATE); 
SELECT * FROM emp_test;

--插入一條數(shù)據(jù) , 編號(hào)為 1012 , 姓名為 amy , 入職時(shí)間為 2011 年 10 月 10 日
INSERT INTO emp_test(emp_id,name,hire_date) VALUES (1012,'amy',TO_DATE('2011-10-10','yyyy-mm-dd')); 
SELECT * FROM emp_test;

--按指定格式顯示員工姓名和入職時(shí)間 , 顯示格式為: amy 2011-10-10
SELECT name,TO_CHAR(hire_date,'yyyy-mm-dd') FROM emp_test;

--計(jì)算員工的年終獎(jiǎng)金
--要求:
--1)  如果 bonus 不是 null , 發(fā)年終獎(jiǎng)金額為 bonus
--2)  如果 bonus 是 null , 發(fā)年終獎(jiǎng)金額為 salary * 0.5
--3)  如果 bonus 和 salary 都是 null, 發(fā) 100 元安慰一下
--coalesce( 參數(shù)列表 )函數(shù)的作用:返回參數(shù)列表中第一個(gè)非空參數(shù) , 參數(shù)列表中最后一個(gè)值通常為常量
SELECT COALESCE(bonus,salary*0.5,100) FROM emp_test;

--根據(jù)員工的職位 , 計(jì)算加薪后的薪水?dāng)?shù)據(jù)
--要求:
--1)  如果職位是 Analyst:加薪 10%
--2)  如果職位是 Programmer:加薪 5%
--3)  如果職位是 clerk:加薪 2%
--4)  其他職位:薪水丌變
SELECT name,job,salary ,
            CASE job WHEN 'Analyst' THEN  salary*1.1
                             WHEN 'Programmer' THEN  salary*1.05
                             WHEN 'clerk' THEN  salary*1.02
                             ELSE salary
            END new_salary
            FROM emp_test;
--decode()函數(shù)是Oracle 中等價(jià)于 case when 語句的函數(shù) , 作用同 case 語句相同洲敢。
--decode 函數(shù)語法如下:
--decode(判斷條件 , 匹配 1 , 值 1 , 匹配 2 , 值 2 , … , 默認(rèn)值)
--表達(dá)的意思是:如果判斷條件 = 匹配 1 , 則迒回值 1
--判斷條件 = 匹配 2 , 則迒回值 2
--根據(jù)員工的職位 , 計(jì)算加薪后的薪水?dāng)?shù)據(jù)
--要求:和 case 語句相同
--1)  如果職位是 Analyst:加薪 10%
--2)  如果職位是 Programmer:加薪 5%
--3)  如果職位是 clerk:加薪 2%
--4)  其他職位:薪水丌變
SELECT name,job,salary ,
            DECODE(job,'Analyst',salary*1.1,'Programmer',salary*1.05,'clerk',salary*1.02,salary) new_salary
            FROM emp_test;

--薪水由低到高排序( 升序排列 )
SELECT name,salary FROM emp_test ORDER BY salary ASC;

--薪水由高到低排序( 降序排列 )
SELECT name,salary FROM emp_test ORDER BY salary DESC;

--按入職時(shí)間排序 , 入職時(shí)間越早排在前面
SELECT name,hire_date FROM emp_test ORDER BY hire_date ASC;

--按部門排序 , 同一部門按薪水由高到低排序
SELECT name,dept_test_id,salary FROM emp_test ORDER BY dept_test_id,salary;

--員工表中有多少條記錄兔朦?
SELECT COUNT(*) FROM emp_test;

--當(dāng)前帳戶( openlab )下有多少個(gè)表撩扒?
select count(*) from user_tables

--入職時(shí)間不是 null 的數(shù)據(jù)總數(shù)
SELECT COUNT(hire_date) FROM emp_test WHERE hire_date IS NOT NULL;


--計(jì)算員工的薪水總和是多少宰睡?
SELECT SUM(salary) FROM emp_test;

--計(jì)算員工的人數(shù)總和发乔、薪水總和拆魏、平均薪水是多少盯桦?
SELECT COUNT(*), SUM(salary),AVG(salary) FROM emp_test;

--薪水平均值 = 薪水總和 / 人數(shù)總和 avg(salary) = sum(salary) / count(*)
--而 avg(salary)叧按有薪水的員工人數(shù)計(jì)算平均值。這樣得到的數(shù)據(jù)丌夠準(zhǔn)確渤刃。
SELECT COUNT(*), SUM(salary),AVG(NVL(salary,0)) FROM emp_test;

--計(jì)算員工的最高薪水和最低薪水
SELECT max(salary),min(salary) FROM emp_test;

--組函數(shù):
   --count / avg / sum / max / min 如果函數(shù)中寫列名 , 默認(rèn)忽略空值
? -- avg / sum 針對(duì)數(shù)字的操作
? -- max / min 對(duì)所有數(shù)據(jù)類型都可以操作


--按部門計(jì)算每個(gè)部門的最高和最低薪水分別是多少拥峦?
SELECT dept_test_id,max(salary),min(salary) FROM emp_test GROUP BY dept_test_id;

--計(jì)算每個(gè)部門的 薪水總和 和 平均薪水?
SELECT dept_test_id,SUM(salary),AVG(NVL(salary,0)) FROM emp_test GROUP BY dept_test_id;

--每個(gè)部門的統(tǒng)計(jì)信息:
--要求格式如下:
--deptno max_s min_s sum_s avg_s emp_num
--10 10000 5000 23000 6789 3
SELECT dept_test_id deptno,
                max(salary) max_s,
                min(salary) min_s,
                SUM(salary) sum_s,
                AVG(NVL(salary,0)) avg_s, 
                COUNT(*) emp_num
FROM emp_test GROUP BY dept_test_id;

--按職位分組 , 每個(gè)職位的最高卖子、最低薪水和人數(shù)事镣?
SELECT MAX(salary),MIN(salary),COUNT(*) emp_num FROM emp_test GROUP BY job order by emp_num;

SELECT dept_test_id, AVG(NVL(salary,0)) avg_salary  FROM emp_test WHERE dept_test_id IS NOT NULL  GROUP BY dept_test_id HAVING AVG(NVL(salary,0))>5000;

--薪水總和大于 20000 元的部門數(shù)據(jù)?
SELECT dept_test_id, SUM(salary) FROM emp_test WHERE dept_test_id IS NOT NULL GROUP BY dept_test_id HAVING SUM(salary)> 20000;

--哪些職位的人數(shù)超過 2 個(gè)人揪胃?
SELECT job,COUNT(*) FROM emp_test GROUP BY job HAVING COUNT(*)>2;


--查詢最高薪水的是誰璃哟?
SELECT * FROM emp_test WHERE salary=(SELECT MAX(salary) FROM emp_test);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市喊递,隨后出現(xiàn)的幾起案子随闪,更是在濱河造成了極大的恐慌,老刑警劉巖骚勘,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铐伴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俏讹,警方通過查閱死者的電腦和手機(jī)当宴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泽疆,“玉大人户矢,你說我怎么就攤上這事⊙程郏” “怎么了梯浪?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瓢娜。 經(jīng)常有香客問我挂洛,道長(zhǎng),這世上最難降的妖魔是什么眠砾? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任虏劲,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柒巫。我一直安慰自己励堡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布吻育。 她就那樣靜靜地躺著,像睡著了一般淤井。 火紅的嫁衣襯著肌膚如雪布疼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天币狠,我揣著相機(jī)與錄音游两,去河邊找鬼。 笑死漩绵,一個(gè)胖子當(dāng)著我的面吹牛贱案,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播止吐,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宝踪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了碍扔?” 一聲冷哼從身側(cè)響起瘩燥,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎不同,沒想到半個(gè)月后厉膀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡二拐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年服鹅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片百新。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡企软,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饭望,到底是詐尸還是另有隱情澜倦,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布杰妓,位于F島的核電站藻治,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巷挥。R本人自食惡果不足惜桩卵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雏节,春花似錦胜嗓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寥粹,卻和暖如春变过,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涝涤。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工媚狰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阔拳。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓崭孤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親糊肠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辨宠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容