Oracle資料庫複習(1)
阿新 • • 發佈:2018-11-22
1 查詢員工姓名中含有下劃線的員工 SELECT *FROM emp WHERE ename LIKE '%\_'ESCAPE '\'; 2 order by +多列 則排序結果由第一例決定 且依次受到之後列的影響。 --如:SELECT *FROM emp ORDER BY deptno, empno; --先對emp按照deptno排序,再按照empno排序,由於一個部門有多個員工,因而排序結果是對相同部門的員工 按照員工號碼再次進行排序。 3 排序的時候 如何將空值排到最後 SELECT *FROM emp order by comm NULLS LAST; 4 單行函式:接受引數返回一個結果 只對一行進行變換 每行返回一個結果 可以轉換資料型別 可以巢狀 引數可以是一列或一個值 (1)字元函式 SELECT INITCAP(ENAME) FROM emp; 將所有的員工姓名由原來的任意狀態改變成首字母大寫的狀態 (2)日期處理函式 SELECT TO_CHAR(sysdate,'yyy-mm-dd hh12:mi:ss') FROM DATE; 計算員工入職天數 SELECT ename ,sysdate -hiredate from emp; 精確計算員工入職月數 SELECT MONTHS_BETWEEN(sysdate,hiredate)FROM EMP; 計算下一個星期五 注意這裡涉及到本地化的工作 SELECT NEXT_DAY(SYSDATE,'星期六') FROM DUAL; 對日期進行四捨五入:預設對日進行四捨五入 即過了12點就是明天了 否則就是今天 如 SELECT ROUND(SYSDATE ,'MONTH') FROM dual; 今天是2018-11-19 則會顯示的是01-12月-18 (3)資料型別轉換 隱式型別轉換:可以把日期轉換成數字進行比較 SELECT '111'+222 FROM dual;//按照加減乘除的邏輯進行運算 SELECT '111'||222 FROM dual;//按照字串拼接的邏輯進行運算 顯示轉換:字串轉數字 字串轉日期 日期轉字串 數字轉字串to_char函式對數字的轉換 SELECT ename ,to_char(sal,'L9,999.99') FROM EMP; SELECT ename,to_number('¥199,322.33','L9,999.99') FROM emp; (4) IF THEN – ELSE 簡單case語句 CASE *** WHEN *** THEN **** ELSE *** END eg :給總裁漲工資1000 給經理漲工資800 其他人 500 SELECT ename ,CASE JOB WHEN 'PRISIDENT' THEN SAL+1000 WHEN 'MANAGER' THEN SAL+800 ELSE SAL+500 END FROM emp; 或者使用oracle語法 語法格式: DECODE(COL|expression,search1,result1,..,..,default); SELECT ename,(decode(job,'prisident',sal+1000,'manager' ,sal +500, sal+200)) from emp; case搜尋語句 eg: 如果員工的收入大於8000 則是高收入 5000 和8000之間 則是中等收入 否則是低收入 SELECT ename,CASE WHEN SAL>8000 THEN '高收入' WHEN SAL>=5000 AND SAL<=8000 THEN '中等收入' ELSE'低等收入' END '收入分級'; 5 多行函式又叫多行函式 分組函式作用於多行,對每組函式,只返回一個結果 group by用於分組 having 過濾分組結果集。 注意 :組函式具有自動濾空功能,做修正。所有的資料的檢索,都必須在分組的結果之上 組函式除外 eg: 求每個部門不同工種的平均工資 SELECT deptno ,job Avg(sal) from emp group by deptno,job;//先按部門分組 再按照工種分組。 6 條件過濾 WHERE子句和having子句的比較 先分組,再過濾 SELECT deptno ,avg(sal) from emp group by deptno having deptno =10; 先過濾,再分組 SELECT deptno,avg(sal) from emp where deptno =10 group by deptno; 7 多表查詢 查詢員工的薪水級別 SELECT e.ename,e.sal,s.* from emp e,salgrade s where e.sal between s.losal and s.hisal; 按部門統計員工人數:部門號 部門名稱 各部門人數 8 外連線技術 //右外連線 :+寫在等號的左邊 那邊少寫哪邊 SELECT d.dname,d.deptno ,count(e.ename) from emp e,dept d where e.deptno(+) = d.deptno group by d.deptno.d.dname; SELECT d.dname.d.deptno,count(e.ename) from emp e right join dept d on where e.deptno = d.deptno group by d.deptno,d,dname; //左外連線 : + 寫在等號的右邊 那邊少些哪邊 9 自連線技術 如:查詢員工的姓名和他老闆的姓名(最大的boss 沒有boss 也就是有個員工沒有老闆) SELECT e.ename,s.ename from emp e ,emp s where e.mgr = s.empno(+);