ユニオン クエリを使って複数のクエリを 1 つの結果に結合する

重要:  この記事は機械翻訳されています。機械翻訳についての「免責事項」をお読みください。この記事の英語版を参照するには、ここをクリックしてください。

Access データベースが関連付けられていない 2 つのテーブル 1 の顧客データを保存する仕入先のデータを格納する – 連絡先情報フィールドのある両方のテーブルを考えてみます。1 つのビューの両方のテーブルからの連絡先情報を表示するにはします。これを行うには、まず、連絡先の情報を取得するには、各テーブルの選択クエリを作成し、ユニオン クエリを作成してそれらの結果を結合します。

注: Access デスクトップ データベースで使用するため、この記事の内容が想定しています。作成したり、Access web データベースまたは Access web アプリでユニオン クエリを使用できません。

基本的な選択クエリの作成方法を復習する必要がありますか。選択クエリを作成するを参照してください。

ユニオン クエリの作成にあたり、いくつかの注意事項があります。

  • 1 つのユニオン クエリ内で結合される選択クエリの出力フィールドは、同じ数、同じ順序、同じまたは互換性のあるデータ型である必要があります。ユニオン クエリを実行すると、クエリ出力のフィールドの数が各 SELECT ステートメントと同じになるように、対応するフィールドの各セットのデータが 1 つの出力フィールドに結合されます。

  • ユニオン クエリは SQL 固有のクエリであるため、SQL で直接作成してください。ユニオン クエリなどの SQL 固有のクエリを作成するには、SQL ビューに切り替えます。

手順 1: 選択クエリを作成する

注: 選択クエリには複数のテーブルやクエリを含めることができますが、この手順では、各選択クエリに含めるのは 1 つのテーブルのデータだけにします。

  1. [作成] タブの [クエリ] グループで [クエリ デザイン] をクリックします。

  2. [テーブルの表示] ダイアログ ボックスで、追加するフィールドを含むテーブルをダブルクリックします。クエリ デザイン ウィンドウにテーブルが追加されます。

  3. [テーブルの表示] ダイアログ ボックスを閉じます。

  4. クエリ デザイン ウィンドウで、追加する各フィールドをダブルクリックします。
    フィールドを選ぶときに、他の選択クエリに追加するフィールドと同じ数のフィールドを、同じ順序で追加してください。フィールドのデータ型に注意して、結合する他のクエリの同じ位置にあるフィールドのデータ型と互換性があるようにします。たとえば、最初の選択クエリに 5 つのフィールドがあり、最初のフィールドに日付/時刻のデータが含まれている場合、結合する他の選択クエリにもそれぞれ 5 つのフィールドがあり、最初のフィールドには日付/時刻のデータが含まれるようにします。

  5. 必要に応じて、フィールド グリッドの [抽出条件] 行で適切な式を入力して、フィールドに抽出条件を追加します。

  6. フィールドとフィールドの抽出条件の追加が完了したら、選択クエリを実行し、出力を確認して必要があります。[デザイン] タブの [結果] で、[実行] をクリックします。

  7. クエリをデザイン ビューに切り替えます。

  8. 選択クエリを保存し、開いたままにしておきます。

  9. 結合する選択クエリごとに、この手順を繰り返します。

詳細については、クエリで抽出条件を使用して、クエリに抽出条件を適用するを参照してください。

手順 2: 選択クエリを結合する

この手順では、SQL ステートメントを使用して、ユニオン クエリを作成します。(詳細については、下にあるSQL 構文] セクションを参照してください)。

  1. [作成] タブの [クエリ] グループで [クエリ デザイン] をクリックします。

  2. [テーブルの表示] ダイアログ ボックスを閉じます。

  3. [デザイン] タブの [クエリの種類] で [ユニオン] をクリックします。

クエリのデザイン ウィンドウが非表示になり、SQL ビューのオブジェクト タブが表示されます。この時点では、SQL ビュー オブジェクト タブは空です。

  1. ユニオン クエリ内で結合する最初の選択クエリのタブをクリックします。

  2. [ホーム] タブの [表示] をクリックして > SQL ビュー

  3. 選択クエリの SQL ステートメントをコピーします。手順 1 で作成を開始したユニオン クエリのタブをクリックします。

  4. 選択クエリの SQL ステートメントを、ユニオン クエリの SQL ビュー オブジェクト タブに貼り付けます。

  5. 選択クエリの SQL ステートメントの末尾にあるセミコロン (;) を削除します。

  6. 1 行下までカーソルを移動し、新しい行に連合を入力して Enter キーを押します。

  7. ユニオン クエリ内で結合する次の選択クエリのタブをクリックします。

  8. 手順 5 から 10 を繰り返し、選択クエリのすべての SQL ステートメントをユニオン クエリの SQL ビュー ウィンドウにコピーして貼り付けます。最後の選択クエリの SQL ステートメントで、末尾のセミコロンを削除したり、末尾に文字などを入力したりしないでください。

  9. [デザイン] タブの [結果] グループで、[実行] をクリックします。

