oracle 10g 操作筆記

1、orcale 數據庫
DDL 定義語言  create drop 
DML 操作語言  insert  delete update
DCL 控制語言  grant revoke  commit




orcale中  number(7) 數據類型  和date  數據類型 可以進行 數學運算,  但是date類型 不能進行 乘法和除法運算。 空值NULL做數學運算還是空


desc  employees ; 顯示錶的字段列。


pl_sql 中 ed 顯示編輯窗口   / +enter 執行編輯窗口內容。


sql語言 不區分大小寫 。  註釋用 --


sql中語言與關鍵詞 縮進分行。


列的別名   1、空格 + 別名名稱  2. select age  as nianling  列+ as 列別名名稱  3、 別名名稱 用雙引號 "a B _d" 則引號中是啥 別名就是啥  可以是多個單詞  




distinct 查詢非重複記錄。放在查詢字段的首列,不能出現在非第一列的  字段列中。


|| 連接符 ||  連接多列列名  。


select  name||'`s age is '|| age  as "Deteils" from employees;








字符類型varcahr2(32)和日期類型Date  要包含在 ''單引號中。


默認日期類型  6-7月-2009  日-月-年的 格式 。   條件比較時   to_char(字段名 ,'yyyy-mm-dd') 轉換日期格式。




SQL語句中 不區分大小寫,但是 列值區分大小寫 。 推薦 在SQL語句中逢 關鍵詞折行提高可讀性 。
select *  from  employees 
where name='john';


SELECT *  from  employees 
where name='JohN';


篩選條件  where  


= , <> ,>=,  <=, < ,>.


between  A and  B 包含A 和B的邊界。  salary >=A and salary<=B  


name  in (A,D,F,M) 等價於 name=A or name=D 。。。


like 


%一個或者多個字符 
_一個字符 


escape 轉義字符  如: name中 包含 _的記錄。   like  '%\_%' escape '\'   用 \或者# 均可


is null


is not null 


and or not 


排序 order by  


desc 降序   asc 升序   


單行函數 :


字符函數:
to_char(hire_date,'yyyy-mm-dd')='2013-09-23';把默認日期類型轉換爲指定格式的字符類型。 默認日期類型格式:'23-9月-2013' 


upper(last_name)='ABSR' --轉換成大寫之後進行比較相等 
lower(last_name)='cvbn' --字段的值轉換爲小寫後與'cvbn'進行比較
initcap(last_name)='John'; --首字母大寫其餘小寫


concat 連接多個字符


---數據庫中位置是從1開始 , 區別於java中字符串位置從0開始。
substr('hellowworld', 2,4) 截取字符串, 從字符串第二個位置開始,截取4個長度的字符串(不是截取到第四個位置) 。


length('hellowworld'); 返回 字符串的長度


instr('helloworld','w'); 返回'w'在字符串中的位置  如果不存在 則返回0。區別於 java中 不存在字符則返回-1 
lpad(last_name,10,'*');  取last_name的值 返回10位,如果不夠長 左邊用*補齊
rpad(last_name,10,'*');  取last_name的值 返回10位,如果不夠長 右邊用*補齊




replace('abcdxd','d','m') 把字符串中 所有的d 替換爲 m


trim( 'o' from 'ohelloworldo');  去掉字符串首尾的o字符 。




數字函數: 
四捨五入 :指定保留小數 
round(345.36,1) 指定保留小數 1位  ,round(345.36)  默認不保留小數, round(345.36,-1) 四捨五入保留到十位;


截斷到某個位置 不進行四捨五入
trunc(345.36,1) 截斷到小數點下一位   trunc(345.36) 截斷到個數   trunc(345.36,-1) 截斷到十位 


取餘數
mod(1000,300); 取餘數  100




日期函數:


包含 日期 和 時間  
日期函數 只能做加減 不能做乘除 !!


兩個日期相減, 返回日期之間相差的天數 。


select sysdate from dual; 返回當前日期+時間


select sysdate-hire_date as days from  employees  計算到目前爲止  入職的天數。


months_between(sysdate,hire_date); 兩個日期之間相差的月份。


add_months(sysdate,2);當前日期+ 2個月。


add_months(sysdate,-2); 當前日期 往前推倆月。


next_day(sysdate,'星期日'); 從當前日期算,下一個星期日。


last_day(sysdate) 每月的最後一天。


round(sysdate,'month');對日期進行 四捨五入 到月份


trunc(sysdate,'HH'); 對日期進行截斷 截斷到 小時




轉換函數 :


隱式轉換 <oracle數據庫 自動轉換> 顯示轉換
varchar2  char 轉換爲 number 。


varchar2  char 轉換爲 date 。


date和 varchar2 相互轉換


number 和 varchar2 相互轉化




顯示轉換 :日期和 字符 之間的轉換 
to_char(sysdate,'yyyy-mm-dd'); 日期轉換爲 字符  


to_char(sysdate,'yyyy"年"-mm"月"-dd"日"'); 日期轉換爲 字符   後面 格式如果帶字符 需要用 "" 括起來


to_date('1994-06-07','yyyy-mm-dd'); 把字符串 轉換成 指定格式的 date類型 


顯示轉換 :number 和 字符 之間的轉換 
number 轉換爲字符 :
to_char(12366.45,'999,999,999.99');   


to_char(12366.45,'000,000,000.00');   後面 000,000,或者 999,999,均爲要轉換的格式 ,如果是000,則 前面位數不夠補0。


to_char(12366.45,'$999,999,999.99'); 轉換爲美元


to_char(12366.45,'L999,999,999.99'); 當地的貨幣符號


字符串 轉換爲 number:


to_number('$12,234,233.34','$999,999,999.99');  字符串 轉換爲具體數字 12234233.34  即可進行相應的數學運算


to_number('¥12,234,233.34','L999,999,999.99'); 




通用函數: 適用於任何類型,包括空值
NVL(expr1,expr2) 如果  expr1爲空 則用expr2代替, 如果 expr1不爲空 則返回expr1  


oracle中 空值做數學運算 還是爲空值,  
select last_name  salary*12*(1+nvl(commission_pct,0)) from employees; 
commission_pct字段  會存在空值 防止計算無結果, 用nvl處理 如果是空值 用0代替。




NVL2(expr1,expr2,expr3) 如果 expr1 不爲空 返回 expr2 爲空 則返回 expr3


NULLIF()


case 表達式 case when then  else  end  可以加別名


select salary ,department_id , case 列名  when  條件  then  處理   when  條件  then  處理 else 處理... end 結束  as "別名"  


from  employees where department_id in (10, 20);




例子:
select last_name,department_id,case department_id
when 10 then department_id+1
when 20 then department_id+2
else  department_id+3 
end as "NewD"
from employees where department_id in (10,20,30)


decode 表達式  decode(department_id,10,department_id+1,
20,department_id+2,
department_id+3) as newD

例子:
select last_name,department_id,decode(department_id,
10,department_id+1,
20,department_id+2,
department_id+3) as "NewD"
from employees where department_id in (10,20,30)






select last_name ,job_id, decode(job_id,'AD_PRES','A',
                                        'IT_PROG','B')
                                        as "GRade"
from employees where job_id in ('AD_PRES','IT_PROG')


---------------------------------------------------------------



































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章