[獨孤九劍]Oracle知識點梳理(一)表空間、用戶
[獨孤九劍]Oracle知識點梳理(二)數據庫的連接
[獨孤九劍]Oracle知識點梳理(三)導入、導出
[獨孤九劍]Oracle知識點梳理(四)SQL語句之DML和DDL
[獨孤九劍]Oracle知識點梳理(五)數據庫常用對象之Table、View
[獨孤九劍]Oracle知識點梳理(六)數據庫常用對象之Procedure、function、Sequence
[獨孤九劍]Oracle知識點梳理(七)數據庫常用對象之Cursor
[獨孤九劍]Oracle知識點梳理(八)常見Exception
[獨孤九劍]Oracle知識點梳理(九)數據庫常用對象之package
[獨孤九劍]Oracle知識點梳理(十)%type與%rowtype及常用函數
Oracle 將sql語句分為一下幾類:
a) 數據操作語言語句[Data manipulation language,DML],如select、insert、update、delete、merge、lock、fetch等
b) 數據定義語言語句[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中的部分。
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可以得到表結構。
select tt.* from (select t.*,rownum rn from table1 t where rownum<=10) tt where tt.rn>=1; --這就是使用rownum的最好例子
1 select t1.*,t2.* from table1 t1,table2 t2 where t1.f1=t2.f2 --同inner join 2 select t1.*,t2.* from table1 t1,table2 t2 where t1.f1(+)=t2.f2 --同left join 3 select t1.*,t2.* from table1 t1,table2 t2 where t1.f1=t2.f2(+) --同right join
1 select t1.* from table1 t1 2 join table2 t2 3 on t1.f1=t2.f2 4 where t1.fx>10 and t2.fy>100
left join 、right join、outer join 方式與標准sql一致,略。
該命令使用一條語句從一個或者多個數據源中完成對表的更新和插入數據.
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+1 7 when not metched then --不匹配關聯條件,做插入處理 8 insert values(b.f1,b.f2,b.f3...);
1 /*涉及到多個表關聯的例子,有3個表,table1 是目標表,table2和table3需要關聯後,作為table1的數據源;並且只做更新操作*/ 2 merge into table1 a 3 using (select t2.id,t2.f1,t2.f2,t3.f1 from table t2 join table2 t3 on t2.id=t3.id) b 4 on (a.id=b.id) 5 when matched then 6 update set a.f1=b.f1,a.f2=b.f2+1;
注意:
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語句