1. 程式人生 > >oracle 檢視建立和操作,建立簡單,複雜的檢視,建立基表不存在的檢視,檢視增刪改,檢視檢視的結構...

oracle 檢視建立和操作,建立簡單,複雜的檢視,建立基表不存在的檢視,檢視增刪改,檢視檢視的結構...

轉載:http://heisetoufa.iteye.com/blog/364864

檢視的概念
  檢視是基於一張表或多張表或另外一個檢視的邏輯表。檢視不同於表,檢視本身不包含任何資料。表是實際獨立存在的實體,是用於儲存資料的基本結構。而檢視只 是一種定義,對應一個查詢語句。檢視的資料都來自於某些表,這些表被稱為基表。通過檢視來查看錶,就像是從不同的角度來觀察一個(或多個)表。
檢視有如下一些優點:
* 可以提高資料訪問的安全性,通過檢視往往只可以訪問資料庫中表的特定部分,限制了使用者訪問表的全部行和列。
* 簡化了對資料的查詢,隱藏了查詢的複雜性。檢視的資料來自一個複雜的查詢,使用者對檢視的檢索卻很簡單。
* 一個檢視可以檢索多張表的資料,因此使用者通過訪問一個檢視,可完成對多個表的訪問。
* 檢視是相同資料的不同表示,通過為不同的使用者建立同一個表的不同檢視,使使用者可分別訪問同一個表的不同部分。
檢視可以在表能夠使用的任何地方使用,但在對檢視的操作上同表相比有些限制,特別是插入和修改操作。對檢視的操作將傳遞到基表,所以在表上定義的約束條件和觸發器在檢視上將同樣起作用。

檢視的建立


建立檢視需要CREAE VIEW系統許可權,檢視的建立語法如下:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 檢視名[(別名1[,別名2...])]
AS 子查詢
[WITH CHECK OPTION [CONSTRAINT 約束名]]
[WITH READ ONLY]
其中:
OR REPLACE 表示替代已經存在的檢視。
FORCE表示不管基表是否存在,建立檢視。
NOFORCE表示只有基表存在時,才建立檢視,是預設值。
別名是為子查詢中選中的列新定義的名字,替代查詢表中原有的列名。
子查詢是一個用於定義檢視的SELECT查詢語句,可以包含連線、分組及子查詢。
WITH CHECK OPTION表示進行檢視插入或修改時必須滿足子查詢的約束條件。後面的約束名是該約束條件的名字。
WITH READ ONLY 表示檢視是隻讀的。
刪除檢視的語法如下:
DROP VIEW 檢視名;
刪除檢視者需要是檢視的建立者或者擁有DROP ANY VIEW許可權。檢視的刪除不影響基表,不會丟失資料。
1.建立簡單檢視 

建立圖書作者檢視。
步驟1:建立圖書作者檢視:

Sql程式碼  收藏程式碼
  1. CREATEVIEW 圖書作者(書名,作者)   
  2.         ASSELECT 圖書名稱,作者 FROM 圖書;  


輸出結果:
檢視已建立。
步驟2:查詢檢視全部內容

Sql程式碼  收藏程式碼
  1. SELECT * FROM 圖書作者;  


輸出結果:

Sql程式碼  收藏程式碼
  1. 書名                           作者  
  2.         -------------------------------- --------------------
  3.         計算機原理                     劉勇  
  4.          C語言程式設計                馬麗  
  5.         組合語言程式設計               黃海明  


步驟3:查詢部分檢視:

Sql程式碼  收藏程式碼
  1. SELECT 作者 FROM 圖書作者;  


輸出結果:

Sql程式碼  收藏程式碼
  1. 作者  
  2.         ----------
  3.         劉勇  
  4.         馬麗  
  5.         黃海明  


說明:本訓練建立的檢視名稱為“圖書作者”,檢視只包含兩列,為“書名”和“作者”,對應圖書表的“圖書名稱”和“作者”兩列。如果省略了檢視名 稱後面的列名,則檢視會採用和表一樣的列名。對檢視查詢和對錶查詢一樣,但通過檢視最多隻能看到表的兩列,可見檢視隱藏了表的部分內容。
建立清華大學出版社的圖書檢視。
步驟1:建立清華大學出版社的圖書檢視:

