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;