呼叫百度地圖獲取地理位置
阿新 • • 發佈:2020-10-29
一、檢視
1、定義
檢視是一個虛擬表,其內容由查詢定義。同真實的表一樣,檢視包含一系列帶有名稱的列和行資料。但檢視並不在資料庫中以儲存的資料值集形式存在。行和列資料來自由定義檢視的查詢所引用的表,並且在引用檢視時動態生成。
2、優點
1)簡單:使用檢視的使用者完全不需要關心後面對應的表的結構、關聯條件和篩選條件,對使用者來說已經是過濾好的複合條件的結果集。
2)安全:使用檢視的使用者只能訪問他們被允許查詢的結果集,對錶的許可權管理並不能限制到某個行某個列,但是通過檢視就可以簡單的實現。
3)資料獨立:一旦檢視的結構確定了,可以遮蔽表結構變化對使用者的影響,源表增加列對檢視沒有影響;源表修改列名,則可以通過修改檢視來解決,不會造成對訪問者的影響。
總而言之,使用檢視的大部分情況是為了保障資料安全性,提高查詢效率。
3、建立檢視
語法:
create view 檢視名
as
查詢語句;
#案例1.查詢姓名中包含a字元的員工名、部門名和工種資訊
#①建立
CREATE VIEW myv1
AS
SELECT 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%';
#案例2.查詢各部門的平均工資級別
#①建立檢視檢視每個部門的平均工資
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`;
#案例3 .查詢平均工資最低的部門資訊
SELECT * FROM myv2 ORDER BY ag LIMIT 1;
#案例4.查詢平均工資最低的部門名和工資
CREATE VIEW myv3
AS
SELECT * FROM myv2 ORDER BY ag LIMIT 1;
SELECT d.*,m.ag
FROM myv3 m
JOIN departments d
ON m.`department_id`=d.`department_id`;
4、檢視的修改
#方式一:存在的時候替換
/*
create or replace view 檢視名
as
查詢語句;
*/
CREATE OR REPLACE VIEW myv3
AS
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;
#方式二:
/*
語法:
alter view 檢視名
as
查詢語句;
*/
ALTER VIEW myv3
AS
SELECT * FROM employees
5、刪除檢視
語法:drop view 檢視名,檢視名,...;
DROP VIEW emp_v1,emp_v2,myv3;
6、檢視檢視
DESC myv3;
SHOW CREATE VIEW myv3;
7、檢視的更新,會更新基表的資料
CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email
FROM employees;
SELECT * FROM myv1;
SELECT * FROM employees;
#1.插入
INSERT INTO myv1 VALUES('張飛','[email protected]');
#2.修改
UPDATE myv1 SET last_name = '張無忌' WHERE last_name='張飛';
#3.刪除
DELETE FROM myv1 WHERE last_name = '張無忌';
8、具備以下特點的檢視不允許更新
#①包含以下關鍵字的sql語句:分組函式、distinct、group by、having、union或者union all
CREATE OR REPLACE VIEW myv1
AS
SELECT MAX(salary) m,department_id
FROM employees
GROUP BY department_id;
#更新
UPDATE myv1 SET m=9000 WHERE department_id=10;
#②常量檢視
CREATE OR REPLACE VIEW myv2
AS
SELECT 'john' NAME;
#更新
UPDATE myv2 SET NAME='lucy';
#③Select中包含子查詢
CREATE OR REPLACE VIEW myv3
AS
SELECT department_id,(SELECT MAX(salary) FROM employees) 最高工資
FROM departments;
#更新
UPDATE myv3 SET 最高工資=100000;
#④join
CREATE OR REPLACE VIEW myv4
AS
SELECT last_name,department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id;
#更新
UPDATE myv4 SET last_name = '張飛' WHERE last_name='Whalen';
INSERT INTO myv4 VALUES('陳真','xxxx');
#⑤from一個不能更新的檢視
CREATE OR REPLACE VIEW myv5
AS
SELECT * FROM myv3;
#更新
UPDATE myv5 SET 最高工資=10000 WHERE department_id=60;
#⑥where子句的子查詢引用了from子句中的表
CREATE OR REPLACE VIEW myv6
AS
SELECT last_name,email,salary
FROM employees
WHERE employee_id IN(
SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL
);
#更新
UPDATE myv6 SET salary=10000 WHERE last_name = 'k_ing';