1. 程式人生 > >Oracle資料庫複習(1)

Oracle資料庫複習(1)

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(+);