Sql程式碼  收藏程式碼
  1. CREATEVIEW 清華圖書   


AS SELECT 圖書名稱,作者,單價 FROM 圖書 WHERE 出版社編號= '01';
執行結果:
檢視已建立。
步驟2:查詢圖書檢視:

Sql程式碼  收藏程式碼
  1. SELECT * FROM 清華圖書;  


執行結果:

Sql程式碼  收藏程式碼
  1. 圖書名稱                       作者             單價  
  2. -------------------------------------------- ---------- -----------------------
  3.         計算機原理                     劉勇             25.3  


步驟3:刪除檢視:

Sql程式碼  收藏程式碼
  1. DROPVIEW 清華圖書;  


執行結果:
檢視已丟掉。 
說明:該檢視包含了對記錄的約束條件。
2.建立複雜檢視
修改作者檢視,加入出版社名稱。
步驟1:重建圖書作者檢視:

Sql程式碼  收藏程式碼
  1. CREATEORREPLACEVIEW 圖書作者(書名,作者,出版社)   
  2.         ASSELECT 圖書名稱,作者,出版社名稱 FROM 圖書,出版社   
  3.         WHERE 圖書.出版社編號=出版社.編號;  


輸出結果:
檢視已建立。
步驟2:查詢新檢視內容:

Sql程式碼  收藏程式碼
  1. SELECT * FROM 圖書作者;  


輸出結果:

Sql程式碼  收藏程式碼
  1. 書名                           作者       出版社  
  2.         -------------------------------------------- ---------- ----------------------------
  3.         計算機原理               劉勇       清華大學出版社  
  4.         C語言程式設計         馬麗       電子科技大學出版社  
  5.         組合語言程式設計     黃海明     電子科技大學出版社  


說明:本訓練中,使用了OR REPLACE選項,使新的檢視替代了同名的原有檢視,同時在查詢中使用了相等連線,使得檢視的列來自於兩個不同的基表。
建立一個統計檢視。
步驟1:建立emp表的一個統計檢視:

Sql程式碼  收藏程式碼
  1. CREATEVIEW 統計表(部門名,最大工資,最小工資,平均工資)  
  2.         ASSELECT DNAME,MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP E,DEPT D  
  3.         WHERE E.DEPTNO=D.DEPTNO GROUPBY DNAME;  


執行結果:
檢視已建立。
步驟2:查詢統計表:

Sql程式碼  收藏程式碼
  1. SELECT * FROM 統計表;  


執行結果:

Sql程式碼  收藏程式碼
  1. 部門名       最大工資    最小工資    平均工資  
  2.         -------------------------- --------------- ----------------- ------------------
  3.         ACCOUNTING          5000       1300        3050  
  4.         RESEARCH             3000        800        2175  
  5.         SALES                  2850        950   1566.66667  


說明:本訓練中,使用了分組查詢和連線查詢作為檢視的子查詢,每次查詢該檢視都可以得到統計結果。
建立只讀檢視
建立只讀檢視要用WITH READ ONLY選項。
建立只讀檢視。
步驟1:建立emp表的經理檢視:

Sql程式碼  收藏程式碼
  1. CREATEORREPLACEVIEW manager   
  2.         ASSELECT * FROM emp WHERE job= 'MANAGER'
  3.         WITHREADONLY;  


執行結果:
檢視已建立。
步驟2:進行刪除:

Sql程式碼  收藏程式碼
  1. DELETEFROM manager;  


執行結果:
ERROR 位於第 1 行:
ORA-01752: 不能從沒有一個鍵值儲存表的檢視中刪除
4.建立基表不存在的檢視
正常情況下,不能建立錯誤的檢視,特別是當基表還不存在時。但使用FORCE選項就可以在建立基表前先建立檢視。建立的檢視是無效檢視,當訪問無效檢視時,Oracle將重新編譯無效的檢視。
使用FORCE選項建立帶有錯誤的檢視:

Sql程式碼  收藏程式碼
  1. CREATEFORCEVIEW 班幹部 ASSELECT * FROM 班級 WHERE 職務 ISNOTNULL;  


