標籤: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. 適當的利用視圖可以更清晰的表達查詢
資料庫語句(三)