1. 程式人生 > 其它 >Oracle資料庫(二)常用關鍵字以及函式

Oracle資料庫(二)常用關鍵字以及函式

常用關鍵字

insert into---插入資料

delete---刪除資料

update---更新一條資料

select---實際工作中儘量不要寫*

set---設定某些屬性

where---給執行的語句加限制條件

--增加資訊 1
insert into p_dept(deptno,dname,loc)
values (50,'ceshi','ceshi');
commit;
--增加資訊 2
insert into p_dept
values (60,'ceshi','ceshi');
commit;
--增加資訊 3
insert into p_dept(deptno)
values (70);
commit;

--查詢
select t.*, t.rowid from P_DEPT t
select *, t.rowid from P_DEPT
select t.deptno from P_DEPT t where t.dname='SALES'

--修改deptno為60的資料dname為ceshi2
update P_DEPT t set t.dname='ceshi2' where t.deptno=60

--刪除資料
delete from p_dept e where e.deptno=60;
commit;

in---在某個範圍內

--查詢工資是800和3000的
select * from p_emp t where t.sal in (800,3000)

like(%, _)---模糊查詢, %表示任意個字元, _表示單個字元

--查詢name是T 開頭的
select * from p_emp t where t.ename like 'T%'
--查詢name是T 開頭,後面三個字元的
select * from p_emp t where t.ename like 'T___'

order by---(列名或者寫索引:1, 2) ASC正序(預設)  DESC倒敘

--按照工資排序
select * from p_emp e order by e.sal
--按照職位和工資排序,工資要大到小
select * from p_emp e order by e.job,e.sal desc
--按照第一列排序
select * from p_emp e order by 1

group by---按照某幾列分組

having---分組之後的過濾

--按照職位分組
select e.job from p_emp e group by e.job
--按照職位分組,查人數大於2的
select e.job from p_emp e group by e.job having count(*)>2

case...when...---類似於分支

--sex為1=男,0=女
select e.ename 姓名, case e.sex when 0 then '女' when 1 then '男' else '保密' end 性別 from  p_emp e
--另一種寫法
select e.ename, case when e.sex=0 then '女' when e.sex=1 then '男' else '保密' end from  p_emp e

distinct---去除重複

--去重複
select distinct e.job from p_emp e

between...and(閉合區間, 即包括前面的數, 也包括後面的數)

--查工資在800-3000的
select * from p_emp e where e.sal between 800 and 3000

all---表示一個集合中所有的元素

any/some---表示一個集合中任意一個元素

--查詢工資最高的
select * from p_emp t where t.sal >=all(select t1.sal from p_emp t1)

常用函式 to_char---轉換成字元型資料

to_date---轉換成日期型資料

--日期與字元轉換,dual為虛擬表
select to_char(t.hiredate,'yyyy-mm-dd') from p_emp t
select to_date('1994-10-20','yyyy-mm-dd') from dual
--計算時間差
select to_date('1994-10-20','yyyy-mm-dd')-sysdate from dual
--查詢1990之後出生
select * from p_emp t where t.hiredate > to_date('19900101','yyyymmdd')

分組函式:

mod---取餘函式

avg---平均數函式

sum---求和函式

count---計數函式

--計算每個工作的總工資,平均工資,人數  分組
select t.job,sum(t.sal),avg(t.sal),count(t.ename) from p_emp t group by t.job

decode---類似於分支語句的函式

--查詢性別
select e.ename ,decode(e.sex,1,'男',0,'女','保密') from p_emp e

substr---分割字串

--分割name
select substr(e.ename,1) from p_emp e

max---取最大值函式

min---取最小值函式

--查詢最高,最低工資
select max(e.sal) from p_emp e
select min(e.sal) from p_emp e

trunc---取整函式

ceil---向上取整函式

floor---向下取整

--取整,向上,向下 可用於日期
select trunc(12.345) from dual

select trunc(sysdate) from dual

select ceil(12.345) from dual

select floor(12.345) from dual

nvl---過濾空值函式

nvl2---過濾空值函式2

--過濾空值為0,只能處理數字
select nvl(e.comm,0) from p_emp e
select avg(e.comm) from p_emp e --除以不為空的人數
select avg(nvl(e.comm,0)) from p_emp e  --除以總人數
--可以處理字串,傳三個引數
select nvl2(e.comm,'為空','不為空') from p_emp e

lower---將字母全部改為小寫

upper---改為大寫

concat---連線兩個字串

? wm_concat---列轉行函式(也屬於分組函式)

--只能連線兩個字串
select concat('aaa','bbb') from dual
select wm_concat() from --不推薦使用,將一列值連結可分租