mysql数据库入门教程(11):视图讲解大全
一.視圖的介紹
含義:虛擬表,和普通表一樣使用
mysql5.1版本出現的新特性,是通過表動態生成的數據
舉例說明什么是視圖:假設一個年級有10個班,上面有領導來啦,說要檢查舞蹈功底,學校為了應付檢查,把每個班會跳舞的女孩子抽出來臨時組成一個舞蹈班,這個班只在領導來啦才存在。這個班就是視圖
案例說明講解:
#案例:查詢姓張的學生名和專業名
以前我們的做法
現在視圖的做法,把常用的封裝起來
CREATE VIEW v1 AS SELECT stuname,majorname FROM stuinfo s INNER JOIN major m ON s.`majorid`= m.`id`;查詢時直接輸入
SELECT * FROM v1 WHERE stuname LIKE '張%';二.視圖的創建
語法:
create view 視圖名
as
查詢語句;
一般是復雜的查詢語句,簡單的用不著
案例:#1.查詢姓名中包含a字符的員工名、部門名和工種信息
USE myemployees;#①創建 CREATE VIEW myv1 ASSELECT last_name,department_name,job_title FROM employees e JOIN departments d ON e.department_id = d.department_id JOIN jobs j ON j.job_id = e.job_id;#②使用 SELECT * FROM myv1 WHERE last_name LIKE '%a%';其中涉及到的多表查詢
mysql數據庫入門教程(5):多表操作(連接查詢,子查詢,分頁查詢,聯合查詢)
案例:#2.查詢各部門的平均工資級別
USE myemployees; #①創建視圖查看每個部門的平均工資 #1創建 CREATE VIEW myv2 AS SELECT AVG(salary) ag,department_id FROM employees GROUP BY department_id;#②使用 SELECT myv2.`ag`,g.grade_level FROM myv2 JOIN job_grades g ON myv2.`ag` BETWEEN g.`lowest_sal` AND g.`highest_sal`;三.視圖的修改
#方式一:
/*
create or replace view 視圖名
as
查詢語句;
*/
如果該視圖存在就修改,如果不存在就創建
案例修改
原始視圖
修改
視圖的修改CREATE OR REPLACE VIEW myv3 AS SELECT AVG(salary),job_id FROM employees GROUP BY job_id;SELECT * FROM myv3#方式二:
/*
語法:
alter view 視圖名
as
查詢語句;
*/
語法例子
ALTER VIEW myv3 AS SELECT * FROM employees;四.視圖的刪除
/*
語法:drop view 視圖名,視圖名,…;
*/
五.視圖的查看
DESC 視圖名
DESC myv3;SHOW CREATE VIEW 視圖名;
SHOW CREATE VIEW myv3;`
六.視圖的更新
更新 是更新視圖中的數據
案例1 失敗案例
首先 創建一個視圖
數據修改、
#1.插入INSERT INTO myv1 VALUES('張飛','zf@qq.com',100000);案例2 成功案例
把案例1中的年薪去掉
創建視圖
插入數據
語法和表格插入一樣
#2.修改
UPDATE myv1 SET last_name = '張無忌' WHERE last_name='張飛';#3 刪除
#3.刪除 DELETE FROM myv1 WHERE last_name = '張無忌';#具備以下特點的視圖不允許更新
#①包含以下關鍵字的sql語句:分組函數、distinct、group by、having、union或者union all
USE myemployees;#①包含以下關鍵字的sql語句:分組函數、distinct、group by、having、union或者union allCREATE OR REPLACE VIEW myv1 AS SELECT MAX(salary) m,department_id FROM employees GROUP BY department_id;SELECT * FROM myv1;#更新 UPDATE myv1 SET m=9000 WHERE department_id=10;報錯
#②常量視圖 -查詢語句后面是一個常量
CREATE OR REPLACE VIEW myv2 ASSELECT 'john' NAME;SELECT * FROM myv2;#更新 UPDATE myv2 SET NAME='lucy';#③Select中包含子查詢
USE myemployees; CREATE OR REPLACE VIEW myv3 ASSELECT department_id,(SELECT MAX(salary) FROM employees) 最高工資 FROM departments;#更新 SELECT * FROM myv3; UPDATE myv3 SET 最高工資=100000;#④join
USE myemployees; CREATE OR REPLACE VIEW myv4 ASSELECT last_name,department_name FROM employees e JOIN departments d ON e.department_id = d.department_id;#更新SELECT * FROM myv4; UPDATE myv4 SET last_name = '張飛' WHERE last_name='Whalen'; INSERT INTO myv4 VALUES('陳真','xxxx');#⑤from一個不能更新的視圖
CREATE OR REPLACE VIEW myv5 ASSELECT * FROM myv3;#更新SELECT * FROM myv5;UPDATE myv5 SET 最高工資=10000 WHERE department_id=60;#⑥where子句的子查詢引用了from子句中的表
CREATE OR REPLACE VIEW myv6 ASSELECT last_name,email,salary FROM employees WHERE employee_id IN(SELECT manager_idFROM employeesWHERE manager_id IS NOT NULL );#更新 SELECT * FROM myv6; UPDATE myv6 SET salary=10000 WHERE last_name = 'k_ing';電氣工程的計算機萌新,寫博文不容易,如果你覺得本文對你有用,請點個贊支持下,謝謝。
總結
以上是生活随笔為你收集整理的mysql数据库入门教程(11):视图讲解大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低热量饭菜有什么?
- 下一篇: UI设计包括室内设计吗