SQL 筆記(二)
阿新 • • 發佈:2018-06-17
mysql 其中 rod 順序 clas update 基礎教程 In block
本筆記整理自《SQL 基礎教程》、《MySQL 必知必會》和網上資料。個人筆記不保證正確。
一、復雜查詢
視圖
將 SELECT 查詢包裝成一個虛擬表,該虛擬表就被稱為視圖。(因為只是一個包裝,因此視圖的數據也會隨著原表的更新而更新)
- 用途:
- 簡化復雜的SQL查詢,用它替換子查詢,能降低查詢的嵌套深度。
- SELECT 查詢的重用,減少重復查詢。
- ...
創建視圖:
其中 SELECT 的結果列和視圖列名一一對應。CREATE VIEW <視圖名稱> (<視圖列名1>, <視圖列名2>... ) AS <SELECT 語句>;
- 視圖的限制
- 視圖的 SELECT 子句,不能包含 ORDER BY 子句。因為視圖也是表,而表是集合,它沒有順序。(也有些DB支持該用法,但不通用)
- 視圖的更新:只在很有限的條件下,才能在視圖上使用 INSERT/DELETE/UPDATE 這樣的變更數據的語句。(視圖應該只用於檢索,能不更新就不要更新它)
刪除視圖:
DROP VIEW <視圖名稱>;
子查詢
子查詢,其實就是一次性的視圖:
SELECT ...
FROM (
SELECT ... -- 這就是一個子查詢:嵌套的 select 語句
) AS <別名>
...
上面的查詢的 FROM 子句中,給另一 SELECT 子句定義了一個別名,並將它作為了查詢對象。這就是一個子查詢。
子查詢不僅能用於 FROM,還能用在 WHERE 子句等很多地方。
關聯子查詢
即用到了外部數據的子查詢語句:
SELECT ...
FROM product AS p1
WHERE (
SELECT ...
FROM duck AS p2
WHERE p1.price > p2.price -- 這裏,內部子查詢訪問了外部查詢的表p1,因此是一個關聯子查詢。
);
SQL 筆記(二)