1. 程式人生 > 其它 >MySQL:MySQL 檢視

MySQL:MySQL 檢視

1 什麼是檢視

  1. 檢視是一種虛擬表

  2. 檢視建立在已有表的基礎上, 檢視賴以建立的這些表稱為基表

  3. 向檢視提供資料內容的語句為 SELECT 語句, 可以將檢視理解為儲存起來的 SELECT 語句

  4. 檢視向用戶提供基表資料的另一種表現形式

2 檢視的作用

<1>許可權控制時可以使用

    比如,某幾個列可以執行使用者查詢,其他列不允許,可以開通檢視 查詢特定的列, 起到許可權控制的 作用

<2>簡化複雜的多表查詢

  •     檢視 本身就是一條查詢SQL,我們可以將一次複雜的查詢 構建成一張檢視, 使用者只要查詢檢視 就可以獲取想要得到的資訊(不需要再編寫複雜的SQL)
  • 檢視主要就是為了簡化多表的查詢

3 檢視的使用

建立檢視

1) 語法格式

create view 檢視名 [column_list] as select語句;
view: 表示檢視
column_list: 可選引數,表示屬性清單,指定檢視中各個屬性的名稱,預設情況下,與SELECT語句中查詢
的屬性相同
as : 表示檢視要執行的操作
select語句: 向檢視提供資料內容

2)建立一張檢視

#1. 先編寫查詢語句
#查詢所有商品 和 商品的對應分類資訊
SELECT * FROM products p LEFT JOIN category c ON p.`category_id` =
c.`cid`; #2.基於上面的查詢語句,建立一張檢視 CREATE VIEW products_category_view AS SELECT * FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid`;

3) 查詢檢視 ,當做一張只讀的表操作就可以

SELECT * FROM products_category_view;

4 通過檢視進行查詢

  1) 需求: 查詢各個分類下的商品平均價格

#通過 多表查詢
SELECT
cname AS '分類名稱',
AVG(p.`price`) AS '
平均價格' FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid` GROUP BY c.`cname`;
# 通過檢視查詢 可以省略連表的操作
SELECT cname AS '分類名稱', AVG(price) AS '平均價格' FROM products_category_view GROUP BY cname;

  2) 需求: 查詢鞋服分類下最貴的商品的全部資訊

  

#通過連表查詢
#1.先求出鞋服分類下的最高商品價格
SELECT
    MAX(price) AS maxPrice
FROM
products p LEFT JOIN category c ON p.`category_id` = c.`cid`
WHERE c.`cname` = '鞋服'

#2.將上面的查詢 作為條件使用
SELECT * FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid`
WHERE c.`cname` = '鞋服' AND p.`price` =
(SELECT
MAX(price) AS maxPrice
FROM
products p LEFT JOIN category c ON p.`category_id` = c.`cid`
WHERE c.`cname` = '鞋服');
#通過檢視查詢
SELECT * FROM products_category_view pcv
WHERE pcv.`cname` = '鞋服'
AND pcv.`price` = (SELECT MAX(price) FROM products_category_view WHERE cname =
'鞋服')

5 檢視與表的區別

  • 檢視是建立在表的基礎上,表儲存資料庫中的資料,而檢視只是做一個數據的展示
  • 通過檢視不能改變表中資料(一般情況下檢視中的資料都是表中的列 經過計算得到的結果,不允許 更新)
  • 刪除檢視,表不受影響,而刪除表,檢視不再起作用