行列子集視圖

SELECT SELECT SELECT

若一個視圖是從單個基本表導出來的,並且只是去掉了基本表的某些行和某些列,但保留了主碼,我們稱這類視圖為行列子集視圖。

RDBMS執行對視圖的查詢時,首先進行有效性檢查,檢查查詢中涉及的表、視圖等是否存在。如果存在,則從數據字典中取出視圖的定義,把定義中的子查詢和用戶的查詢結合起來,轉換成等價的對基本表的查詢,然後再執行修正後了的查詢。這一轉換過程成為視圖消解(View Resolution)。

例如:

CREATE VIEW IS_Student

AS

SELECT Sno,Sname,Sage

FROM Student

WHERE Sdept="IS"

WITH CHECK OPTION;

SELECT Sno,Sage

FROM IS_Student

WHERE Sage<20;

本例轉換後的查詢語句為:

SELECT Sno,Sage

FROM Student

WHERE Sdept="IS" AND Sage<20;

本查詢涉及視圖IS_Student(虛表)和基本表SC,通過這兩個表的連線來完成用戶請求。

在一般情況下,視圖查詢的轉換是直截了當的。但有些情況下,這種轉換不能直接進行,查詢時就會出現問題

CREATE VIEW S_G(SNO,Gavg)

AS

SELECT Sno,AVG(Grade)

FROM SC

GROUP BY Sno

SELECT *

FROM S_G

WHERE Gavg>=90;

將上面兩種查詢結合,形成下列查詢語句:

SELECT Sno,AVG(Grade)

FROM SC

WHERE AVG(Grade) >=90

GROUP BY Sno;

因為WHERE子句中是不能用聚集函式作為條件表達式的,因此執行此修正後的查詢將會出現語法錯誤。正確轉換的查詢語句是:

SELECT Sno,AVG(Grade)

FROM SC

GROUP BY Sno

HAVING AVG(Grade) >=90

目前多數關係資料庫系統對行列子集視圖的查詢均能進行正確轉換。但對非行列子集視圖的查詢就不一定能做轉換了,因此這類查詢應該直接對基本表進行。

相關詞條

熱門詞條

聯絡我們