テーブル以外のアイテムを使用したクエリの作成 (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 演算でビューを使用できます。 たとえば、 テーブルと ビューを結合するだけで、高価な書籍の販売状況を検索できます。 結果の 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 テーブルに employee.manager_emp_id という列があり、manager_emp_id から employee.emp_id への外部キーが存在するものとします。 employee テーブルの各行の manager_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)」を参照してください。 ユーザー定義関数の詳しい説明については、「 ユーザー定義関数」を参照してください。