共用方式為


使用資料表以外的專案建立查詢 (Visual Database Tools)

適用於:SQL Server

每當您撰寫擷取查詢時,您就會清楚說明您想要的數據行、您想要的數據列,以及查詢處理器應該在哪裡找到原始數據。 一般而言,此原始數據是由一個數據表或數個聯結在一起的數據表所組成。 但原始數據可能來自數據表以外的來源。 事實上,它可以來自傳回數據表的視圖、查詢、同義詞或使用者定義函式。

使用檢視取代數據表

您可以從檢視中選取資料列。 例如,假設資料庫包含名為 「ExpensiveBooks」 的檢視,其中每個數據列都會描述價格超過 19.99 的標題。 檢視定義可能如下所示:

SELECT *
FROM titles
WHERE price > 19.99;

您只要從 [昂貴書籍] 檢視中選取心理學書籍,即可選取昂貴的心理學書籍。 產生的 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) AS 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)

使用使用者定義的函式取代數據表

您可以建立傳回資料表的使用者定義函數。 這類函式適用於執行複雜或程式性邏輯。

例如,假設員工資料表包含一個額外的數據行, 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)。 如需使用者定義函數的完整描述,請參閱 使用者定義函數