テーブル以外のものを使用してクエリを作成する (Visual Database Tools)
適用対象:SQL Server
取得クエリを記述するたびに、必要な列、必要な行、およびクエリ プロセッサが元のデータを検索する場所を明確に示します。 通常、この元のデータは、1 つのテーブルまたは複数のテーブルが結合されて構成されます。 ただし、元のデータはテーブル以外のソースから取得できます。 実際には、テーブルを返すビュー、クエリ、シノニム、またはユーザー定義関数から取得できます。
テーブルの代わりにビューを使用する
ビューから行を選択できます。 たとえば、データベースに "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)」を参照してください。
テーブルの代わりに User-Defined 関数を使用する
SQL Server 2000 以降では、テーブルを返すユーザー定義関数を作成できます。 このような関数は、複雑なロジックや手続き型のロジックを実行するのに役立ちます。
たとえば、従業員テーブルに追加の列 (employee.manager_emp_id) が含まれており、外部キーがmanager_emp_idからemployee.emp_idに存在するとします。 従業員テーブルの各行内のmanager_emp_id列は、従業員の上司を示します。 より正確には、従業員の上司のemp_idを示します。 特定の上位レベルのマネージャーの組織階層内で働く従業員ごとに 1 つの行を含むテーブルを返すユーザー定義関数を作成できます。 関数fn_GetWholeTeamを呼び出し、入力変数 (チームを取得するマネージャーのemp_id) を受け取るように設計することができます。
fn_GetWholeTeam関数をデータ ソースとして使用するクエリを記述できます。 結果の SQL は次のようになります。
SELECT *
FROM
fn_GetWholeTeam ('VPA30890F')
"VPA30890F" は、取得する組織のマネージャーのemp_idです。 クエリにユーザー定義関数を追加する方法の詳細については、「クエリへのテーブルの追加 (Visual Database Tools)」を参照してください。 ユーザー定義関数の詳細については、「User-Defined Functions」を参照してください。