執行結果:
警告: 建立的檢視帶有編譯錯誤。
檢視的操作
對檢視經常進行的操作是查詢操作,但也可以在一定條件下對檢視進行插入、刪除和修改操作。對檢視的這些操作最終傳遞到基表。但是對檢視的操作有很多限定。如果檢視設定了只讀,則對檢視只能進行查詢,不能進行修改操作。
1.檢視的插入 
檢視插入練習。
步驟1:建立清華大學出版社的圖書檢視:

Sql程式碼  收藏程式碼
  1. CREATEORREPLACEVIEW 清華圖書   
  2.         ASSELECT * FROM 圖書 WHERE 出版社編號= '01';  


執行結果:
檢視已建立。
步驟2:插入新圖書:

Sql程式碼  收藏程式碼
  1. INSERTINTO 清華圖書 VALUES('A0005','軟體工程','01','馮娟',5,27.3);  


執行結果:
已建立 1 行。
步驟3:顯示檢視:

Sql程式碼  收藏程式碼
  1. SELECT * FROM 清華圖書;  


執行結果:

Sql程式碼  收藏程式碼
  1. 圖書  圖書名稱                       出 作者             數量       單價  
  2.         -------- ---------------------------------------- ----------- -------- ------------------------ --------------
  3.         A0001 計算機原理                     01 劉勇                5       25.3  
  4. A0005 軟體工程                       01 馮娟                5       27.3  


步驟4:顯示基表

Sql程式碼  收藏程式碼
  1. SELECT * FROM 圖書;  


執行結果:

Sql程式碼  收藏程式碼
  1. 圖書  圖書名稱         出 作者       數量       單價  
  2.         -------- ------------------------------------------ ------- ---------------- ----------------- ---------------
  3.         A0001 計算機原理           01 劉勇        5        25.3  
  4.         A0002  C語言程式設計        02 馬麗    1       18.75  
  5.         A0003 組合語言程式設計     02 黃海明       15       20.18  
  6.         A0005 軟體工程              01 馮娟        5        27.3  


說明:通過檢視檢視,可見新圖書插入到了檢視中。通過檢視基表,看到該圖書也出現在基表中,說明成功地進行了插入。新圖書的出版社編號為“01”,仍然屬於“清華大學出版社”。
但是有一個問題,就是如果在“清華圖書”的檢視中插入其他出版社的圖書,結果會怎麼樣呢?結果是允許插入,但是在檢視中看不見,在基表中可以看見,這顯然是不合理的。
2.使用WITH CHECK OPTION選項
為了避免上述情況的發生,可以使用WITH CHECK OPTION選項。使用該選項,可以對檢視的插入或更新進行限制,即該資料必須滿足檢視定義中的子查詢中的WHERE條件,否則不允許插入或更新。比如 “清華圖書”檢視的WHERE條件是出版社編號要等於“01”(01是清華大學出版社的編號),所以如果設定了WITH CHECK OPTION選項,那麼只有出版社編號為“01”的圖書才能通過清華檢視進行插入。
使用WITH CHECK OPTION選項限制檢視的插入。
步驟1:重建清華大學出版社的圖書檢視,帶WITH CHECK OPTION選項:

Sql程式碼  收藏程式碼
  1. CREATEORREPLACEVIEW 清華圖書   
  2.         ASSELECT * FROM 圖書 WHERE 出版社編號= '01'
  3.         WITHCHECKOPTION;  


執行結果:
檢視已建立。
步驟2:插入新圖書:

Sql程式碼  收藏程式碼
  1. INSERTINTO 清華圖書 VALUES('A0006','Oracle資料庫','02','黃河',3,39.8);  


執行結果:
ERROR 位於第 1 行:
ORA-01402: 檢視 WITH CHECK OPTIDN 違反 where 子句
說明:可見通過設定了WITH CHECK OPTION選項,“02”出版社的圖書插入受到了限制。如果修改已有圖書的出版社編號情況會如何?答案是將同樣受到限制。要是刪除檢視中已有圖書,結果又將怎樣呢?答案是可以,因為刪除並不違反WHERE條件。
3.來自基表的限制
除了以上的限制,基表本身的限制和約束也必須要考慮。如果生成子查詢的語句是一個分組查詢,或查詢中出現計算列,這時顯然不能對錶進行插入。另外,主鍵和 NOT NULL列如果沒有出現在檢視的子查詢中,也不能對檢視進行插入。在檢視中插入的資料,也必須滿足基表的約束條件。
基表本身限制檢視的插入。
步驟1:重建圖書價格檢視:

