ORACLE 第二章常用操作
修改表中的列信息:
alter table vendor_master modify(vencode varchar(20));
給表中列添加一個默認值約束
alter table mytable modify(name varchar2(20) default 'abc');
為現有表中的列添加一個主鍵約束:
alter table testtable add(constraint "idkey" primary key("ID"));
為現有的表添加一個列:
alter table vendor_master add(vid number(5));
為現有表刪除一個列:
alter table vendor_master drop column vid;
刪除一個表:
drop table vendor_master;
修改列名:
alter table mytable rename column name to newName
-- unio 返回兩個查詢選定的所有不重復的行。unio的使用
select vencode from vendor_master
union select vencode from order_master
--unio all返回兩個查詢選定的所有行,包括重復的行 ,unio all的使用
select vencode from vendor_master
union all select vencode from order_master
--intersect 返回兩個查詢都有的行,intersect 的使用
select vencode from vendor_master
intersect select vencode from order_master
--minus 的使用操作符只返回由第一個查詢選定但是沒有被第二個查
--詢選定的行,也就是在第一個查詢結果中排除在第二個查詢結果中出現的行
select vencode from vendor_master
minus
select vencode from order_master
--- || 連接符的使用
select ('供應商'||venname||'地址為:'||venadd1||' '||venadd2||' '||venadd3) as 地址 from vendor_master
--使用DATE 關鍵字向數據庫提供一個日期文本字符串,此日期必--須使用yyyy-mm-dd格式,以下代碼演示了 date關鍵字;
insert into MYTABLE (ID, NAME, ADDRESS, EMAIL,REGDATE)
values (6, 'rose', 'tianjin', '[email protected]', date '2007-10-12')
--下列代碼演示了通過 to_date() 函數返回的值添加到數據庫中
insert into MYTABLE
(ID, NAME, ADDRESS, EMAIL,REGDATE)
values (6, 'rose', 'tianjin', '[email protected]', to_date('2007-10-23 12:36:58','yyyy-mm-dd hh24:mi:ss'))
-- add_month 的使用
select del_date ,add_months(del_date,2) from order_master
--months_between 的使用該函數返回兩個日期之間的月數,格式為MONTHS_BETWEEN(d1,d2)
select to_date('2009-11-30','yyyy-mm-dd') from dual
select months_between(to_date('2009-12-31','yyyy-mm-dd'),to_date('2008-12-20','yyyy-mm-dd')) from dual
-- last_day的使用,該函數返回指定日期當月的最後一天的日期值,格式為LAST_DAY(d)
select sysdate,last_day(sysdate) from dual
-- ROUND, 格式為ROUND(d,[fmt]),d是日期,fmt是格式模型。
--fmt是一個可選項,日期默認捨入為最靠近的那一天。
--如果指定格式為年”YEAR”,則捨入到年的開始,即1月1日;如果格式為月”MONTH”,則捨入到月的第一日;如果格式為周”DAY”,則捨入到最靠近的星期日。
select round(to_date('2009-8-13','yyyy-mm-dd hh24:mi:ss'),'day') as m from dual
-- NEXT_DAY ,該函數返回指定的下一個星期幾的日期,格式為
-- NEXT_DAY(d,day),d是日期,day指周內任何一天。
select next_day(sysdate,'星期五') from dual
--trunc函數將指定日期截斷為由格式模型指定的單位的日期,
--與ROUND函數不同的是它只捨不入
select trunc(to_date('2009-12-12','yyyy-mm-dd'),'day') from dual
--函數提取日期時間類型中都特定部分,格式為
--EXTRACT(fmt FROM d)
select extract(year from sysdate) from dual
--根據ASCII碼返回對應的字符
select chr(97) from dual
--LPAD 函數由三個參數 ,第一個參數是字符串,
--該字符串左邊需要填充,第二個是數字,
--它表示返回值的總長度,第三個是字符串,
--需要時用它進行左填充。
Select lpad('function',10,'=') from dual;
--TRIM函數從字符串的開始或者結尾,裁剪特定的字符,默認裁剪空格
-- leading 表示從左往右,trailing 表示從右往左
-- leading和trailing 都不指定的情況下裁剪前後特定的字符
select trim(leading 9 from 99977589678999) from dual
select trim(9 from 99977589678999) from dual
--length 函數返回字符串的長度
select length('abcd') from dual
--decode 函數進行逐個值的替換
-- select decode(expr,search1,result1,search2,result2...[default])
select decode(2,1,'相同') from dual
-- to_char 轉換字符串函數
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') FROM dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
-- to_date 日期轉換函數
select to_date('2009-10-10 13:12:12','yyyy-mm-dd hh24:mi:ss') from dual
--將空值轉換為指定的值,NVL(expression1,expression2)
select vencode,venname,nvl(venadd1,'no') from vendor_master
--NVL2 使用 (如果第一個參數不為空返回第二個參數,否則返回第三個參數)
select vencode,venname,nvl2(venadd1,'北京','沒有地址') from vendor_master
--NULLIF 使用(判斷兩個參數是否相等,如果相等返回 null ,否則返回第一個參數)
select nullif(1,2) from dual
--使用 rollup 子句為每個分組返回一條小計,並為全部分組返回總計:
Select division_id,sum(salary),count(*) from employees2
Group by division_id
使用oracle 偽列刪除表中重復記錄:
delete from testtable t where t.rowid!=(select max(t1.rowid) from testtable t1 where t1.name=t.name)
oracle 翻頁代碼:
select * from (select rownum r,o.* from order_master o where rownum <=12) where r>9