MySQL:MySQL 檢視
阿新 • • 發佈:2021-07-17
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 檢視與表的區別
- 檢視是建立在表的基礎上,表儲存資料庫中的資料,而檢視只是做一個數據的展示
- 通過檢視不能改變表中資料(一般情況下檢視中的資料都是表中的列 經過計算得到的結果,不允許 更新)
- 刪除檢視,表不受影響,而刪除表,檢視不再起作用