ユニオン クエリの結果がデータシート ビューに表示されます。

ページの先頭へ

ユニオン クエリの使用のヒント

  • 各行がどのテーブルのものかを区別できるようにするには、各 SELECT ステートメントにフィールドとしてテキスト文字列を追加します。

    たとえば、Products という名前のテーブルからフィールドを取得する SELECT ステートメントと、Services という名前のテーブルからフィールドを取得する SELECT ステートメントがある場合、最初のステートメントの末尾にフィールドとして文字列 "Product" を追加し、2 番目のステートメントの末尾に "Service" を追加します。次の例に示すように、AS キーワードを使用して、文字列にフィールド エイリアス ("type" など) を割り当てることもできます。

    SELECT field1, field2, ... "Product" AS type

    SELECT field1, field2, ... "Service" AS type

    クエリ出力には、その行が Products テーブルのものか Services テーブルのものかを示す、"type" という名前のフィールドが含まれます。

  • 各 UNION キーワードは、直前および直後の SELECT ステートメントを結合します。クエリ内で UNION キーワードと共に ALL キーワードを使用し、他のキーワードは使用しない場合、結果には、UNION ALL を使用して結合された SELECT ステートメントのペアによって、重複する行が含まれますが、ALL キーワードのない UNION を使用して結合された SELECT ステートメントでは、重複する行は含まれません。

  • 選択クエリのフィールドの数、データ型、順序が一致していなければなりません。これらは、計算やサブクエリなどの式を使って一致させることができます。

    たとえば、"Right" 関数を使用して 2 文字の年フィールドを 4 文字の年フィールドに対応付けることで、4 文字の年の末尾 2 桁を抽出できます。

ユニオン クエリの結果を使って新しいテーブルを作成する

まず、入力として、ユニオン クエリを使用して、新しい選択クエリでは、し、次の手順で示すように、テーブル作成クエリの基礎としてその選択クエリを使います。

  1. ユニオン クエリを作成して保存します。

  2. [作成] タブの [クエリ] グループで [クエリ デザイン] をクリックします。

  3. [テーブルの表示] ダイアログ ボックスで、[クエリ] タブをクリックします。

  4. ユニオン クエリをダブルクリックした後、[テーブルの表示] ダイアログ ボックスを閉じます。

    注: メッセージ バーにセキュリティ警告が表示された場合、アクション クエリが無効になることがあります。アクション クエリを有効にするには、メッセージ バーの [コンテンツの有効化] をクリックします。

  5. 新しいテーブルを作成するためにユニオン クエリのフィールドをすべて使用する場合は、クエリ デザイン グリッドのユニオン クエリのオブジェクト タブで、アスタリスク (*) をダブルクリックします。

  6. [デザイン] タブの [クエリの種類] グループで [テーブルの作成] をクリックします。

  7. [テーブルの作成] ダイアログ ボックスに、新しいテーブルの名前を入力します。

  8. テーブルを作成する別のデータベースを指定することもできます。

  9. [OK] をクリックします。

  10. [デザイン] タブの [結果] グループで、[実行] をクリックします。

ユニオン クエリを使って完全外部結合を実行する

ユニオン クエリを使用すると、完全外部結合を実行できます。完全外部結合では、結合されたテーブルから返される行が制限されるのではなく、結合フィールドの値に従って行が結合されます。

  1. 完全外部結合に使用するフィールドに対して左外部結合を含むクエリを作成します。

  2. [ホーム] タブの [表示] グループで [表示] をクリックし、[SQL ビュー] をクリックします。

  3. Ctrl キーを押しながら C キーを押して、SQL コードをコピーします。

  4. FROM 句の末尾にあるセミコロンを削除し、Enter キーを押します。

  5. UNIONを入力し、Enter キーを押します。

    注: ユニオン クエリを使って完全外部結合を実行する場合は、ALL キーワードを使わないでください。

  6. Ctrl キーを押しながら V キーを押して、手順 3 でコピーした SQL コードを貼り付けます。

  7. 貼り付けたコードで、LEFT JOINRIGHT JOIN に変更します。

  8. 2 番目の FROM 句の末尾にあるセミコロンを削除し、Enter キーを押します。

  9. FROM 句に指定されている最初のテーブル (左側のテーブル) で、結合フィールドの値が NULL であることを指定する WHERE 句を追加します。

    たとえば、次の FROM 句を使用するとします。

    FROM Products RIGHT JOIN [Order Details] 
    ON Products.ID = [Order Details].[Product ID]

    この場合、次の WHERE 句を追加します。

    WHERE Products.ID IS NULL

  10. ユニオン クエリの末尾であることを示すには、WHERE 句の末尾にセミコロン (;) を入力します。

  11. [デザイン] タブの [結果] で、[実行] をクリックします。
    ユニオン クエリの結果がデータシート ビューに表示されます。

詳細については、クエリでのデータ ソースを結合するを参照してください。

ページの先頭へ