Sql程式碼  收藏程式碼
  1. CREATEORREPLACEVIEW 圖書價格   
  2.         ASSELECT 圖書名稱,單價 FROM 圖書;  


執行結果:
檢視已建立。
步驟2:插入新圖書:

Sql程式碼  收藏程式碼
  1. INSERTINTO 圖書價格 VALUES('Oracle資料庫',39.8);  


執行結果:
ERROR 位於第 1 行:
ORA-01400: 無法將 NULL 插入 ("SCOTT"."圖書"."圖書編號")
說明:在檢視中沒有出現的基表的列,在對檢視插入時,自動預設為NULL。該檢視只有兩列可以插入,其他列將預設為空。插入出錯的原因是,在檢視中不能插入圖書編號,而圖書編號是圖書表的主鍵,是必須插入的列,不能為空,這就產生了矛盾。
檢視的檢視
USER_VIEWS字典中包含了檢視的定義。
USER_UPDATABLE_COLUMNS字典包含了哪些列可以更新、插入、刪除。
USER_OBJECTS字典中包含了使用者的物件。
可以通過DESCRIBE命令檢視字典的其他列資訊。在這裡給出一個訓練例子。
檢視清華圖書檢視的定義:

Sql程式碼  收藏程式碼
  1. SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME='清華圖書';  


執行結果:

Sql程式碼  收藏程式碼
  1. TEXT  
  2.         -----------------------------------------------------------------------------------------------
  3.         SELECT 圖書名稱,作者,單價 FROM 圖書 WHERE 出版社編號='01'


檢視使用者擁有的檢視:

Sql程式碼  收藏程式碼
  1. SELECT object_name FROM user_objects WHERE object_type='VIEW';  


執行結果:

Sql程式碼  收藏程式碼
  1. OBJECT_NAME  
  2.         ----------------------------------------------------------------------------------------------
  3.         清華圖書  
  4.         圖書作者  

相關推薦

oracle 檢視建立操作,建立簡單,複雜檢視,建立存在的檢視,檢視刪改,檢視檢視結構...

轉載:http://heisetoufa.iteye.com/blog/364864 檢視的概念   檢視是基於一張表或多張表或另外一個檢視的邏輯表。檢視不同於表,檢視本身不包含任何資料。表是實際獨立存在的實體,是用於儲存資料的基本結構。而檢視只 是一種定義,對應一個查詢語句。檢視的資料都來自於某些表,這

Numpy_01 建立 指定資料型別 檢視維度資料型別 簡單的數學運算

安裝numpy 通過命令提示符 pip install numpy 或者通過第三方發放版 Anaconda 進行滑鼠操作安裝 建立陣列 直接通過numpy建立 import numpy as np

C語言線性簡單建立操作

留作學習參考 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef struct SqList *List; //建立一個結構體指標型別 指向結構體 s

資料結構基礎篇-------4. 雙向迴圈連結串列的建立操作

/* * 雙向迴圈連結串列的建立及操作 * 2018.10.23 * @L.F * * */ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef

哈夫曼樹的建立操作

哈夫曼樹的引進是與帶有權重的二叉樹有關的 首先定義帶權路徑長度(WPL):設二叉樹有n個葉子結點,每個葉子結點帶有權值Wk,從根結點到每個葉子的長度為Ik,則每個葉子結點的帶權路徑長度之和就是:WPL=∑nk=1wklk。 最優二叉樹或哈夫曼樹:WPL最小的

Spark DataFrames入門指南:建立操作DataFrame

一、從csv檔案建立DataFrame   本文將介紹如何從csv檔案建立DataFrame。 如何做?   從csv檔案建立DataFrame主要包括以下幾步驟:   1、在build.sbt檔案裡面新增spark-csv支援庫;   2、建立Sp

git建立分支操作步驟簡單明瞭大概四步

