使用資料表以外的項目建立查詢 (Visual Database Tools)
適用於:SQL Server
當您編寫擷取查詢時,應該明白指出您要的資料行、您要的資料列和查詢處理器尋找原始資料的位置。 通常其原始資料是由某資料表組成或由數個資料表聯結在一起。 但原始資料可能源自資料表以外的來源。 其實,原始資料可以來自檢視、查詢、同義資料表或傳回資料表的使用者定義函數。
使用檢視取代資料表
您可以選取檢視的資料列。 例如,假設資料庫中含有名為「ExpensiveBooks」的檢視,其中每個資料列將說明價錢超過 19.99 的書名。 其檢視定義將如下所示:
SELECT *
FROM titles
WHERE price > 19.99
只要選取 [ExpensiveBooks] 檢視中的心理書籍,您就可以選取昂貴的心理書籍。 產生的 SQL 將如下所示:
SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology'
同樣的,JOIN 作業中也可以使用檢視。 例如,只要將銷售資料表聯結至 [ExpensiveBooks] 檢視,您就可以尋找昂貴書籍的銷售量。 產生的 SQL 將如下所示:
SELECT *
FROM sales
INNER JOIN
ExpensiveBooks
ON sales.title_id
= ExpensiveBooks.title_id
如需將檢視新增至查詢的詳細資訊,請參閱將資料表新增至查詢 (Visual Database Tools) (部分機器翻譯)。
使用查詢取代資料表
您可以選取查詢中的資料列。 例如,假設您已撰寫某查詢來擷取合著書籍 (具有一位以上作者的書籍) 的書名和識別碼。 產生的 SQL 將如下所示:
SELECT
titles.title_id, title, type
FROM
titleauthor
INNER JOIN
titles
ON titleauthor.title_id
= titles.title_id
GROUP BY
titles.title_id, title, type
HAVING COUNT(*) > 1
您可以再編寫其他查詢來建置該結果。 例如,您可以編寫擷取由多位作者合著的心理書籍之查詢。 若要編寫此新查詢,您可以使用現有查詢做為新查詢資料的來源。 產生的 SQL 將如下所示:
SELECT
title
FROM
(
SELECT
titles.title_id,
title,
type
FROM
titleauthor
INNER JOIN
titles
ON titleauthor.title_id
= titles.title_id
GROUP BY
titles.title_id,
title,
type
HAVING COUNT(*) > 1
)
co_authored_books
WHERE type = 'psychology'
加強顯示的文字表示做為新查詢資料來源的現有查詢。 請注意新的查詢使用別名 (「co_authored_books」) 來稱呼現有查詢。 如需別名的詳細資訊,請參閱建立資料表別名 (Visual Database Tools) (部分機器翻譯) 與建立資料行別名 (Visual Database Tools) (部分機器翻譯)。
同樣的,JOIN 作業中可使用查詢。 例如,只要將 [ExpensiveBooks] 檢視聯結至擷取由多位作者合著的書籍的查詢,您便可以尋找昂貴的合著書籍之銷售。 產生的 SQL 將如下所示:
SELECT
ExpensiveBooks.title
FROM
ExpensiveBooks
INNER JOIN
(
SELECT
titles.title_id,
title,
type
FROM
titleauthor
INNER JOIN
titles
ON titleauthor.title_id
= titles.title_id
GROUP BY
titles.title_id,
title,
type
HAVING COUNT(*) > 1
)
如需將查詢新增至查詢的詳細資訊,請參閱將資料表新增至查詢 (Visual Database Tools) (部分機器翻譯)。
使用使用者定義函數取代資料表
在 SQL Server 2000 (含) 以上版本中,您可以建立可傳回資料表的使用者定義函數。 執行複雜或程序邏輯時,這類函數便非常有用。
例如,假設員工資料表含有額外的資料行 employee.manager_emp_id,而且外部索引鍵存在於 manager_emp_id 到 employee.emp_id 之間。 在員工資料表的每個資料列中,manager_emp_id 資料行將指出員工的上司。 更明確地說,它會指出員工上司的 emp_id。 您可以建立傳回資料表的使用者定義函數,其中該資料表將包含一資料列列出在特定職等管理人員的組織結構中工作的員工。 您可以呼叫 fn_GetWholeTeam 函式,並設計該函式採用輸入變數,即管理人員 (您想要擷取該管理人員所屬小組) 的 emp_id。
您可以編寫使用 fn_GetWholeTeam 函數做為資料來源的查詢。 產生的 SQL 將如下所示:
SELECT *
FROM
fn_GetWholeTeam ('VPA30890F')
"VPA30890F" 是管理人員的 emp_id,您將擷取該管理人員的組織。 如需將使用者定義函數新增至查詢的詳細資訊,請參閱將資料表新增至查詢 (Visual Database Tools) (部分機器翻譯)。 如需使用者定義函數的完整描述,請參閱 使用者定義函數。