ユニオン クエリの要件と SQL 構文

ユニオン クエリの要件

  • 1 つのユニオン クエリ内で結合される選択クエリの出力フィールドは、同じ数、同じ順序、同じまたは互換性のあるデータ型である必要があります。ユニオン クエリを実行すると、クエリ出力のフィールドの数が各 SELECT ステートメントと同じになるように、対応するフィールドの各セットのデータが 1 つの出力フィールドに結合されます。

    注: ユニオン クエリでは、数値型とテキスト型は互換性があります。

  • ユニオン クエリは SQL 固有のクエリであるため、SQL で直接作成してください。ユニオン クエリなどの SQL 固有のクエリを作成するには、SQL ビューに切り替えます。

ユニオン クエリの SQL 構文

ユニオン クエリでは、各選択クエリ (SELECT ステートメントとも呼ばれる) に次の句が含まれます。

内容

SELECT

取得したいデータが含まれているフィールド

FROM

これらのフィールドが含まれているテーブル

WHERE (省略可能)

これらのフィールドの抽出条件

SELECT ステートメントは UNION キーワードを使って結合します。

ユニオン クエリの基本的な SQL 構文は、次のとおりです。

SELECT field_1[, field_2,…]
FROM table_1[, table_2,…]
UNION [ALL]
SELECT field_a[, field_b,...]
FROM table_a[, table_b,…];

たとえば、データベースに Products という名前のテーブルと Services という名前のテーブルがあるとします。どちらのテーブルにも、製品またはサービスの名前、価格、保証または保証契約の利用可否、および製品またはサービスを排他的に提供するかどうかを含むフィールドがあります。Products テーブルには保証情報が格納され、Services テーブルには保証契約情報が格納されますが、基本情報は同じです (特定の製品やサービスに品質の保証が適用されるかどうか)。次のようなユニオン クエリを使用すると、2 つのテーブルから 4 つのフィールドを結合できます。

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services;

前の構文例を 1 行ずつ見てみましょう。

構文

説明

追加情報

SELECT name, price, warranty_available, exclusive_offer

最初の SELECT 句

SELECT の後には、データの取得元のフィールドを示す識別子のリストが続きます。

SELECT 句には、少なくとも 1 つフィールドを指定してください。

この SELECT 句には、"name"、"price"、"warranty_available"、"exclusive_offer" の各フィールド識別子が指定されています。

FROM Products

最初の FROM 句

FROM 句は SELECT 句に続く句で、この 2 つの句が基本的な SELECT ステートメントを形成します。

FROM の後には、SELECT 句に指定されているフィールドを含むテーブルの識別子のリストが続きます。

FROM 句には、1 つ以上のテーブルを指定してください。

この FROM 句には、テーブル識別子 "Products" が指定されています。

UNION ALL

UNION キーワードとオプションの ALL キーワード

UNION の前の SELECT ステートメントの結果が、UNION の後に続く SELECT ステートメントの結果と結合されます。

ALL キーワードを使用すると、ユニオン クエリの結果から重複する行は削除されません。

ALL キーワードを使うと重複する行の確認が不要になるため、クエリの処理速度が上がります。

次の条件のいずれかに該当する場合は、ALL キーワードを使います。

  • 選択クエリによって、重複する行が作成されないことがわかっている。

  • 結果に重複する行が含まれていてもかまわない。

  • 重複する行を表示したい。

SELECT name, price, guarantee_available, exclusive_offer

2 番目の SELECT 句

一部のルール:

  • 2 番目の SELECT 句には、最初の SELECT 句と同数のフィールドが必要です。

  • 共通のデータを共有するフィールドは、同じ順序で句に指定されることが必要です。

  • 共通のデータを共有するフィールドは、同じまたは互換性のあるデータ型を持つ必要があります。

注: ユニオン クエリの出力におけるフィールド名は、最初の SELECT 句から抽出されます。この例では、フィールド "warranty_available" およびフィールド "guarantee_available" からのデータは、クエリ出力では "warranty_available" という名前になります。

FROM Services

2 番目の FROM 句

ユニオン クエリの FROM 句にはテーブルの制限はありません。各 FROM 句で同じテーブルを使用するユニオン クエリを作成できます。FROM 句のテーブルの数が異なっていてもかまいません。前の例では、各 FROM 句に含まれるテーブルは 1 つだけです。

ページの先頭へ

注: 機械翻訳についての免責事項: この記事の翻訳はコンピューター システムによって行われており、人間の手は加えられていません。マイクロソフトでは、英語を話さないユーザーがマイクロソフトの製品、サービス、テクノロジに関するコンテンツを理解するのに役立てるため、こうした機械翻訳を提供しています。記事は機械翻訳されているため、用語、構文、文法などに誤りがある場合があります。

共有 Facebook Facebook Twitter Twitter メール メール

この情報は役に立ちましたか?

ありがとうございます。その他のフィードバックはありませんか?

改善内容をお聞かせください

ご意見をいただきありがとうございます。

×