oracle基礎知識視圖的定義和應用

1.1 視圖的定義
視圖(View)是數據庫中非常重要的內容,在實際開發中必須學會視圖的編寫。
用于產生視圖的表叫做該視圖的基表。一個視圖也可以從另一個視圖中產生。視圖是可以嵌套的。
視圖的定義存在數據庫中,與此定義相關的數據并沒有再存一份于數據庫中。視圖看上去非常象數據庫的物理表,對它的操作同任何其它的表一樣。
通過視圖修改數據時,實際上是在改變基表中的數據。基表數據的改變也會自動反映在由基表產生的視圖中。
1.2視圖的語法和優勢
視圖的具體優勢如下:
可以限制用戶只能通過視圖檢索數據。這樣就可以對最終用戶屏蔽建表時底層的基表;
可以將復雜的查詢保存為視圖,可以對最終用戶屏蔽一定的復雜性;
限制某個視圖只能訪問基表中的部分列或者部分行的特定數據,保證數據的安全性。
從多張基表中按一定的業務邏輯抽出用戶關心的部分,形成一張虛擬表。
創建視圖的語法如下:
create [ or replace ] [ force ] view [schema.]view_name
[ (column1,column2,…) ]
as
select …
[ with check option ] [ constraint constraint_name ]
[ with read only ];

(1) or replace: 如果存在同名的視圖, 則使用新視圖替代已有的視圖
(2) force: 強制創建視圖,不考慮基表是否存在,也不考慮是否具有使用基表的權限
(3) column1,column2,…:視圖的列名, 列名的個數必須與select查詢中列的個數相同; 如果select查詢包含函數或表達式,則必須為其定義列別名。
(4) with check option: 指對視圖執行的dml操作必須滿足“視圖子查詢”的條件即,對通過視圖進行的增刪改操作進行檢查,要求增刪改操作的數據, 必須是查詢語句所能查詢到的數據,否則不允許操作并返回錯誤提示。
(5)with read only:創建的視圖只能用于查詢數據, 不能用于更改數據。
視圖分為簡單視圖和復雜視圖。
簡單視圖:是指基于單個表建立的,不包含任何函數、表達式和分組數據的視圖。對簡單視圖可以進行dml操作。
復雜視圖是指在視圖定義中包括了聚合函數、分析函數、用戶自定義函數、多表關聯、子查詢等。此類視圖在某些特定條件下,優化器無法將視圖外的謂詞條件推送至視圖內的基表上,即使在基表的列上創建索引也無法使用索引。
對視圖進行DML操作就是對視圖數據來源的基礎表進行的操作(但不能違反基礎表的約束條件)。只能對簡單視圖進行DML操作,復雜視圖不可以。
【例1-1】建立雇員表包括職工編號、姓名、薪水、電話號碼。建立基于該表
的簡單視圖 vw_emp,對視圖進行dml操作
–第五章\st.sql

create table SM_EMP
( empid varchar2(30),
name varchar2(30),
salary NUMBER(6,2),
telno CHAR(8)
);

–建立視圖
create view vw_emp as select empid,name,salary,telno from SM_EMP;
對簡單視圖進行DML操作,代碼如下:
–插入數據
INSERT INTO vw_emp VALUES(‘15661’,‘張飛雨’,5500,'6678562 ');
–更新數據
update vw_emp set name=‘張雨庭’ where name=‘張飛雨’;
delete vw_emp where name=‘張雨庭’;

–查詢數據
select * from vw_emp where empid=‘15661’;

【例1-2】建立表銷售訂單表,包括操作號碼、總價、員工編號、銷售時間。建立雇員表包括職工編號、姓名、薪水、電話號碼。建立復雜視圖查詢職工的基本信息、 銷售總價、銷售時間。銷售總價的10%作為職工的提成,查詢出拿到提成的職工姓名。
建表,建立視圖代碼如下:
–第五章\st.sql
–建立銷售訂單表
CREATE TABLE sm_saleorderlist(
TransactionID NUMBER(10) ,
TotalPrice NUMBER(7,2) NOT NULL,
EmployID varchar2(30) NOT NULL,
SaleTime DATE NOT NULL,
PRIMARY KEY(TransactionID));
–插入測試數據
INSERT INTO sm_saleorderlist VALUES(1,100.10,‘0000000001’,‘09_9月_15’);
INSERT INTO sm_saleorderlist VALUES(3,300.10,‘0000000002’,‘09_9月_20’);
INSERT INTO sm_saleorderlist VALUES(4,100.10,‘0000000003’,‘09_9月_19’);
COMMIT;
–建立雇員表
create table SM_EMP
( empid varchar2(30),
name varchar2(30),
salary NUMBER(6,2),
telno CHAR(8)
);

INSERT INTO sm_emp VALUES(‘0000000001’,‘張飛飛’,5500,'6678562 ');
INSERT INTO sm_emp VALUES(‘0000000002’,‘關庭’,4500,‘87825626’);
INSERT INTO sm_emp VALUES(‘0000000003’,‘孫海’,6200,‘87783617’);
Commit;

