視圖的概念:從表中抽取出邏輯上相關的數據集合
視圖相關概念:
1.視圖是一種續表
2.視圖建立在已有表的基礎上,視圖賴以建立的這些表稱為基表
3.向視圖提供數據內容的語句為SELECT語句,可以將視圖理解為存儲起來的SELECT語句
視圖的作用:
1.控制數據訪問
2.簡化查詢
3.避免重復訪問相同的數據
理解:將經常重復訪問的數據(對應到表中某些字段(可以是多表連接查詢後的結果))新建成視圖,可以大大的簡化查詢。
簡單視圖和復雜視圖:復雜視圖中有函數和分組(相當於形成了新表,於基表沒有關系)
視圖的創建和修改:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]…)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY [CONSTRAINT constraint]];
如: CREATE VIEW empvu80 AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80; 如:CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id) AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id FROM employees WHERE department_id = 80;
當視圖定義中包含以下元素之一時不能使用delete:
1.組函數
2.GROUP BY 子句
3.DISTINCT 關鍵字
4.ROWNUM 偽列
當視圖定義中包含以下元素之一時不能使用update:
?組函數
?GROUP BY子句
?DISTINCT 關鍵字
?ROWNUM 偽列
?列的定義為表達式
當視圖定義中包含以下元素之一時不能使insert:
?組函數
?GROUP BY 子句
?DISTINCT 關鍵字
?ROWNUM 偽列
?列的定義為表達式
?表中非空的列在視圖定義中未包括
理解:主要需要記住的是rownum偽劣不能使用delete,其他的相當於形成了新表,
或是有約束條件的時候也不能delete,insert,有時候update也不行,視情況而定,
視圖的主要作用是用於簡化查詢。
屏蔽DML操作:
使用:WITH READ ONLY
任何 DML 操作都會返回一個Oracle server 錯誤
**刪除視圖:**DROP VIEW view
TOP-N 分析:
Top-N 分析查詢一個列中最大或最小的 n 個值
最大和最小的值的集合是 Top-N 分析所關心的
SELECT [column_list], ROWNUM FROM (SELECT [column_list] FROM table ORDER BY Top-N_column) WHERE ROWNUM <= N;
**注意:
對 ROWNUM 只能使用 < 或 <=, 而用 =, >, >= 都將不能返回任何數據。**
如:查詢員工表中,工資排名在40-50之間的員工信息。
select * from( select rownum rn,employee_id,salary from( select employee_id,salary,last_name from employees order by salary desc ) )where rn <=50 and rn >40
誰知道Markdown編輯器怎麼進行縮進,有點小郁悶,排版都亂了。