1.git checkout -b 10002-product-zwl 建立本地分支 2.git branch 選出當前分支 3.git pull 從遠端拉取程式碼 4.git push --set-upstream origin 10002-product-zwl 建立遠端

6.1MATLAB陣列的建立操作

陣列運算是MATLAB計算的基礎。文中是以二維陣列陣列的運算為例,可自行推廣到多維陣列和多維矩陣的運算。 矩陣和陣列的區別與聯絡 區別: (1)矩陣是數學上的概念,而陣列是計算機程式設計領域的概念。 (2)作為一種變換或者對映算符的體現,矩陣運算有著明確而嚴格的數學規則。而

佇列的鏈式建立操作

之前完成了堆疊的建立和操作,現在開始實現佇列 佇列是:具有一定操作約束的線性表 其插入和刪除操作:只能在一端插入,而在另一端刪除 資料插入:入佇列 資料刪除:出佇列 先來先服務 先進先出:FIFO(First In First Out) 型別名稱:佇列(Queue) 資料物

win32 目錄 檔案 建立 操作

#include "direct.h" CString dir = _T("D:\\dir"); WIN32_FIND_DATA wfd; HANDLE hFound = FindFirstFile(dir, &wfd); if( (hFound != INVALI

spark dataframe建立操作

對spark進行操作 1獲取spark環境 JavaSparkContext getSparkContext 建立dataframe //獲取spark上下文資訊

ORACLE建立、對錶進行刪改查的語法

最近在學習ORACLE,現將在ORACLE中建立表、對錶進行增刪該查的語法總結如下: 表是一種資料庫物件,是基本的資料儲存單位,由行和列組成 表的建立(以課程資訊表為例): CREATE TABLE OBJECTS       

怎麽設置登錄名 登陸後只能看到操作一個數據庫 這個用戶能看到其他的數據庫

base 應該 sql數據庫 body 兩個 blog 設置 庫服務器 OS 怎樣設置登錄名 登陸後只能看到和操作一個數據庫 這個用戶不能看到其他的數據庫一個服務器上有三個數據庫 我想新建三個登錄名 每個登錄名登陸後只能看到對應的一個數據庫 不能看到其余的兩個 怎樣進行設置

的內外連線與刪改操作

1.內連線 內連線:內連線實際上就是利用where子句對兩種表形成的笛卡兒積進行篩選,我們前面學習的查詢都是內連線 格式: select 列名 from 表名inner join 表2 on 連線條件 and 其他條件; 左外連線:如果聯合查詢,左側的表完全顯示 格式: select 欄位

Mysql(刪改查)+檢視+儲存過程【常用】

一,MySQL(一般): 1,建立資料庫: SET FOREIGN_KEY_CHECKS=0; // 修改外來鍵約束( Mysql中如果表和表之間建立的外來鍵約束,則無法刪除表及修改表結構 ) DROP TABLE IF EXISTS `user`; // DROP

Java操作Hbase進行建、刪以及對資料進行刪改查,條件查詢

1、搭建環境   新建JAVA專案,新增的包有:    有關Hadoop的hadoop-core-0.20.204.0.jar    有關Hbase的hbase-0.90.4.jar、hbase-0.90.4-tests.jar以及Hbase資源包中li

操作資料中的記錄(刪改查)

插入資料: INTO關鍵字可以省略,若沒有指明欄位,VALUES內一定要匹配所有值,哪怕是預設自增的id欄位 預設的自增id欄位可以寫為NULL,也可以寫成DEFAULT,數字欄位可

Oracle檢視建立使用

檢視其實是一張虛表,是基於已存在的基表建立,可以將檢視理解為儲存起來的 SELECT 語句。 檢視的作用: 1、控制資料的訪問 2、簡化查詢 3、避免訪問重複資料 賦權 首先要有建立檢視的許可權,沒有許可權的可以切換到sys或者system賬號,

Oracle建立呼叫儲存過程,函式,檢視

【1】Oracle建立和呼叫儲存過程1:寫一個簡單的例子刪除三級級聯 1)create or replace procedure ww_procedure_servicecheck (V_ID IN NUMBER)-- 定義輸入變數 IS begin    DELETE

oracle建立使用檢視

SQL> conn system/111; Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as SYS SQL> grant create vi