數據庫視圖創建學習


實驗5  視圖的創建及應用

1、實驗目的

(1)掌握使用T-SQL語言創建、修改視圖;

(2)掌握使用T-SQL語句刪除、重命名視圖;

(3)掌握使用T-SQL語句,通過視圖對基本表進行數據操作;

(4)掌握使用界面操作的方式創建、修改、刪除和重命名視圖,以及通過視圖對基本表進行數據操作的方法。

2、實驗類型

驗證型、設計型。

3、相關知識

視圖是一種數據庫對象,是關系數據庫系統提供給用戶以多種角度觀察數據庫中數據的重要機制。視圖是從一個或者多個數據表或視圖中導出的虛表,視圖的結構和數據是對數據表進行查詢的結果。

  (1)使用T-SQL語句創建視圖的語法格式

       CREATE  VIEW  [ < owner > .] view_name [ ( column_name [ ,...n ] ) ]

[WITH  ENCRYPTION]

        AS

select_statement

FROM   table_name   WHERE   search_condition

[WITH  CHECK  OPTION]

其中:

n  view_name:為新創建的視圖指定的名字,視圖名稱必須符合標識符規則。

n  column_name:在視圖中包含的列名,也可以在SELECT 語句中指定列名。

n  table_name:視圖基表的名字。

n  select_statement:選擇哪些列進入視圖的SELECT語句。

n  WHERE  search_condition:基表數據進入視圖所應滿足的條件

n  WITH  CHECK OPTION:迫使通過視圖執行的所有數據修改語句必須符合視圖定義中設置的條件。

n  WITH  ENCRYPTION:對視圖的定義進行加密。

創建視圖時的注意事項:

  • 在CREATE VIEW語句中,不能包括ORDER BY、COMPUTE或者COMPUTE BY 子句,也 不能出現INTO關鍵字。
  • 創建視圖所參考基表的列數最多為1024列。
  • 創建視圖不能參考臨時表。
  • 在一個批處理語句中,CREATE VIEW語句不能和其他Transact-SQL語句混合使用。
  • 盡量避免使用外連接創建視圖。

(2)使用T-SQL語句管理視圖

n     使用系統存儲過程查看視圖信息:

  • SP_HELP  數據庫對象名稱
  • SP_HELPTEXT  視圖(觸發器、存儲過程)
  • SP_DEPENDS  數據庫對象名稱

n  用DROP  VIEW語句刪除視圖

DROP VIEW view_namel,view_name2,…

n  使用系統存儲過程重命名視圖

SP_RENAME  old_view_name,new_view_name

(3)使用T-SQL語句修改視圖

      ALTER  VIEW  view_name

[(column[,...n])]

[WITH  ENCRYPTION]

AS
     select_statement
    [ WITH  CHECK  OPTION ] 

      其中:

n  view_name:被修改的視圖的名字。

n  column_name:在視圖中包含的列名。

n  WITH CHECK OPTION:迫使通過視圖進行數據修改的所有語句必須符合視圖定義中設置的條件。

n  table_name:視圖基表的名字。

n  WITH  ENCRYPTION:對包含創建視圖的SQL腳本進行加密。

(4)使用T-SQL語句對視圖數據的查詢、插入、修改與刪除

用T-SQL語句對視圖數據的查詢、插入、修改與刪除的語法格式和對表中數據的查詢、插入、修改與刪除的操作幾乎一樣。

修改視圖數據的限制:

n  無論是視圖的創建、修改、刪除還是視圖數據的查詢、插入、更新、刪除都必須由具有權限的用戶進行。

n  對由多個表連接成的視圖修改數據時,不能同時影響一個以上的基礎表,也不允許刪除視圖中的數據。

n  對視圖上的某些列不能進行修改。這些列是:計算值、內置函數和行集合函數。

n  對具有NOT NULL的列進行修改時可能會出錯。在通過視圖修改或插入數據時,必須保證未顯示的具有NOT NULL屬性的列有值,可以是缺省、IDENTITY等,否則不能向視圖中插入數據行。

n  如果某些列因為規則或者約束的限制而不能接受從視圖插入數據的時候,則插入數據可能會失敗。

n  刪除基礎表並不刪除視圖。建議采用與表明顯不同的名字命名視圖。

4、實驗內容及指導

