NVL2(comm,sal+comm,sal):html
判斷comm是否是空值,若是是空值則返回sal,不是空值則返回sal+comm函數
取數字n的符號,大於0返回1,小於0返回-1,等於0則返回0htm
DECODE(value, if1, then1, if2,then2, if3,then3, . . . else ) blog
至關於if......else......語句,但DECODE()單獨使用的話,通常用於等值判斷排序
練習1:SELECT ename,job,DECODE(job,'MANAGER','經理','SALESMAN','銷售人員','PRESIDENT','總裁') FROM emp; //判斷job這一列的值,若是是'MANAGER'則返回'經理',若是是'SALESMAN'則返回'銷售人員',若是是'PRESIDENT',則返回'總裁'。get
練習2:SELECT ename,job,sal,DECODE(job,'MANAGER',sal*0.8,'SALESMAN',sal+100,sal) 調後薪資 FROM emp; //工資調整:manager的工資下調20%,salesman工資增長100,其他人員不變博客
練習3:進行範圍判斷,根據不一樣的工資範圍,計算出不一樣等級的稅款io
方法1:與SIGN()函數結合使用class
SELECT ename,job,sal,select
DECODE(SIGN(sal-3000),1,sal*0.2,0,sal*0.2,
-1,DECODE(SIGN(sal-2000),1,sal*0.15,0,sal*0.15,
-1,DECODE(SIGN(sal-1000),1,sal*0.1,0,sal*0.1,-1,0)
)) 稅款 FROM emp;
方法2:與TRUNC()函數結合使用
SELECT ename,job,sal,
DECODE(TRUNC(sal/1000),0,0,
1,sal*0.1,2,sal*0.15,sal*0.2) 稅款 FROM emp;
練習4:SELECT ename,job,DECODE(INSTR(ename,'A'),0,'名字中不包含A','名字中包含A') 包含A不 FROM emp; //與INSTR函數結合使用,判斷名字中是否包含A
練習5:查詢僱員姓名、崗位,並以崗位排序,順序爲'CLERK','MANAGER','SALESMAN','ANALYST','PRESIDENT'
方法1:DECODE
SELECT ename,job FROM emp ORDER BY DECODE(job,'CLERK',1,'MANAGER',2,'SALESMAN',3,'ANALYST',4,'PRESIDENT',5);
方法2:CASE WHEN1 ? THEN1 ?WHEN2 ? THEN ?....... END
SELECT ename,job FROM emp ORDER BY CASE job WHEN 'CLERK' THEN 1 WHEN 'MANAGER' THEN 2 WHEN 'SALESMAN' THEN 3 WHEN 'ANALYST' THEN 4 WHEN 'PRESIDENT' THEN 5 END;
多表進行聯合查詢,不使用關聯條件的話,就會產生笛卡爾積現象,產生不少重複無用的數據。select * from emp,dept;
語法:SELECT [DISTINCT] 列名1,列名2... FROM 表1,表2 WHERE 鏈接條件 AND 過濾條件;
外鏈接:
找尋兩個表中相同的列:SELECT ename,job,d.deptno,dname FROM emp e,dept d WHERE e.deptno = d.deptno AND job='CLERK';
SELECT ename,sal,grade FROM emp,salgrade s WHERE sal BETWEEN s.losal AND s.hisal;多表鏈接也可使用除=外的其餘符號進行鏈接
內鏈接:
SELECT e.ename,e.job,e.mgr,m.ename 上司 FROM emp e,emp m WHERE e.mgr = m.empno; 把同一個表看成幾個表來使用,經過賦予別名
例題:查詢員工姓名、工資、工資等級、部門名稱,以及他的上司姓名和工資等級,工資等級均以漢字顯示。
SELECT e.ename,e.sal,
DECODE(s1.grade,1,'第一等級',2,'第二等級',3,'第三等級',4,'第四等級',5,'第五等級') 等級,
dname,m.ename 上司,m.sal 上司sal,
DECODE(s2.grade,1,'第一等級',2,'第二等級',3,'第三等級',4,'第四等級',5,'第五等級') 等級
FROM emp e,emp m,dept d,salgrade s1,salgrade s2
WHERE e.mgr = m.empno AND d.deptno=e.deptno
AND (e.sal BETWEEN s1.losal AND s1.hisal) AND (m.sal BETWEEN s2.losal AND s2.hisal);
關鍵字 distinct 用於返回惟一不一樣的值,只能在SELECT 語句中使用,不能在 INSERT, DELETE, UPDATE 語句中使用
distinct是將全部查詢的字段進行對比去重,全部字段都徹底相同纔會去重
distinct 必須放在查詢字段開頭進行查詢,distinct對NULL是不進行過濾的,即返回的結果中是包含NULL值的。
今日練習:
一、查詢部門名爲’SALES’的員工信息。
SELECT * FROM emp e,dept d
WHERE (e.deptno=d.deptno) AND (d.dname='SALES');
二、查詢在部門所在地爲NEW YORK的員工的員工姓名,部門名稱和崗位名稱。
SELECT e.ename,d.dname,e.job
FROM emp e,dept d
WHERE (e.deptno=d.deptno) AND (d.loc='NEW YORK');
做者:kerwin-chyl
文章連接:https:////www.cnblogs.com/kerwin-chyl
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。