oracle的一些小零碎

oracle的一些零碎整理
1.有時候處理數據庫時,一不小心腦子一熱,操作了某些不該執行的語句,
然後得麻煩了,
其實每天第一件事,不是急着操作數據庫,而是做好準備
工作
設置一條回滾語句(即反悔語句)


設置語句:savepoint aa;
回滾語句:rollback to aa;

2.oracle表的默認格式,不是我們遵循的那種模式,就需要修改表中的日期的默認格式

語句:alter session set nls_date_format='yyyy-mm-dd';

3.查詢不包涵重複的數據
語句:select distinct(關鍵字)  table.列名 from table(表名);

4.解決計算時有空值的問題
oracle計算時,如果有一個數位空時,則計算的結果都爲空
解決方法:使用nvl(列名,0)函數解決
例:select distinct e.sal*12+nvl(e.comm,0) as "年工資",e.ename from emp e;

5.oracle表的複雜查詢
①如果在select語句同時包含有group by,having ,order by 那麼他們的順序是
group by,having ,order by


②在選擇列表中如果有列、表達式、和分組函數,那麼這些列和表達式必須有一個
出現在group by 子句中,否則就會報錯

例:select deptno,avg(sal),max(sal) fro emp group by deptno having avg(sal) < 2000;

6.多行子查詢
多行子查詢返回多行數據的子查詢(多行子查詢只能使用'in'不能使用'=')
例:查詢和部門號10的工作的僱員的名字、崗位、工資、部門號
select e.ename,e.job,e.sal,e.deptno from emp e
 where e.job
in(select e.job from emp e where e.deptno ='10');

7.多列子查詢
多列子查詢則是值查詢返回多個列數據的子查詢語句
例:查詢與smith的部門和崗位完全相同的所有僱員
select * from emp where (deptno,job)=(select deptno,job from emp e where ename='SMITH');

8.oracle給表取別名不能加as,給列名加別名可以加as

9.oracle分頁,一共有3種方式
①rownum分頁
(select * from emp)

②顯示rownum[oracle分配的]
select e.*,rownum as ru from (select * from emp ) e;

③查詢前N行的記錄
例:前五行的記錄
select * from (select e.*,rownum as ru from (select * from emp ) e where rownum <= 10) where rownum <= 5;

10.分頁:查找第五行到第十行之間的記錄
select * from (select e.*,rownum rn  from (select * from emp)  e where rownum <=10)  where rn <= 5;

11.用查詢結果創建新表
create table mytable(ename,job,mgr,sal) select  e.ename,e.job,e.mgr,e.sal
from emp e;








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