【實驗5-1: 基於BOOK表創建一個視圖BOOKVIEW1,輸出bno、bname、bpc、author,然后通過視圖查詢圖書信息。

USE  JXGL

GO

CREATE VIEW BOOKVIEW1

AS SELECT bno,bname,Bpc,author 

FROM BOOK

GO

SELECT * FROM  BOOKVIEW1

【實驗5-2】:基於BOOK表創建一個出版社為“清華大學出版社”的視圖BOOKVIEW2,輸出bno、bname、author、price,然后通過視圖查詢圖書信息。

USE  JXGL

GO

CREATE VIEW  BOOKVIEW2 

AS  SELECT  bno, bname, author,price

 FROM  BOOK  WHERE  pbc=’清華大學出版社’

GO

SELECT * FROM BOOKVIEW2

【實驗5-3】: 基於BOOK表創建一個清華大學出版社出版,圖書定價排在前五名的視圖BOOKVIEW3,輸出bno、bname、author,然后通過視圖查詢圖書信息。

USE  JXGL

GO

CREATE VIEW BOOKVIEW3

AS SELECT TOP 5 bno,bname,author 

FROM  BOOK WHERE pbc=’清華大學出版社’

ORDER BY price DESC

GO

SELECT *  FROM  BOOKVIEW3

【實驗5-4】: 基於BOOK表創建一個顯示出版社、圖書平均定價及圖書種類數的視圖BOOKVIEW4,輸出“出版社”、“平均定價”、“圖書種類數”,然后通過視圖查詢“清華大學出版社”的數據信息。

USE  JXGL

GO

CREATE  VIEW  BOOKVIEW4 

AS SELECT pbc 出版社, AVG(price) 平均定價, COUNT(bno) 圖書種類數 

FROM  BOOK 

GROUP BY pbc

GO

SELECT  * 

FROM  BOOKVIEW4 

WHERE 出版社=‘清華大學出版社’

【實驗5-5:建立所有正在被選作為教材的圖書信息的視圖BOOKVIEW5,輸出“課程號”、“課程名”、“學分”,“書名”、“作者”和“出版社”。

USE  JXGL

GO

Create  view  Bookview5  AS select  cno 課程號, cname 課程名,

credit 學分,bname 書名,author 作者, pbc 出版社

from  BOOK,C  Where  BOOK.bno=C.bno

【實驗5-6:基於【實驗5-5】創建視圖BOOKVIEW6,輸出“課程名”和“書名”,並通過該視圖查看課程教材選用信息。

USE  JXGL

GO

CREATE  VIEW  BOOKVIEW6  

AS SELECT 課程名, 書名

FROM  BOOKVIEW5

GO

SELECT  *  FROM  BOOKVIEW6

【實驗5-7】:基於【實驗5-5】創建的視圖BOOKVIEW5進行修改,輸出“課程名”、“書名”和“出版社”,並對視圖加密。

USE  JXGL

GO

ALTER  VIEW  BOOKVIEW5  WITH  ENCRYPTION

AS  SELECT  cname 課程名,  bname 書名,  pbc 出版社

FROM  BOOK,C 

WHERE  BOOK.bno=C.bno

【實驗5-8:查看視圖BOOKVIEW5的定義。

USE  JXGL

GO

SP_HELPTEXT  BOOKVIEW5

【實驗5-9】:將視圖BOOKVIEW5重新命名為BVIEW5。

            USE  JXGL

GO

SP_RENAME   ‘BOOKVIEW5’,  ‘BVIEW5’

【實驗5-10】:基於【實驗5-8】,將視圖BVIEW5刪除。

 USE  JXGL

GO

             DROP VIEW  BVIEW5

【實驗5-11】:通過【實驗5-1】創建的視圖BOOKVIEW1,向BOOK表插入一行數據信息(‘b101’,’數據庫系統’,’高等教育出版社’,’丁寶康’)

USE  JXGL

GO

             INSERT INTO BOOKVIEW1(bno,bname,bpc,author)

             VALUES (‘b101’,’數據庫系統’,’高等教育出版社’,’丁寶康’)

