oracle總結之一

1、  當條件中使用聚合函數時,必須使用having而不能使用where

Select avg(sal), max(sal),depno from emp group by depno having avg(sal)>2000;

同時出現group byorder byhaving時的使用順序爲:group by…having…order by…

2、  多列子查詢

Select  *  from emp where (depno,job)=

   (Select depno,job from emp where ename=’SMITH’);

3、  視圖

視圖定義:

create [or replacement] view

    [模式名.] <視圖名> [(<列名>{,<列名>})] as <查詢說明> [with check option];

 當指明瞭[with check option]時,更新該視圖數據時,必須滿足查詢說明中的條件;如果不帶該選項,則以後更新數據時不做查詢說明的檢查。

  create view factorycreator as

select * from factory where factory_name=’beijing’ with check option;

刪除視圖

   Drop view  [模式名.] <視圖名> [RESTRICT|CASCADE];

CASCADE:強制刪除視圖,並在刪除試圖前刪除相關的依賴視圖。RESTRICT:存在依賴視圖則不刪除該視圖。

查詢視圖:雖然是虛表,但操作和基本表的查詢雷同有單獨查詢和聯合查詢(略)。

視圖更新

    對它的更新操作最終轉換爲基表更新,那些不能轉化爲基本表的更新操作的視圖更新是非法的。

DM系統規定下列情形之一則不允許更新視圖:

1.       視圖由兩個以上基表導出;2.視圖列是集函數或者視圖的定義的查詢說明帶有group by having子句;3.視圖建立在不允許更新的視圖上。

視圖優勢:多角度觀察同一數據;簡化用戶操作;數據安全;利於數據庫重構。

4、  嵌入式SQL

嵌入式sql相對於普通sql就是能使用變量,可以嵌入到宿主語言中執行。變量可以分宿主變量、輸入輸出變量和指示符變量。

嵌入式SQL語法:exec sql <SQL語句>

輸入變量:

exec sql begin declare section;

{

   <宿主變量定義語句>

}

exec sql end declare;

<宿主變量定義語句>::=<宿主變量名><宿主變量數據類型>

eg:

   exec sql begin declare section;

   INT number;

   CHAR stringc[20];

exec sql end declare;

指示變量:爲了能夠處理NULL,在主語言中引入了指示符變量,是跟在宿主變量後的一個數字。

exec sql begin declare section;

   short str_indicator;

exec sql begin declar section

   str_indicator=-1;

exec sql insert into T1 values(:number,:string: str_indicator);

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