Sql Server 視圖數(shù)據(jù)的增刪改查教程
一、視圖的基本概念
視圖是用于查詢的另外一種方式。 與實(shí)際的表不同,它是一個(gè)虛表;因此數(shù)據(jù)庫(kù)中只存在視圖的定義,而不存在視圖中相對(duì)應(yīng)的數(shù)據(jù),數(shù)據(jù)仍然存放在原來(lái)的基本表中。視圖是一種邏輯對(duì)象。
二、 視圖能做什么
導(dǎo)出數(shù)據(jù); 在導(dǎo)出數(shù)據(jù)時(shí),常常需要多個(gè)表聯(lián)合查詢,這個(gè)時(shí)候就可以使用視圖;轉(zhuǎn)換字段,如把status(0/1 Int類型)字段轉(zhuǎn)換成啟用/停用(文字) ,然后用視圖保存定義。
數(shù)據(jù)安全,可以給視圖加密。
三、視圖操作
3.1 查詢數(shù)據(jù)
(一)準(zhǔn)備素材:
使用兩張表,其中一張是家電表,另外一張字典表(只需要知道這兩張表有一個(gè)連接字段brandID-RowID:注意兩個(gè)表沒(méi)有強(qiáng)制使用外鍵約束),準(zhǔn)備好素材
SELECT TOP 1000 [appliancesName] ,[appliancesType] ,[code] ,[**brandId**] ,[standard] ,[appliancesStatus] ,[appliancesIsNew] ,[appliancesIsKey] ,[appliancesRemark] ,[appliancesId] FROM sfa_t_appliances
另外一張表字典表
SELECT TOP 1000 [**RowID**] ,[PRowID] ,[DicKey] ,[DicVal] ,[Status] FROM sfa_t_TSysDictionary
說(shuō)明:sfa_t_appliances 表中的字段brandId 與 sfa_t_TSysDictionary表中的rowid做關(guān)聯(lián)。
(二)創(chuàng)建視圖:
create view appliances_view(id,name,brandName) as select s.appliancesId,s.appliancesName,d.DicVal from sfa_t_appliances s,sfa_t_TSysDictionary d where s.brandId = d.RowID
(三)查詢:
查詢數(shù)據(jù),可以將視圖看做一張實(shí)實(shí)在在的數(shù)據(jù)表,能夠執(zhí)行各種查詢操作。
如下圖所示,執(zhí)行一個(gè)查詢操作:
(四)備注
有些書(shū)上說(shuō):可以對(duì)任何查詢結(jié)果進(jìn)行排序,但是只有當(dāng)視圖包括Top子句時(shí)才能排序視圖。這樣看來(lái)書(shū)上確實(shí)是有問(wèn)題的。動(dòng)手實(shí)踐出真知
3.2 插入數(shù)據(jù)
實(shí)驗(yàn)一
往視圖中插入一條數(shù)據(jù):
解釋:
往視圖中插入數(shù)據(jù)時(shí),能夠往sfa_t_appliances 中插入數(shù)據(jù)。但是視圖為什么讀取不到呢?
create view appliances_view(id,name,brandName) as select s.appliancesId,s.appliancesName,d.DicVal from sfa_t_appliances s,sfa_t_TSysDictionary d where s.brandId = d.RowID
注意視圖的創(chuàng)建語(yǔ)法:是通過(guò)關(guān)聯(lián)關(guān)系獲取到的數(shù)據(jù)。注意觀看視圖的三個(gè)字段的來(lái)源。自然,在appliancesID為112233的記錄中沒(méi)有brandID,所以自然不能讀取到數(shù)據(jù)。
實(shí)驗(yàn)二
說(shuō)明: 往只含一個(gè)基本字段中插入數(shù)據(jù)是完全沒(méi)有問(wèn)題的。上圖也插入成功了。
實(shí)驗(yàn)三
將多個(gè)基表的字段都插入試試:
insert into appliances_view(id,name,brandName) values(112234,'視圖','冰箱')
小節(jié):
使用INSERT語(yǔ)句進(jìn)行插入操作的視圖必須能夠在基表(組成視圖查詢的表)中插入數(shù)據(jù),否則會(huì)操作失敗。
如果視圖上沒(méi)有包括基表中所有屬性為not null的行,那么插入操作會(huì)由于哪些列的NULL值而失敗。
補(bǔ)充
通過(guò)視圖可以向數(shù)據(jù)庫(kù)表中插入數(shù)據(jù),修改數(shù)據(jù)和刪除表中數(shù)據(jù)。如果視圖的SELECT語(yǔ)句中包含了DISTINCT、表達(dá)式(如計(jì)算列和函數(shù)),或FROM子句中引用多個(gè)表,或者引用不可更新的視圖,或有Group by 或者h(yuǎn)aving子句,那么都不能通過(guò)視圖操作數(shù)據(jù)。
3.3 修改數(shù)據(jù)
解釋
能夠?qū)?shù)據(jù)進(jìn)行修改,但是只能修改一張表中的數(shù)據(jù)。
查看下圖,修改基于兩個(gè)表的字段:
失敗了,說(shuō)明只能修改一張表中的字段。
3.4 刪除數(shù)據(jù)
小結(jié):
如果一個(gè)視圖鏈接了兩個(gè)以上的基表,則不允許進(jìn)行數(shù)據(jù)刪除操作。如果視圖中的列是常數(shù)或者幾個(gè)字符串列值得和,那么盡管插入和更新操作時(shí)不允許的,但是卻可以進(jìn)行刪除操作。
實(shí)驗(yàn):
(一) 創(chuàng)建基于一個(gè)表的視圖:
(二)執(zhí)行刪除操作結(jié)果:
(三)結(jié)果說(shuō)明:
基于一個(gè)表的視圖是能夠執(zhí)行刪除操作的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- Mysql數(shù)據(jù)庫(kù)高級(jí)用法之視圖、事務(wù)、索引、自連接、用戶管理實(shí)例分析
- PostgreSQL數(shù)據(jù)庫(kù)視圖及子查詢使用操作
- 簡(jiǎn)析SQL Server數(shù)據(jù)庫(kù)用視圖來(lái)處理復(fù)雜的數(shù)據(jù)查詢關(guān)系
- 解析SQL Server 視圖、數(shù)據(jù)庫(kù)快照
- SQLite教程(三):數(shù)據(jù)表和視圖簡(jiǎn)介
- sql server判斷數(shù)據(jù)庫(kù)、表、列、視圖是否存在
- MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)視圖
相關(guān)文章
SqlServer常用函數(shù)及時(shí)間處理小結(jié)
這篇文章主要介紹了SqlServer常用函數(shù)及時(shí)間處理小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05SQL Server 性能調(diào)優(yōu)之查詢從20秒至2秒的處理方法
這篇文章主要介紹了SQL Server 性能調(diào)優(yōu)之查詢從20秒至2秒的處理方法,需要的朋友可以參考下2017-07-07SQL語(yǔ)句練習(xí)實(shí)例之七 剔除不需要的記錄行
相信大家肯定經(jīng)常會(huì)把數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中,但是可能會(huì)有些記錄行的所有列的數(shù)據(jù)是null,這為null的數(shù)據(jù)是我們不需要2011-10-10SQL Server向表中插入數(shù)據(jù)的三種方式
這篇文章主要介紹了SQL Server向表中插入數(shù)據(jù)的三種方式,文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-04-04Sql Server 壓縮數(shù)據(jù)庫(kù)日志文件的方法
Sql Server 日志 _log.ldf文件太大,數(shù)據(jù)庫(kù)文件有500g,日志文件也達(dá)到了500g,占用磁盤(pán)空間過(guò)大,且可能影響程序性能,需要壓縮日志文件,下面小編給大家講解下Sql Server 壓縮數(shù)據(jù)庫(kù)日志文件的方法,感興趣的朋友一起看看吧2022-11-11sql?server多行數(shù)據(jù)合并一行顯示簡(jiǎn)單實(shí)現(xiàn)代碼
有時(shí)候我們需要將多行數(shù)據(jù)按照某一列進(jìn)行合并,以便更方便地進(jìn)行數(shù)據(jù)分析和處理,這篇文章主要給大家介紹了關(guān)于sql?server多行數(shù)據(jù)合并一行顯示簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-12-12SqlServer將數(shù)據(jù)庫(kù)中的表復(fù)制到另一個(gè)數(shù)據(jù)庫(kù)
在使用SqlServer的過(guò)程中,我們可能需要將表從一個(gè)數(shù)據(jù)庫(kù)復(fù)制到另一個(gè)數(shù)據(jù)庫(kù)中,今天小編為大家介紹這種操作的具體方法及步驟2021-04-04SQL?Server日志清理3種實(shí)現(xiàn)方式
這篇文章主要給大家介紹了關(guān)于SQL?Server日志清理3種實(shí)現(xiàn)方式的相關(guān)資料,在數(shù)據(jù)庫(kù)使用很久后日志文件會(huì)累計(jì)的越來(lái)越大,如果硬盤(pán)空間不足可能會(huì)導(dǎo)致宕機(jī),需要的朋友可以參考下2023-09-09