日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

(数据库系统概论|王珊)第三章关系数据库标准语言SQL-第六、七节:视图

發(fā)布時間:2025/3/15 windows 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第六、七节:视图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一:關(guān)于視圖
    • (1)什么視圖
    • (2)什么時候會用到視圖
    • (3)視圖的作用
  • 二:視圖的定義和刪除
    • (1)建立視圖
      • A:簡單創(chuàng)建
      • B:基于多個基表的視圖
      • C:基于視圖的視圖
      • D:帶表達(dá)式的視圖
      • E:分組視圖
    • (2)刪除視圖
  • 三:視圖的查詢
  • 四:視圖的更新
    • (1)UPDATE
    • (2)INSERT
    • (3)DELETE

一:關(guān)于視圖

(1)什么視圖

視圖:視圖是一個虛表,其本質(zhì)就是一條SELECT語句,而查詢結(jié)果被賦予了一個名字,也即視圖名字。或者說視圖本身不包含任何數(shù)據(jù),它只包含映射到基表的一個查詢語句,當(dāng)基表數(shù)據(jù)發(fā)生變化時,視圖數(shù)據(jù)也隨之變化。其目的就是在于方便,簡化數(shù)據(jù)操作

(2)什么時候會用到視圖

簡單點說,當(dāng)我們感覺查詢語句太過復(fù)雜且不好操控時就可以創(chuàng)建視圖,直接

SELECT * FROM [view]

(3)視圖的作用

  • 視圖能夠簡化用戶的操作
  • 視圖使用戶能以多種角度看待同一數(shù)據(jù)
  • 視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨立性
  • 視圖能夠?qū)C密數(shù)據(jù)提供安全保護(hù)
  • 適當(dāng)?shù)睦靡晥D可以更清晰的表達(dá)查詢

二:視圖的定義和刪除

(1)建立視圖

語法:使用CREATE VIEW語句創(chuàng)建視圖,格式如下

  • 子查詢可以是任意的SELECT語句(是可以含有ORDER BY子句和DISTINCT短語取決于具體系統(tǒng))
  • 組成視圖的屬性列名要么全部省略要么全部指定,不能有第三種情況
  • 如果省略視圖列名,則其列名默認(rèn)由 SELECT子句目標(biāo)列諸字段組成

A:簡單創(chuàng)建

演示

【例1】建立信息系IS學(xué)生的視圖

CREATE VIEW IS_student AS SELECT Sno,Sname,Sage,Sdept FROM student WHERE Sdept='IS'

B:基于多個基表的視圖

演示

【例2】建立計算機科學(xué)系選修了1號課程的學(xué)生視圖

CREATE VIEW CS1 AS SELECT student.Sno Sno,Sname,Grade FROM student,sc WHERE Sdept='CS' AND student.Sno=sc.Sno AND sc.Cno='1';

C:基于視圖的視圖

演示

【例3】 建立計算機科學(xué)系選修了1號課程且成績大于95分的學(xué)生的視圖

CREATE VIEW CS2 AS SELECT * FROM CS1 WHERE Grade > 95;

D:帶表達(dá)式的視圖

演示

【例4】定義一個反映學(xué)生出生年份的視圖

CREATE VIEW birthday(Sno,Sname,Syear) AS SELECT Sno,Sname,2022-Sage FROM student;

E:分組視圖

  • 帶有聚集函數(shù)和GROUP BY

演示

【例5】將學(xué)生的學(xué)號及他的平均成績定義為一個視圖

CREATE VIEW stu_grade_avg(Sno,Savg) AS SELECT Sno,AVG(Grade) FROM sc GROUP BY Sno;

(2)刪除視圖

語法:格式如下,需要注意

  • 基本表刪除之后,由該基本表導(dǎo)出的所有視圖均無法使用,但是視圖的定義沒有從字典中清除

三:視圖的查詢

語法:從用戶角度出發(fā),查詢視圖和查詢基本表相同;從DBMS角度出發(fā),采用視圖消解法,具體來講

  • 首先進(jìn)行有效性檢查
  • 接著轉(zhuǎn)換成等價的對基本表的查詢
  • 最后執(zhí)行修正后的查詢

這里具體就不再做過多演示了,一般來說轉(zhuǎn)換是能成功進(jìn)行的,更多細(xì)節(jié)大家可以了解課本(這部分內(nèi)容不多)

四:視圖的更新

語法:視圖是虛表,所以對視圖的更新最終會轉(zhuǎn)化為對基本表的更新。為了防止用戶通過視圖對數(shù)據(jù)進(jìn)行更新時,有意或無意地對不屬于視圖范圍內(nèi)的基本表數(shù)據(jù)進(jìn)行操作,可以在定義視圖時加上WITH CHECK OPTION子句。這樣在更新時,如果不滿足條件,DBMS會拒絕操作

(1)UPDATE

演示

【例6】將信息系學(xué)生視圖IS_Student中學(xué)號201215125的學(xué)生姓名改為“劉辰”

UPDATE is_student SET Sname='劉辰' WHERE Sno='201215125';

【例7】如果在定義視圖is_student在定義時加入了WITH CHECK OPTION子句,接著再執(zhí)行【例6】需求

那么在更新時如果將Sdept字段改為了’MA’或其他值,DBMS就會拒絕執(zhí)行,并有下面的錯誤反饋

UPDATE is_student SET Sdept='MA' WHERE Sno='201215125';

如果在更新時只修改名字,那么就沒有問題

UPDATE is_student SET Sname='德瑪' WHERE Sno='201215125';

(2)INSERT

演示

【例8】向信息系學(xué)生視圖IS_Student中插入一個新的學(xué)生記錄:201215129,趙新,20歲

INSERT INTO is_student VALUES('201215129','趙新',20);

  • 這里視圖沒有數(shù)據(jù),且20插入到了錯誤的地方(如果沒有WITH CHECK OPTION就會導(dǎo)致這些錯誤出現(xiàn))
  • 如果假如了WITH CHECK OPTION,那么DBMS會拒絕執(zhí)行

(3)DELETE

  • 刪除數(shù)據(jù)時,有無WITH CHECK OPTION都是一樣的

演示

【例9】刪除學(xué)號為201215125的學(xué)生

DELETE FROM is_student WHERE Sno='201215125';

總結(jié)

以上是生活随笔為你收集整理的(数据库系统概论|王珊)第三章关系数据库标准语言SQL-第六、七节:视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。