1. 程式人生 > 實用技巧 >呼叫百度地圖獲取地理位置

呼叫百度地圖獲取地理位置

一、檢視

  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語句:分組函式、distinctgroup  byhaving、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';