內嵌視觀表 (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_200User_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中用內嵌視觀表語句替換了臨時表格名,其他都一樣。

下一頁:SQL INTERSECT

本頁最近於 2023年12月26日更新



Copyright © 2024   1keydata.com   版權所有