SQLserver數據庫之視圖及其他查詢


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數據庫報錯

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM