標籤:
本系列連結導航:
[獨孤九劍]Oracle知識點梳理(一)資料表空間、使用者
[獨孤九劍]Oracle知識點梳理(二)資料庫的串連
[獨孤九劍]Oracle知識點梳理(三)匯入、匯出
[獨孤九劍]Oracle知識點梳理(四)SQL語句之DML和DDL
[獨孤九劍]Oracle知識點梳理(五)資料庫常用對象之Table、View
[獨孤九劍]Oracle知識點梳理(六)資料庫常用對象之Procedure、function、Sequence
[獨孤九劍]Oracle知識點梳理(七)資料庫常用對象之Cursor
[獨孤九劍]Oracle知識點梳理(八)常見Exception
[獨孤九劍]Oracle知識點梳理(九)資料庫常用對象之package
[獨孤九劍]Oracle知識點梳理(十)%type與%rowtype及常用函數
4、SQL語句
Oracle 將sql語句分為一下幾類:
a) 資料操作語言語句[Data manipulation language,DML],如select、insert、update、delete、merge、lock、fetch等
b) 資料定義語言 (Data Definition Language)語句[Data definition language,DDL],如create、alter、drop、rename、truncate、grant、revoke、audit、noaudit、comment等
c) 事務控制語句[transaction control statement],如commit、rollback、savepoint、set transaction等
d) 會話控制語句[session control statement]
d.1 執行特定操作,修改當前會話,例如啟用或禁用 SQL 追蹤功能[SQL trace facility](ALTER SESSION);
d.2 為當前會話啟用或禁用角色[role](即一組許可權的集合)(SET ROLE)
e) 系統控制語句[system control statement],alter system 是唯一的系統控制語句
f) 嵌入 SQL 陳述式[embedded SQL statement]
f.1 cursor的定義(declare cursor)、開啟(open)、關閉(close),
f.2 選擇一個oracle資料庫並進行串連 declare database,connect
f.3 分配變數名 declare statement
f.4 初始化描述符[descriptor](DESCRIBE)
f.5 設定如何處理錯誤及警告(WHENEVER)
f.6 解析並執行 SQL 陳述式(PREPARE,EXECUTE,EXECUTE IMMEDIATE)
f.7 從資料庫中取回資料(FETCH)
我操作最多的是a,b,c和f中的部分。
4.1、DML4.1.1、增刪改查的文法使用標準sql語句即可:
1 select * from table1;2 insert into table1(f1,f2,f3) values(v1,v2,v3);3 update table1 t set t.f1=v1 where t.f2=v2;4 delete table1 t where t.f2=v2;
rownum,是oracle中特有的一個關鍵字,當select一張表時,oracle會對查詢結果進行標記,rownum是number類型的,每次都是從1開始,如果查詢出10行資料,那麼rownum就會從1到10,按查詢結果的順序標記。
rownum是不可以跳躍的,即可以使用where rownum=1,但不可以使用where rownum=2; 可以使用rownum <5,但不可以使用rownum>5,而where rownum=0可以得到表結構。
4.1.2、分頁查詢:
select tt.* from (select t.*,rownum rn from table1 t where rownum<=10) tt where tt.rn>=1; --這就是使用rownum的最好例子
4.1.3、聯集查詢
1 select t1.*,t2.* from table1 t1,table2 t2 where t1.f1=t2.f2 --同inner join2 select t1.*,t2.* from table1 t1,table2 t2 where t1.f1(+)=t2.f2 --同left join3 select t1.*,t2.* from table1 t1,table2 t2 where t1.f1=t2.f2(+) --同right join
1 select t1.* from table1 t12 join table2 t23 on t1.f1=t2.f24 where t1.fx>10 and t2.fy>100
left join 、right join、outer join 方式與標準sql一致,略。
4.1.4、merge 合并
該命令使用一條語句從一個或者多個資料來源中完成對錶的更新和插入資料.
1 /*涉及到兩個表關聯的例子*/2 merge into toTable a --需要更新的表3 using fromTable b --關聯表(資料來源表)4 on (a.id=b.id) --關聯條件5 when metched then --匹配關聯條件,做更新處理6 update set a.f1=b.f1, a.f2=b.f2+17 when not metched then --不匹配關聯條件,做插入處理8 insert values(b.f1,b.f2,b.f3...);
1 /*涉及到多個表關聯的例子,有3個表,table1 是目標表,table2和table3需要關聯後,作為table1的資料來源;並且只做更新操作*/2 merge into table1 a3 using (select t2.id,t2.f1,t2.f2,t3.f1 from table t2 join table2 t3 on t2.id=t3.id) b4 on (a.id=b.id)5 when matched then6 update set a.f1=b.f1,a.f2=b.f2+1;
注意:
- 使用merge時,update或insert的欄位,不能是 on中用於匹配的欄位
- 對於update和insert語句,都可以使用where條件;where中可針對a表,也可針對b表進行過濾
4.2、DDL
create用於建立table、view、procedure、function、sequence等。
alter用於修改
drop用於刪除table、view、procedure、function、sequence等。
grant、revoke用於給使用者賦許可權和取下許可權
audit、noaudit用於審計功能
comment用於添加備忘資訊
truncate用於截斷表,不能復原
rename用於重新命名
第5節,在介紹table、view、procedure、function、sequence時,使用的都是DDL語句
4.3、其他類型的SQL語句 略( ̄▽ ̄)"
[獨孤九劍]Oracle知識點梳理(四)SQL語句之DML和DDL