發現廣告阻擋器!
本站的開銷是靠廣告收入來彌補的。請將本站加入允許名單內。謝謝!
SQL UNION ALL | |
內嵌視觀表 (inline view) 是 FROM 子句中的 SELECT 語句。視觀表是一個虛擬表格,具有表格的特性,但不保存任何實體數據。在內嵌視觀表結構中,實際數據的來源來自內嵌視觀表,而非是在 FROM 關鍵字之後指定表格名。 內嵌視觀表有時被稱為衍生表格 (derive table),這兩個術語可以互換使用。 語法內嵌視觀表的語法如下: SELECT "欄位名" FROM "內嵌視觀表";
例子假設我們有兩個表格:第一個表格是 User_Address,紀錄每個用戶的郵遞區號 (ZIP_CODE);第二個表格是 User_Score,記錄每個用戶的所有分數。問題是,如何編寫 SQL 查詢以找到每個郵遞區號中得分高於200的用戶數? 如果我們不使用內嵌視觀表,我們可以分兩步驟完成: 查詢 1 CREATE TABLE User_Higher_Than_200
SELECT User_ID, SUM(Score) FROM User_Score GROUP BY User_ID HAVING SUM(Score) > 200; 查詢 2 SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM User_Higher_Than_200 a1, User_Address a2 WHERE a1.User_ID = a2.User_ID GROUP BY a2.ZIP_CODE; 在上述代碼中,我們引入了一個臨時表格 User_Higher_Than_200,用於存儲得分高於200的用戶列表。然後透過User_Higher_Than_200 與 User_Address 表格的連接來獲取最終結果。 我們可以使用內嵌視觀表結構來簡化上述的 SQL: 查詢 3 SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM (SELECT User_ID, SUM(Score) FROM User_Score GROUP BY User_ID HAVING SUM(Score) > 200) a1, User_Address a2 WHERE a1.User_ID = a2.User_ID GROUP BY a2.ZIP_CODE; 在上述代碼中,紅色標記的代碼表示內嵌視觀表。在這裡使用內嵌視觀表有兩個優點: 1. 我們不需要創建臨時表格。這可以防止數據庫中存在太多物件,因為數據庫中的每個額外物件都會消耗管理資源。 2. 我們可以使用一個 SQL 查詢來完成我們想要的事情。 請注意,我們對內嵌視觀表的處理方式與對待表的方式完全相同。比較查詢2和查詢3,我們看到唯一的區別是在查詢2中用內嵌視觀表語句替換了臨時表格名,其他都一樣。
|
本站的開銷是靠廣告收入來彌補的。請將本站加入允許名單內。謝謝!