熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

SQL實戰新手入門:創建視圖(2)

2013-11-13 12:43:32  來源: SQL語言 

   創建視圖(

  下面的視圖將返回位於書櫃頂層(#)書架中價格最貴的前本圖書的名稱該示例使用了Microsoft SQL Server語法(它支持在視圖中使用ORDER BY子句)

  CREATE VIEW vwTopbooksOnthShelf

  AS

  SELECT TOP

  loc_position_left AS position

   bk_title AS title

   bk_id

  FROM location INNER JOIN books

  ON locationfk_bk_loc = booksbk_id

  WHERE loc_shelf =

  ORDER BY bk_price DESC;

  運行視圖中的SELECT語句將返回數據的一個子集它只有個列限制為最頂部的條記錄並且按照BK_PRICE列排序(盡管通過該視圖無法訪問BK_PRICE列)

  SELECT * FROM vwTopbooksOnthShelf;

  position title bk_id

  

   Wiley Pathways: Introduction to Database Management

   SQL Bible

   SQL Functions: Programmers Reference

  ( row(s) affected)

  使用視圖抽取數據不僅可以隱藏底層數據模型的復雜性使數據對用戶更加友好而且還可以拒絕訪問未通過視圖暴露出來的行和列從而為數據訪問提供一種安全機制例如如果想讓用戶能夠查詢位於第個書架中價格最貴的前本圖書但是又不洩漏圖書的實際價格那麼上面例子中的視圖可以實現這樣的功能即使BK_PRICE列存在於底層的表中只有查詢該視圖(vwTopbooksOnthShelf視圖)權限的用戶也永遠無法看到圖書的價格或是查詢出價格排名第位的圖書

  試一試用視圖包裝復雜性

  下面將構造一個相對比較復雜的查詢其中包含了多個JOIN語句和一個GROUP BY子句以查找用指定搜索標志例如SQL標記的圖書並將其按照出版年份進行分組將該查詢包裝到一個視圖中然後觀察如何使用視圖向用戶隱藏底層的復雜性該示例使用Microsoft SQLServer創建但在本書介紹的其他RDBMS中無須任何修改也能正常運行

  () 連接到RDBMS打開New Query窗口

  () 在查詢窗口中輸入下面的代碼並單擊Execute按鈕

  CREATE VIEW vwOneComplexView

  AS

  SELECT bk_title AS title

   bk_published_year AS pub_year

   locloc_shelf

  FROM books bk INNER JOIN books_authors ba

  ON bkbk_id = babk_id

  INNER JOIN authors au

  ON baau_id = auau_id

  INNER JOIN location loc

  ON bkbk_id = locfk_bk_loc

  INNER JOIN search_books sb

  ON sbbk_id = bkbk_id

  INNER JOIN searchTags st

  ON sttag_id = sbtag_id

  WHERE locloc_shelf =

  AND sttag_value IN (SQL

  GROUP BY

  bk_published_year

   bk_title

   bk_price

  loc_shelf

  () 確認該命令是否執行成功以及是否確實創建了vwOneComplexView視圖

  () 從查詢窗口中刪除代碼輸入下面的代碼執行一個新的查詢

  SELECT * FROM vwOneComplexView

  ORDER BY title;

  title pub_year loc_shelf

  

  Microsoft SQL Server Weekend Crash Course

  SQL Bible

  SQL Functions: Programmers Reference

  Wiley Pathways: Introduction to Database Management

  ( row(s) affected)

  示例說明

  該視圖使用INNER JOIN語法連接了個表另外它強加了兩個限制一是僅搜索標記為SQL的圖書二是僅搜索位於頂層書架(第個書架)中的圖書同時按照BOOKS表的BK_PUBLISHED_YEAR列(以及其他個列)進行分組通過將這些復雜性包裝在一個視圖中就可以簡化業務用戶需要運行的查詢並同時實施某些業務和安全規則如果對該視圖僅有SELECT權限那麼用戶就不可能查詢到視圖指定搜索條件之外的圖書記錄只有以SQL標記並且位於第個書架中的圖書才會出現在視圖的結果集中用戶可以使用ORDER BY子句對視圖的結果進行排序只需要通過視圖暴露的別名就可以引用視圖在上面對該視圖的查詢中使用了ORDER BY子句按照TITLE列對查詢視圖的結果進行了排序該ORDER BY子句將覆蓋在定義視圖的語法中GROUP BY子句產生的默認順序

       返回目錄SQL實戰新手入門

       編輯推薦

       Oracle索引技術

       高性能MySQL

       數據倉庫與數據挖掘培訓視頻教程


From:http://tw.wingwit.com/Article/program/SQL/201311/16462.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.