1.sql數據庫- 視圖的概念
- 基表
基表是真實存在於數據庫中的表對象,是視圖的數據來源表。
- 視圖
視圖是一個虛擬表,是根據需要從一個或多個基表中查詢的結果集。視圖只是保存在數據庫中的 SELECT 查詢,數據來源於基表,可像表一樣進行查詢、添加、刪除和修改數據。
- 視圖的用途
(1)為用戶集中數據,簡化用戶的數據查詢和處理。
(2)屏蔽數據庫的復雜性。
(3)簡化用戶權限的管理。
(4)便於數據共享。
(5)可以重新組織數據以便輸出到其他應用程序中。
- 視圖使用說明
(1)只有在當前數據庫中才能創建視圖。
(2)視圖的命名必須遵循標識符命名規則,不能與表同名,且對每個用戶視圖名必須是唯一的,即對不同用戶,即使是定義相同的視圖,也必須使用不同的名字。
(3)不能把規則、默認值或觸發器與視圖相關聯。
(4)不能在視圖上建立任何索引,包括全文索引。
2.sql數據庫-視圖操作
- 創建視圖
基本語法:
Create View 視圖名
As
select查詢語句
注意:
(1)只有在當前數據庫中才能創建視圖。
(2)視圖的命名必須遵循標識符命名規則,不能與表同名,且對每個用戶視圖名必須是唯一的,即對不同用戶,即使是定義相同的視圖,也必須使用不同的名字。
(3)不能把規則、默認值或觸發器與視圖相關聯。
(4)不能在視圖上建立任何索引,包括全文索引。
【例1】創建查詢學生姓名、身份證號、性別的視圖(v_stuInfo)。
CREATE VIEW v_stuInfo
AS
SELECT stuName,stuIdentity,stuSex FROM stuInfo
【例2】創建查詢學生姓名、學校名稱、區縣名稱的視圖(v_stu_area)。
CREATE VIEW v_stu_area
AS
SELECT stuName,schName,areaName From schoolInfo,stuInfo,areaInfo INNER JOIN stuInfo ON schoolInfo.schId=stuInfo.stuId INNER JOIN areaInfo ON schoolInfo.areaId=areaInfo.areaId
在執行上面的查詢代碼的時候 應該會出現下圖這樣的情況

sql數據庫報錯
我們只需要 將上面代碼中的第3行 中的 schName與areaInfo刪除然后再點擊執行即可!
- 修改視圖
基本語法:
Alter View 視圖名
As
select查詢語句
注意:修改視圖即是使用新的查詢語句替換原有的視圖查詢語句。
【例3】修改視圖v_stuInfo為查詢學生編號、姓名、身份證號碼、性別。
Alter view v_stuInfo AS SELECT AutoId, stuName,stuIdentity,stuSex FROM stuInfo
- 刪除視圖
基本語法:
Drop View 視圖名
注意:刪除視圖不影響基表數據。
【例4】刪除視圖v_stuInfo。
Drop view v_stuInfo
- 從視圖查詢數據
視圖一經建立,可像一個普通表一樣從視圖查詢數據。
【例5】從視圖v_stu_area查詢船山區的學生數據。
Select * from v_stu_area Where areaName=‘船山區’
- 查詢視圖依賴的基表
sp_depends 視圖名
如:查看v_stu_area依賴的基表:
sp_depends v_stu_area
3.sql數據庫-視圖綜合案例
【例6】創建學校人數視圖V_SchCounts,包括學校號、學校名、性別和人數;再通過該視圖查詢女生人數最多的學校名。
CREATE VIEW V_SchCounts
AS
SELECT sch.schId,schName,stuSex,count(*) as counts FROM schoolInfo sch left join stuInfo stu ON sch.schID=stu.schID GROUP BY sch.schID,schName GO Select schName from V_schCounts where counts=(select max(counts) from V_SchCounts where stuSex='女')
除了上面一些師徒操作我們還可以進行下面的這些操作,這些操作叫做排名次!
sql數據庫排名次
RANK() over(order by ….):有同名次,有斷號
DENSE_RANK() over(order by ….):有同名次,無斷號
【例7】查詢stuScores表信息,給每個記錄按照總分降序排名次。
select *,名次=Rank() over (order by total desc) from stuScores
sql數據庫排序號
ROW_NUMBER ( )over(order by ….)
【例8】查詢stuScores表信息,給每條記錄按照總分降序排序號。
select *,序號=Row_Number() over (order by total desc) from stuScores
sql數據庫排頁號
Ntile(…) over(order by ….)
【例9】查詢stuInfo表信息,給每條記錄按照autoID降序排序號。
select *,頁號=NTILE(100) OVER(ORDER BY autoID desc) from stuInfo
來源:https://zzzjtd.com/rjkf/sqljc