–建立視圖,查詢銷售總價和銷售時間
create or replace view smv_zhcx
as
select a.empid,a.name,a.telno,b.transactionid,b.totalprice,b.saletime from sm_emp a
left join
sm_saleorderlist b
on a.empid=b.EmployID

–建立視圖,查詢職工能拿到提成

create view smv_cs
as
select empid,name,telno,totalprice*0.1 as commission ,saletime
from smv_zhcx

查詢視圖smv_zhcx數據,代碼如下:
select * from smv_zhcx t
執行后如圖5-1所示。
在這里插入圖片描述

圖5-1查詢視圖smv_zhcx數據

查詢視圖smv_cs數據,代碼如下:
select * from smv_cs
執行后如圖5-2所示。
在這里插入圖片描述

圖5-2查詢視圖smv_cs數據

5.1.3視圖修改和刪除
修改視圖的過程即為重新定義視圖的過程。可以通過先刪除視圖,然后再次創建視圖實現。另外,Oralce數據庫提供了一個專門的命令create or replace view來重新定義視圖。
刪除視圖的動作實際為刪除數據庫中的對象操作,因此該操作為DML操作。如同刪除數據表對象,刪除視圖也應該使用drop命令,其語法形式如下所示。
DROP VIEW view_name;
5.3視圖和表的區別
(1)表是創建好的,真實存在的,而視圖只是一段已經編譯好的sql語句。
(2)表占有真實的物理空間,而視圖只是一個邏輯概念。數據都是存儲在表里面的。
(3)表是內模式,視圖是外模式(內模式又稱存儲模式,對應于物理級,它是數據庫中全體數據的內部表示或底層描述,是數據庫最低一級的邏輯描述,它描述了數據在存儲介質上的存儲方式和物理結構,對應著實際存儲在外存儲介質上的數據庫。內模式由內模式描述語言來描述、定義,它是數據庫的存儲觀。外模式又稱子模式,對應于用戶級。它是某個或某幾個用戶所看到的數據庫的數據視圖,是與某一應用有關的數據的邏輯表示。外模式是從模式導出的一個子集,包含模式中允許特定用戶使用的那部分數據。
(4)視圖是查看數據表的一種方法,可以查詢到表中用戶想知道的數據,并且還不知道表結構,比較安全。
(5)表可以做增刪改查,視圖中簡單視圖可以做DML操作,復雜視圖只可以查詢。
(6)視圖的創建和刪除不影響表.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75217.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

邊緣計算:工業自動化的智能新引擎

在工業4.0的浪潮中,工業自動化正經歷著前所未有的變革。隨著物聯網(IoT)技術的普及,越來越多的工業設備被連接到網絡中,產生了海量的數據。然而,傳統的云計算架構在處理這些實時性要求極高的工業數據時&…

12-SpringBoot3入門-項目打包和運行

1、打包 1&#xff09;打包插件 pom.xml <!--SpringBoot應用打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plu…

【PCIE711-214】基于PCIe總線架構的4路HD-SDI/3G-SDI視頻圖像模擬源

產品概述 PCIE711-214是一款基于PCIE總線架構的4路SDI視頻模擬源。該板卡為標準的PCIE插卡&#xff0c;全高尺寸&#xff0c;適合與PCIE總線的工控機或者服務器&#xff0c;板載協議處理器&#xff0c;可以通過PCIE總線將上位機的YUV 422格式視頻數據下發通過SDI接口播放出去&…

PipeWire 音頻設計與實現分析一——介紹

PipeWire 是一個基于圖的媒體處理引擎&#xff0c;一個可以運行多媒體節點圖的媒體服務器&#xff0c;是 Linux 的音頻/視頻總線&#xff0c;它管理 Linux 系統中&#xff0c;不同應用程序對音頻和視頻設備的共享訪問。它提供了一個本地客戶端音頻 API&#xff0c;但也提供兼容…

使用卷積神經網絡識別MNIST數據集

卷積神經網絡 卷積神經網絡本質是共享權重稀疏鏈接的全連接網絡 編寫步驟 構建一個神經網絡&#xff0c;步驟是幾乎不變的&#xff0c;大概有以下幾步 準備數據集 #更高級的CNN網絡 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…

力扣125.驗證回文串

如果在將所有大寫字符轉換為小寫字符、并移除所有非字母數字字符之后&#xff0c;短語正著讀和反著讀都一樣。則可以認為該短語是一個 回文串 。 字母和數字都屬于字母數字字符。 給你一個字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否則&#…

UR機械臂sim2real推薦包

推薦一個和ur機械臂配套的interface&#xff1a; ur_rtde Universal Robots RTDE C Interface — ur_rtde 1.6.0 documentation 也歡迎大家提供新想法和bug

CST學習筆記(三)MATLAB與CST聯合仿真-遠場數據批量導出

CST學習筆記&#xff08;三&#xff09;MATLAB與CST聯合仿真-遠場數據批量導出 一、直接數據導出 &#xff08;1&#xff09;打開遠場&#xff0c;調至笛卡爾坐標系 &#xff08;2&#xff09;然后點擊post processing → Import/Export → Plot Data (ASCII) &#xff0c;即…

藍橋杯---BFS解決FloofFill算法1---圖像渲染

文章目錄 1.算法簡介2.題目概述3.算法原理4.代碼分析 1.算法簡介 這個算法是關于我們的floodfill的相關的問題&#xff0c;這個算法其實從名字就可以看出來&#xff1a;洪水灌溉&#xff0c;其實這個算法的過程就和他的名字非常相似&#xff0c;下面的這個圖就生動的展示了這個…

我與數學建模之啟程

下面的時間線就是從我的大二上開始 9月開學就迎來了本科階段最重要的數學建模競賽——國賽&#xff0c;這個比賽一般是在9月的第二周開始。 2021年國賽是我第一次參加國賽&#xff0c;在報名前我還在糾結隊友&#xff0c;后來經學長推薦找了另外兩個學長。其實第一次國賽沒啥…

利用 SSRF 和 Redis 未授權訪問進行內網滲透

目錄 環境搭建 ?編輯 發現內網存活主機 ?編輯 掃描內網端口 ?編輯 利用 Redis 未授權訪問進行 Webshell 寫入 步驟1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步驟 2&#xff1a;寫入 Webshell&#xf…

【Vue2插槽】

Vue2插槽 Vue2插槽默認插槽子組件代碼&#xff08;Child.vue&#xff09;父組件代碼&#xff08;Parent.vue&#xff09; 命名插槽子組件代碼&#xff08;ChildNamed.vue&#xff09;父組件代碼&#xff08;ParentNamed.vue&#xff09; 代碼解釋 Vue2插槽 Vue2插槽 下面為你詳…

ORB-SLAM學習感悟記錄

orb特征點的旋轉不變性 利用灰度質心法求出的質心后&#xff0c;與形心連線所形成的角度如下圖所示&#xff1a; 這里容易對上圖進行誤解&#xff1a; 為了保證旋轉不變性&#xff0c;這里注意ORB-slam是利用這個角度旋轉坐標系&#xff0c;以新坐標系為標準從圖像中采點進行…

搜索算法------深度優先搜索

1. 介紹 深度優先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一種用于遍歷或搜索樹或圖的算法。這種算法通過盡可能深地搜索圖的分支來探索解決方案空間&#xff0c;直到達到一個沒有分支的點&#xff0c;然后回溯 1.1 原理 選擇起始點&#xff1a;從…

4.2 單相機引導機器人放料-僅考慮角度變化

【案例說明】 本案例產品在托盤中,角度變化不大(<15度);抓取沒有問題,只是放的穴位只能容許3度的角度偏差,因此需要測量產品的角度。 思路是:機器人抓料后、去固定拍照位拍照(找到與標準照片的角度偏差),機器人在放料的位置上多旋轉這個角度偏差,把產品放進去。 …

六級詞匯量積累day13

commend 表揚 exhaust 耗盡&#xff0c;用盡 weary 疲憊的&#xff0c;勞累的 fatigue 疲憊&#xff0c;勞累 obese 臃腫的&#xff0c;肥胖的 adopt 采納&#xff0c;收養 adapt 適應 accomplish 完成&#xff0c;實現 accomplishment 成就 achieve 實現&#xff0c;完成 achi…

醫院信息系統與AI賦能的介紹

隨著醫療行業的不斷發展&#xff0c;醫院信息系統&#xff08;HIS&#xff0c;Hospital Information System&#xff09;已經成為現代醫療服務不可或缺的一部分。醫院信息系統通過數字化、信息化手段&#xff0c;有效地整合了醫院內部的醫療、財務、后勤等各個業務環節&#xf…

突發,國行 iPhone 17,支持 eSIM

古人云“無心生大用”&#xff0c;往往你感到絕望的時候&#xff0c;轉機就莫名其妙的來了。 根據供應鏈的最新消息&#xff0c;國行 iPhone 17 Air&#xff0c;有望用上 eSIM。 不僅如此&#xff0c;國產手機廠商&#xff0c;也計劃推出類似iPhone 17 Air的超薄機型&#xf…

【C++項目】從零實現RPC框架「三」:項?抽象層實現

?? 個人主頁:Zfox_ ?? 系列專欄:C++從入門到精通 目錄 一:?? 常?的零碎功能接?類實現?? 簡單?志宏實現?? Json 序列化/反序列化?? UUID ?成二:?? 項?消息類型字段信息定義 ?? 請求字段宏定義?? 消息類型定義?? 響應碼類型定義?? RPC 請求類型定…

Hadoop集群常用指令詳解

在大數據處理領域&#xff0c;Hadoop作為分布式計算和存儲的開源框架&#xff0c;已經成為不可或缺的工具。掌握Hadoop集群的常用指令對于集群的日常管理和操作至關重要。本文將詳細介紹Hadoop集群的常用指令&#xff0c;幫助讀者更好地理解和使用Hadoop。 一、Hadoop集群的啟…