注:當視圖只輸出基本表的部分列時,通過視圖插入數據可能會遇到問題:視圖沒有顯示的列可能沒有設置NULL特性,也沒有設置缺省值,而通過視圖無法對沒有出現的列向基表插入數據,因而會導致數據插入失敗;如果視圖沒有顯示的列設置了NULL特性或設置了默認值,則可以通過視圖向基表成功插入數據,如【實驗5-11】。

【實驗5-12】:通過【實驗5-2】創建的視圖BOOKVIEW2,把清華大學出版社的圖書定價更新為原定價的八折,然后通過視圖查詢圖書信息。

USE  JXGL

GO

UPDATE  BOOKVIEW2 

SET  price=0.8*price

GO

SELECT  * 

FROM  BOOKVIEW2

【實驗5-13】:通過【實驗5-1】創建的視圖BOOKVIEW1,把所有高等教育出版社的圖書信息刪除。

USE  JXGL

GO

DELETE  FROM  BOOKVIEW1 

WHERE  bpc=’高等教育出版社’

GO

SELECT  *  FROM  BOOKVIEW1

5、實驗作業

(1)基於S表創建一個名為SVIEW1的視圖,輸出sno、sname、sex、birth、homadd,然后通過該視圖查詢學生信息;

(2)基於S表創建一個男同學的名為SVIEW2的視圖,輸出sno、sname、homadd,然后通過該視圖查詢男生信息;

(3)基於DEPT表創建一個學生人數排在前五名的視圖DEPTVIEW1,輸出dno、dname、dheader,然后通過視圖查詢系信息數據;

(4) 基於S和SC表創建一個按系別分組顯示,選修課程考試平均成績的視圖SVIEW3,輸出“系號”、“平均成績”,然后通過視圖查詢’04’系的數據信息;

(5)基於S、C和SC創建一個聯合視圖SVIEW4,要求輸出“學號”、“姓名”、“課程名”、“學分”、“總學時”、“成績”和“選修學期”;

(6)基於(5)中的視圖SVIEW4創建視圖SVIEW5,要求輸出“姓名”、“課程名”和“成績”;並通過視圖SVIEW5查詢“數據庫原理”課程的選修信息;

(7)基於(5)中創建的視圖SVIEW4進行修改,要求輸出“姓名”、“課程名”和“成績”;並對該視圖進行加密;

(7)查看視圖的定義;

(8)將視圖SVIEW5重新命名為STUVIEW5;

(9)將視圖STUVIEW5刪除;

(10)通過(1)中創建的名為SVIEW1的視圖,向S表中插入數據(’15043102’,’蘭一飛’,’男’,’1993-11’,’北京市通州區焦王庄’);

(11)通過SVIEW1將(10)中插入的學號為115043102的學生姓名更新為“蘭飛”;

(12)通過(1)中創建的名為SVIEW1的視圖,刪除所有男同學的信息。

6、實驗總結

(1)實驗內容的完成情況;

(2)對重點實驗結果進行分析;

(3)出現的問題;

(4)解決方案(列出遇到的問題和解決方法,列出沒有解決的問題);

(5)收獲和體會。

 

 

 

作業

use JXGL;
go
create view SVIEW1 as select sno,sname,sex,birth,homadd
from S
go
select * from SVIEW1

go
create view SVIEW2 as select sno,sname,homadd
from S
where sex = '男'
go
select * from SVIEW2


go 
create view DEPTVIEW1 as select top 5 dno,dname,dheader
from DEPT
order by snum desc

select * from DEPTVIEW1

go
create view SVIEW3 as select dno,AVG(SC.grade) as avggrede
from S,SC
where dno='D04'
group by dno

select * from SVIEW3

go
create view SVIEW4 as select S.sno,S.sname,C.cname,C.credit,C.tperiod,SC.grade,SC.time
from S,SC,C
where S.sno = SC.sno and SC.cno = C.cno
group by S.sno,S.sname,C.cname,C.credit,C.tperiod,SC.grade,SC.time

select * from SVIEW4 

go
create view SVIEW5 as select sname,cname,grade
from SVIEW4

select * from SVIEW5
where cname='數據庫原理'



go
alter view SVIEW4 with encryption as 
select sname,cname,grade

 from S,SC,C
where S.sno = SC.sno and SC.cno = C.cno

go 
SP_HELPTEXT  SVIEW5

go
SP_RENAME   'SVIEW5',  'STUVIEW5'


go 
drop view STUVIEW5

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM