資料庫語句(三)

來源:互聯網
上載者:User

標籤:cad   一點   子集   birt   格式   表達   let   角度   刪除   

最後是分兩個模組,一個是資料的更新(插入,修改,刪除),預計資料定義的第四個模——視圖(因為這個比較大塊,所以分開來了),首先說說我們的資料更新

插入資料

v  兩種插入資料方式

1. 插入元組

2. 插入子查詢結果

  • 可以一次插入多個元組

 

我們先說插入元組:

v  語句格式

         INSERT

         INTO <表名> [(<屬性列1>[,<屬性列2 >…)]

         VALUES (<常量1> [,<常量2>]    …           )

v  功能

n  將新元組插入指定表中

v  INTO子句

n  屬性列的順序可與表定義中的順序不一致

n  沒有指定屬性列

n  指定部分屬性列

v   VALUES子句

n   提供的值必須與INTO子句匹配

v  值的個數

v  值的類型

v  [例1]  將一個新學生元組(學號:200215128;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。

v      INSERT

v      INTO  Student (Sno,Sname,Ssex,Sdept,Sage)

v      VALUES (‘200215128‘,‘陳冬‘,‘男‘,‘IS‘,18);

 

 

v  [例2]  將學生張成民的資訊插入到Student表中。

v        INSERT

v                 INTO  Student

v                 VALUES (‘200215126’, ‘張成民’, ‘男’,18,‘CS‘);

 

這邊說說插入子查詢結果

 

 

說完資料的插入,然後就說說修改資料了

 

(修改某一個元組的值)

]  將學生200215121的年齡改為22歲

         UPDATE  Student

         SET Sage=22

         WHERE  Sno=‘ 200215121 ‘;

(修改多個元組的值)

[例6]  將所有學生的年齡增加1歲

         UPDATE Student

         SET Sage= Sage+1;

(帶有子查詢的修改語句)

[例7]  將電腦科學系全體學生的成績置零。

        UPDATE SC

        SET  Grade=0

        WHERE  ‘CS‘=

                       (SELETE Sdept

                        FROM  Student

                        WHERE  Student.Sno = SC.Sno);

 

 

最後就說資料更新的最後一部分,刪除資料

 

(刪除某一個元組的值)

[例8]  刪除學號為200215128的學生記錄。

        

       DELETE         FROM Student         WHERE Sno= 200215128 ‘;

  

 

(刪除多個元組的值)

[例9]  刪除所有的學生選課記錄。

     

   DELETE        FROM SC;

  

 

(帶有子查詢的刪除語句)

10]  刪除電腦科學系所有學生的選課記錄。

       

 DELETE        FROM SC        WHERE  ‘CS‘=                           (SELETE Sdept                            FROM Student                            WHERE Student.Sno=SC.Sno); 

  

 

 

終於來到這一個章節最後一部分,視圖,首先我們說說視圖的特點:

v  虛表,是從一個或幾個基本表(或視圖)匯出的表

v  只存放視圖的定義,不存放視圖對應的資料

v  基表中的資料發生變化,從視圖中查詢出的資料也隨之改變

 

 

而我們得到視圖之後,我們還可以對視圖再次操作,其操作的種類有:

v  查詢

v   刪除

v   受限更新

v   定義基於該視圖的新視圖

 

 

好了,說了一點皮毛的東西,現在我們說說定義視圖(分建立和刪除):

建立:

v  語句格式

       CREATE  VIEW

             <視圖名>  [(<列名>  [,<列名>]…)]

       AS  <子查詢>

       [WITH  CHECK  OPTION];

v  組成視圖的屬性列名:全部省略或全部指定

v  子查詢不允許含有ORDER BY子句和DISTINCT短語

v  WITH CHECK OPTION表示對視圖進行UPDATE,INSERT和DELETE 操作時要保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件運算式)。

 

 

以下三種情況必須指定所有列名:

v  (1)目標列不是單純屬性名稱,而是聚集合函式或列運算式;

v  (2)多表串連時選出了幾個同名列;

v  (3)需要在視圖中啟用新的更合適的名字。

 

 

v  RDBMS執行CREATE VIEW語句時只是把視圖定義存入資料字典,並不執行其中的SELECT語句。

v  在對視圖查詢時,按視圖的定義從基本表中將資料查出。

例子:

[例1]  建立資訊系學生的視圖。

     

   CREATE VIEW IS_Student        AS        SELECT Sno,Sname,Sage        FROM    Student        WHERE  Sdept= ‘IS‘;

  

 

[例2]建立資訊系學生的視圖,並要求進行修改和插入操作時仍需保證該視圖只有資訊系的學生。

      

  CREATE VIEW IS_Student        AS        SELECT Sno,Sname,Sage        FROM  Student        WHERE  Sdept= ‘IS‘        WITH CHECK OPTION;

  

 

 

(基於多個基表的視圖)

[例3]  建立資訊系選修了1號課程的學生視圖。

      

  CREATE VIEW IS_S1(Sno,Sname,Grade)        AS        SELECT Student.Sno,Sname,Grade        FROM  Student,SC        WHERE  Sdept= ‘IS‘ AND                       Student.Sno=SC.Sno AND                       SC.Cno= ‘1‘;

  

 

(基於視圖的視圖)

例4]  建立資訊系選修了1號課程且成績在90分以上的學生的視圖。

        

CREATE VIEW IS_S2        AS        SELECT Sno,Sname,Grade        FROM  IS_S1        WHERE  Grade>=90;

  

 

(帶運算式的視圖)

[例5]  定義一個反映學生出生年份的視圖。

      

  CREATE  VIEW BT_S(Sno,Sname,Sbirth)        AS        SELECT Sno,Sname,2000-Sage        FROM  Student;

  

 

 

(分組視圖)

[例6]  將學生的學號及他的平均成績定義為一個視圖

                假設SC表中“成績”列Grade為數字型

     

       CREATE  VIEW S_G(Sno,Gavg)             AS              SELECT Sno,AVG(Grade)             FROM  SC             GROUP BY Sno;

  

 

(不指定屬性列)

[例7]將Student表中所有女生記錄定義為一個視圖

  

    CREATE VIEW F_Student(F_Sno,name,sex,age,dept)      AS      SELECT *      FROM  Student      WHERE Ssex=‘女’;

  

     缺點:

     修改基表Student的結構後,Student表與F_Student視圖的映象關係被破壞,導致該視圖不能正確工作

 

 

 

 

 

 

說了那麼多建立,下面我們說說刪除視圖:

v  語句的格式:

                  DROP  VIEW  <視圖名>;

  • 該語句從資料字典中刪除指定的視圖定義
  • 如果該視圖上還匯出了其他視圖,使用CASCADE串聯刪除語句,把該視圖和由它匯出的所有視圖一起刪除
  • 刪除基表時,由該基表匯出的所有視圖定義都必須顯式地使用DROP VIEW語句刪除

[例8]  刪除視圖BT_S: DROP VIEW BT_S;

              

              刪除視圖IS_S1:DROP VIEW IS_S1;

  • 拒絕執行
  • 串聯刪除:

                     DROP VIEW IS_S1 CASCADE;      

 

 

 

 

 

說完了定義視圖的建立與刪除,下面我們進入到第二大模組,查詢檢視:

v  使用者角度:查詢檢視與查詢基本表相同

v  RDBMS實現視圖查詢的方法

  • 視圖消解法(View Resolution)
    • 進行有效性檢查
    • 轉換成等價的對基本表的查詢
    • 執行修正後的查詢

v  [例9]  在資訊系學生的視圖中找出年齡小於20歲的學生。

v          SELECT   Sno,Sage

v          FROM      IS_Student

v          WHERE   Sage<20;

v  IS_Student視圖的定義 (參見視圖定義例1)

 

視圖消解轉換後的查詢語句為:

 SELECT  Sno,Sage       FROM  Student WHERE  Sdept= ‘IS‘  AND  Sage<20;

  

v  視圖消解法的局限

  • 有些情況下,視圖消解法不能產生正確查詢。

 

第三大塊,更新視圖:

[例12]  將資訊系學生視圖IS_Student中學號200215122的學生姓名改為“劉辰”。

(修改某個值)

UPDATE  IS_StudentSET  Sname= ‘劉辰‘WHERE  Sno= ‘ 200215122 ‘;轉換後的語句:UPDATE  StudentSET Sname= ‘劉辰‘WHERE Sno= ‘ 200215122 ‘ AND Sdept= ‘IS‘;

  

 

(增加記錄)

[例13]  向資訊系學生視圖IS_S中插入一個新的學生記錄:200215129,趙新,20歲

INSERTINTO IS_StudentVALUES(‘95029’,‘趙新’,20);轉換為對基本表的更新:INSERTINTO   Student(Sno,Sname,Sage,Sdept)VALUES(‘200215129 ‘,‘趙新‘,20,‘IS‘ );

  

 

(刪除記錄)

[例14]刪除資訊系學生視圖IS_Student中學號為200215129的記錄

DELETEFROM IS_StudentWHERE Sno= ‘ 200215129 ‘;轉換為對基本表的更新:DELETEFROM StudentWHERE Sno= ‘ 200215129 ‘ AND Sdept= ‘IS‘;

  

 

v  更新視圖的限制:一些視圖是不可更新的,因為對這些視圖的更新不能唯一地有意義地轉換成對相應基本表的更新

v  允許對行列子集視圖進行更新

v  對其他類型視圖的更新不同系統有不同限制

 

 

 

 

最後說說視圖的作用:

v  1. 視圖能夠簡化使用者的操作

v  2. 視圖使使用者能以多種角度看待同一資料

v  3. 視圖對重構資料庫提供了一定程度的邏輯獨立性

v  4. 視圖能夠對機密資料提供安全保護

v  5. 適當的利用視圖可以更清晰的表達查詢

 

資料庫語句(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.