回答
普通視圖是沒有更多然後可查詢的查詢。
例子:
你有兩個表,訂單和客戶,訂單有場ID,CUSTOMER_ID,performance_date客戶有ID,名字,姓氏。
現在讓我們說你要顯示訂單ID,執行日期和客戶的名字聯繫在一起,而不是發出此查詢:
SELECT o.id as order_id, c.first_name + ' ' + c.last_name as customer_name,
o.performance_date
FROM orders o inner join customers c
,你可以創建一個查詢作爲視圖,並命名爲orders_with_customers,在您的應用程序您現在可以發出查詢
SELECT *
FROM orders_with_customer
一個好處是抽象的,你可以改變你儲存客戶的名稱,如計有中間名的方式,只是改變了看法查詢。所有使用該視圖的應用程序都繼續這樣做,但現在包括中間名。
他們共同的過濾器的簡寫。
假設您有一個刪除列的記錄表。通常情況下,您不會對刪除的記錄感興趣,因此您可以創建一個名爲Records的視圖,從AllRecords表中過濾掉已刪除的記錄。
這將使您的代碼清理,因爲您不必爲每個語句添加/添加deleted != 1
。
SELECT * FROM Records
會返回所有未刪除的記錄。
在簡單的話
在SQL,視圖是基於SQL 語句的結果集的虛擬表 。
一個視圖包含行和列,只是 像一個真正的表。 視圖中的字段是來自數據庫中一個或多個實際表格的字段。
您可以添加SQL函數,WHERE和 JOIN聲明的看法和現在 的數據,如果數據是從一個單一的表來 。
在addtion到這一點,可以在底層table
從提供的view
,唯一的一個表是由視圖和未在該視圖所引用的列允許空值稱爲插入行。
MySQL中的視圖是存儲的SELECT語句
視圖是一種預先定義某些查詢的方法。它可以像查詢表一樣查詢,由查詢定義而不是一組磁盤數據。查詢它可以讓你查詢表格的結果。
在大多數情況下,查詢視圖可視爲等同於將視圖的定義查詢用作主查詢中的子查詢。視圖允許查詢更短,更模塊化(因爲通用部分在視圖中分別定義)。他們也提供了優化的機會(儘管並非所有的數據庫都這樣做;我不確定MySQL是否提供了任何優化來使視圖更快或更快)。
如果更新了基礎表,對照視圖的查詢將自動反映這些更改。
很簡單:視圖是虛擬表。
視圖基於對「真實」表的SELECT查詢,但區別在於視圖不存儲與真實表不同的信息。一個視圖只引用這些表並按照SELECT的說法將它們結合起來。這使得經常使用的查詢更加簡化。
下面是一個簡單的例子。假設你有一張僱員表和一個部門表,你希望看到他們的薪水。首先,您可以創建薪水視圖。
CREATE VIEW SALARIES
AS
SELECT e.name,
e.salary,
d.name
FROM employees AS e, deparments as d
WHERE e.depid = d.depid
ORDER BY e.salary DESC
此查詢列出了員工,他/她的薪水和部門,他們的訂單由降序排列的薪水的名稱。當你這樣做,你可以使用查詢,如:
SELECT * from SALARIES
在一個規模較大,你可以作出這樣的計算誰擁有工資那是低於平均工資的員工,並列出平均工資的視圖。在現實生活中,這樣的查詢要複雜得多。
您可以將視圖視爲一個即時生成的表格。在您的查詢中,它的行爲與普通表類似,但不是存儲在磁盤上,而是在創建視圖時定義的SQL語句中需要的時候創建。
要創建視圖,使用:
CREATE VIEW first_names AS SELECT first_name FROM people WHERE surname='Smith'
然後,您可以使用此觀點只是作爲一個普通的表。訣竅是當你更新表的人時,first_names視圖也將被更新,因爲它只是SELECT語句的結果。
這個查詢:
SELECT * FROM first_names
將返回表中的人叫史密斯的人所有的名字。如果您更新人員表並重新運行查詢,您將看到更新後的結果。
基本上,你可以用嵌套的SELECT語句替換視圖。然而,意見有一定的優勢:
- 縮短查詢 - 嵌套的SELECT語句進行查詢不再
- 提高可讀性 - 如果視圖有一個合理的名字,查詢更容易理解
- 更好的速度 - 視圖的SELECT語句存儲在數據庫引擎中,並且是預解析的,因此無需從客戶端傳輸並一遍又一遍地分析
- 緩存和優化 - 數據庫引擎可以緩存視圖並執行其他優化
這篇小文章很好地解釋了MySQL的觀點:Views and More in MySQL 5.0
- 1. 什麼是android中的虛擬現實視圖(視圖視圖)?
- 2. (iOS)什麼是超級視圖,什麼是子視圖
- 3. 什麼是MVP模式中的「視圖」?
- 4. 什麼是django視圖中的context_object_name?
- 5. SQL中視圖的用途是什麼?
- 6. ExpressJS中的「視圖」是什麼?
- 7. Android這是什麼視圖?
- 8. 什麼是根視圖?
- 9. 什麼是Java 8「視圖」?
- 10. 部分視圖是什麼?
- 11. Android視圖,這是什麼?
- 12. 什麼是模態視圖?
- 13. 什麼是從MYSQL格式化視圖的sql的好方法
- 14. MySQL中的DataDir是什麼?
- 15. 什麼是MySQL中的SESSION?
- 16. 什麼是一個好的mysql視圖編輯器?
- 17. 什麼是Android中自定義視圖
- 18. 什麼是視圖...視圖?它是如何工作的?
- 19. 究竟是什麼被視爲「視圖」?
- 20. 視圖的setContentDescription()的目的是什麼?
- 21. 爲什麼mysql總和不工作在MySQL視圖表中?
- 22. 什麼是MySQL的
- 23. 視圖控制器應該在視圖中應該是什麼?
- 24. 從視圖中調用視圖組件時,什麼是組件?
- 25. 什麼是UIScrollView的「內容視圖」?
- 26. 索引視圖的標準是什麼?
- 27. 什麼是物化視圖的PCT?
- 28. 更新視圖的規則是什麼?
- 29. List.sublist(n,m)的視圖是什麼?
- 30. Android:什麼是默認的視圖ID?