1. 程式人生 > >oracle的學習筆記一

oracle的學習筆記一

一、給列起別名的規則:特殊字元(#$除外)、數字、空格需要加雙引號處理;中文加不加雙引號都可以;as關鍵字可以省略。

-- 查詢員工姓名,員工編號,員工的工作。
SELECT empno AS "員工編號",ename "員工姓名",job 工作 FROM emp;
select empno as "員工編號",ename "員工姓名",job 工 作 from emp;--語法錯誤 ,別名“工 作”中出現空格沒有加雙引號
select empno as "員工編號",ename "員工姓名",job "工 作" from emp;--正確,出現空格加雙引號
select empno as "員工編號",ename "員工@姓名",job "工 作" from emp;--正確,出現特殊字元加雙引號


select empno as "員工編號",ename "123",job "工 作" from emp;--正確,出現數字加雙引號
select empno as 員工$編號,ename "123",job "工 作" from emp;--正確,特殊字元中(#,$)除外


二、NVL()函式的使用:要記住一點,null值參與運算,結果為空

emp表:有員工沒有獎金


--計算一下員工的年薪(月薪x12+獎金)
SELECT sal*12+comm 年薪 FROM emp; 

未使用nvl函式的情況,查詢結果如下:


--nvl(v1,v2),其中v1是原始值,v2是當為空時參與計算的值


SELECT sal*12+NVL(comm,0)  AS 年薪 FROM emp;

使用nvl函式的情況下,查詢結果如下:



三、distinct關鍵字和oracle特有的連線符“||”

需求:在一列中顯示員工編號和員工姓名;方法:使用oracle特有的連線符

select 'empno:'||empno||'  '||'ename:'||ename 個人簡介 from emp;

查詢結果:


distinct去重關鍵字,在查詢結果中去掉重複的

select distinct job from emp;


四、條件查詢(目的是過濾出滿足條件的結果)

where是條件關鍵字,後面加條件

比較運算子:> < >= <= = <> !=

邏輯運算子:and or not

其餘運算表示式:like模糊查詢 % 匹配0個或多個字元

in   not in  判斷範圍

between and 判斷區間,包含邊界

is null,is not null 判斷是否為空值

---查詢工作不是 MANAGER 的員工資訊
SELECT * FROM emp WHERE job !='MANAGER';
SELECT * FROM emp WHERE job <>'MANAGER';
--查詢工作是領導MANAGER 並且工資> 2000的員工資訊
SELECT * FROM emp WHERE job='MANAGER' AND sal>2000;
--查詢工資>2000 或者 工作是MANAGER的員工資訊
SELECT * FROM emp WHERE sal>2000 OR job='MANAGER';
--查詢員工姓名包含M的員工資訊
SELECT * FROM emp WHERE ename LIKE '%M%';
--查詢員工姓名第二位M的員工資訊
SELECT * FROM emp WHERE ename LIKE '_M%';
--查詢員工工作是MANAGER 或者工作室PRESIDENT
SELECT * FROM emp WHERE job='MANAGER' OR job='MANAGER';
--使用in來實現
SELECT * FROM emp WHERE job IN('MANAGER','PRESIDENT');
--查詢工資在1500 和3000之間的員工資訊
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;
--查詢有獎金的員工資訊
SELECT * FROM emp WHERE comm IS NOT NULL;
--null不等於任何值  如果對null判斷 比較判斷 UNKUOW 
SELECT * FROM emp WHERE comm=NULL; 

五、排序關鍵字order by關鍵字的使用

--將員工的資料按照工資從小到大排序  
SELECT * FROM emp ORDER BY sal;
--將員工資料按照獎金倒敘排序
SELECT * FROM emp ORDER BY comm DESC;
--null倒序排序 null在上面  指定null到末尾  nulls last
SELECT * FROM emp ORDER BY comm DESC NULLS LAST;



六、資料庫函式:單行函式(數值、字元、日期、轉換、通用函式),多行函式(max,min,sum,count,avg)

1.四捨五入 round(v1,v2) v1是原始的數值 v2是保留的小數位數(v2預設數值是0)
select round(43.726) from dual;                                       
select round(43.726,0) from dual;--44
select round(43.726,1) from dual;--43.7
select round(43.726,2) from dual;--43.73
select round(43.726,-1) from dual;--40 
select round(43.726,-2) from dual;--0
select round(53.726,-2) from dual;--100

2.--擷取 trunc(v1,v2) v1是原始的數值 v2是保留的小數位數( v2預設數值是0)
 --43.726
select trunc(43.726) from dual;  
select trunc(43.726,0) from dual;--43
select trunc(43.726,1) from dual;--43.7
select trunc(43.726,2) from dual;--43.72
select trunc(43.726,-1) from dual;--40 
select trunc(43.726,-2) from dual;--0
select trunc(53.726,-2) from dual;--0  

3.--mod取餘數
select mod(10,3) from dual; --1

4.獲取字元的長度  length(v1)
--abcde
select length('abcde') from dual;

5.擷取字串    substr(v1,v2,v3) v1原始字串 v2開始擷取位置 v3擷取長度
--擷取字串 從0開始和1開始都是第一位開始擷取

select substr('abcde',0,2) from dual; -- ab
select substr('abcde',1,2) from dual; --ab 
select substr('abcde',-1,2) from dual; --  e 
select substr('abcde',-2,2) from dual; --  de 

6.替換字串    replace(v1,v2,v3)v1原始字串 v2被替換的字元 v3替換後的字元
--替換字串 hello  替換匹配的所有字元

select replace('hello','l','o') from dual; -- heooo 
select replace('hello','he','l') from dual; -- lllo
select replace('hello','he','') from dual; -- llo

7.大小寫轉換   upper()   lower()
select * from emp;
select * from emp where ename = 'smith'
select * from emp where ename = 'sMIth'
select * from emp where ename = upper('smith');
select * from emp where ename = upper('Smith');
select * from emp where ename = upper('SMITH');

8.去除空格    trim()

--去除空格__abc_de__ 去除字串兩端的空格
select trim('  abc de  ') from dual;--abc_de


七、日期函式

--檢視系統當前時間

SELECT SYSDATE FROM dual;

--增加月份,查詢3個月以後的日期
SELECT add_months(SYSDATE,3) FROM dual;
--計算所有員工到目前為止,入職了多少個月
SELECT months_between(SYSDATE,hiredate) FROM emp;
----計算所有員工入職的天數 日期和日期做計算 結果為天數
SELECT ROUND(SYSDATE-hiredate) FROM emp;

八、轉換函式

--字串轉數字
SELECT to_number('123')+1 FROM dual;
--數字轉字串
select to_char(sal,'$99,999.00') from emp;
--日期轉字串
SELECT to_char(SYSDATE,'yyyy-mm-dd') FROM dual;
SELECT to_char(SYSDATE,'hh:mi:ss') FROM dual;
SELECT to_char(SYSDATE,'yyyy-MM-dd HH:mi:ss') FROM dual;
--字串轉日期
SELECT to_date('2017-05-03','yyyy-mm-dd') FROM dual;
SELECT to_date('2017-05-03 6:08:32','yyyy-mm-dd hh:mi:ss') FROM dual;--小時只能取1-12的值
SELECT to_date('2017-05-03 16:08:32','yyyy-mm-dd hh24:mi:ss') FROM dual;--小時可以取1-24的值


九、聚合函式和分組函式的使用


---查詢每個部門的平均工資
select * from emp;
SELECT avg(sal) from emp group by deptno;
--顯示部門編號
select deptno,avg(sal) from emp group by deptno;
--加入其餘的列是不可以的,使用group by,select語句只能查詢分組的列和聚合函式
select job,deptno,avg(sal) from emp group by deptno;
--使用多個列做分組 必須多個列的數值一致 才為一組
select job,deptno,count(*) from emp group by deptno,job;
--查詢部門平均工資>2000的部門編號
select deptno,avg(sal)  from emp group by deptno having avg(sal)>2000;
--mySql分組可以起別名過濾
select deptno,avg(sal)  s  from emp group by deptno having s >2000;