2 つのテーブルを比較して一致するデータだけを検索する

データが一致する 1 つ以上のフィールドを含む別の Access テーブルに対応するレコードがある場合にのみ、1 つの Access テーブルのレコードを確認することがあります。たとえば、ボーナス受給資格がある従業員を特定するために 1 つ以上の注文を処理した従業員のレコードを確認することができます。また、直接会合を行う場合に顧客と従業員を適切にマッチングできるように、その従業員と同じ都市に在住の顧客の連絡先情報を確認できます。

2 つの Access テーブルを比較して、一致するデータを検索する必要がある場合は、次のいずれかの方法で行います。

  • 既存のリレーションシップを使うか、クエリ用に作成した結合を使って、各テーブルの対応する情報を含むフィールドを結合するクエリを作成します。この方法では最適なパフォーマンスが得られます (クエリから結果が返される時間が短縮される) が、種類の異なるデータ型を持つフィールドを結合することはできません。

  • 一方のフィールドをもう一方のフィールドの抽出条件として使ってフィールドを比較するクエリを作成します。一方のフィールドをもう一方のフィールドの抽出条件として使うと、通常は、結合を使う場合より時間がかかります。これは、結合では基になるテーブルが読み取られる前にクエリ結果から行が除去されるのに対して、抽出条件は基になるテーブルが読み取られた後でクエリ結果に適用されるためです。ただし、フィールド抽出条件としてフィールドを使えば、結合を使って比較できない種類の異なるデータ型を持つフィールドを比較することができます。

この記事では、一致するデータを識別するために 2 つのテーブルを比較する方法について説明し、手順例で使うことができるサンプル データを提供します。

目的に合ったトピックをクリックしてください

結合を使って 2 つのテーブルを比較する

抽出条件としてフィールドを使って 2 つのテーブルを比較する

結合を使って 2 つのテーブルを比較する

結合を使って 2 つのテーブルを比較するには、両方のテーブルを含む選択クエリを作成します。対応するデータを含むフィールドのテーブル間にまだリレーションシップが存在しない場合は、一致を確認するフィールドで結合を作成します。必要な数だけ結合を作成できますが、結合フィールドの各ペアのデータ型は同じであるか、互換性がある必要があります。

たとえば、大学で企業研究を行っており、数学科における最近のカリキュラム変更が学生の成績にどのような影響を与えたかを確認するとします。数学専攻の学生の成績に特に関心があります。学生の専攻データが格納されているテーブルと、授業の登録データが格納されているテーブルは既にあります。成績データは授業の登録テーブルに格納されており、学生の専攻データは学生の専攻テーブルに格納されています。最近のカリキュラム変更により、数学専攻の成績がどのように変わったかを調べるには、専攻テーブルの対応するレコードを含む登録テーブルのレコードを確認する必要があります。

サンプル データを準備する

この例では、数学科での最近のカリキュラム変更が数学専攻の学生の成績にどのような影響を与えたかを判断するためのクエリを作成します。サンプル テーブルとして、学生の専攻と授業の登録という 2 つを使用します。これら 2 つのサンプル データ (学生の専攻と授業の登録) をデータベースに追加します。

Microsoft Office Access 2007 では、これらのサンプル テーブルを複数の方法でデータベースに追加できます。データを手動で入力したり、各テーブルをスプレッドシート プログラム (Microsoft Office Excel 2007 など) にコピーして、ワークシートを Office Access 2007 にインポートできます。また、データをメモ帳などのテキスト エディターに貼り付けて、作成したテキスト ファイルからデータをインポートすることもできます。

このセクションの手順では、空白のデータシートに手動でデータを入力する方法を説明します。また、サンプル テーブルを Excel にコピーしてから、Access にインポートする方法についても説明します。

学生の専攻

生徒 ID

専攻

123456789

2005

数学

223334444

2005

英文学

987654321

2005

数学

135791357

2005

史学

147025836

2005

生物学

707070707

2005

数学

123456789

2006

数学

223334444

2006

英文学

987654321

2006

心理学

135791357

2006

美術史

147025836

2006

生物学

707070707

2006

数学

授業の登録

生徒 ID

期間

カリキュラム

コース番号

成績

123456789

2005

3

数学

221

A

123456789

2005

3

英文学

101

B

123456789

2006

1

数学

242

C

123456789

2006

1

数学

224

C

223334444

2005

3

英文学

112

A

223334444

2005

3

数学

120

C

223334444

2006

1

政治学

110

A

223334444

2006

1

英文学

201

B

987654321

2005

3

数学

120

A

987654321

2005

3

心理学

101

A

987654321

2006

1

数学

221

B

987654321

2006

1

数学

242

C

135791357

2005

3

史学

102

A

135791357

2005

3

美術史

112

A

135791357

2006

1

数学

120

B

135791357

2006

1

数学

141

C

147025836

2005

3

生物学

113

B

147025836

2005

3

化学

113

B

147025836

2006

1

数学

120

D

147025836

2006

1

統計学

114

B

707070707

2005

3

数学

221

B

707070707

2005

3

統計学

114

A

707070707

2006

1

数学

242

D

707070707

2006

1

数学

224

C

スプレッドシート プログラムを使ってサンプル データを入力する場合には、以下のセクションをスキップできます。

サンプル データを手動で入力する

  1. 新規または既存のデータベースを開きます。

  2. [作成] タブの [テーブル] で、[テーブル] をクリックします。

    Access のリボンの画像

    Access により、データベースに空のテーブルが新規に追加されます。

    注: 空の新規データベースが開かれている場合は、この手順は必要ありませんが、データベースにテーブルを追加する必要があるときは必ずこの手順どおりに行います。

  3. 見出し行の先頭のセルをダブルクリックしてから、サンプル テーブルのフィールド名を入力します。

    Access の既定では、見出し行の空のフィールドには、次のように、[新しいフィールドの追加] というテキストが表示されています。

    データシートの新しいフィールド

  4. 矢印キーを使って、次の空の見出しセルに移動してから、2 つ目のフィールド名を入力します (新しいセルをダブルクリックしてもかまいません)。フィールド名ごとにこの手順を繰り返します。

  5. サンプル テーブルにデータを入力します。

    データを入力する際、各フィールドのデータ型を Access が予測します。各フィールドには、数値、文字列、日付/時刻などの特定のデータ型があります。データ型を設定すると、データを正確に入力できるだけでなく、計算で電話番号を使用する場合など、誤入力を防ぐことができます。これらのサンプル テーブルの場合、Access でデータ型を予測できますが、Access が予測した各フィールドのデータ型は必ず確認してください。

  6. データの入力が終わったら、[保存] をクリックするか、Ctrl キーを押しながら S キーを押します。

    [名前を付けて保存] ダイアログ ボックスが表示されます。

  7. [テーブル名] ボックスに、サンプル テーブルの名前を入力し、[OK] をクリックします。

    各サンプル テーブルの名前 (学生の専攻など) を使用してください。この名前は、この記事の手順セクションのクエリでも使用します。

サンプル データの入力が終わったら、2 つのテーブルを比較できます。

前のセクションに示されているテーブルのサンプル データに基づくワークシートの作成方法を確認する必要がない場合は、以下のセクション (サンプル ワークシートを作成する) をスキップしてください。

サンプル ワークシートを作成する

  1. スプレッドシート プログラムを開始して、新しい空のファイルを作成します。Excel を使う場合は、プログラムの開始時に既定で新しい空白のブックが作成されます。

  2. 前のセクションの最初のサンプル テーブルをコピーし、最初のワークシートの先頭のセルから始まるセル範囲に貼り付けます。必ず、見出し行をコピーしてください。これにはサンプル テーブルのフィールド名が含まれています。

  3. スプレッドシート プログラムで提供される方法を使えば、ワークシートをサンプル テーブルと同じ名前にすることができます。たとえば、授業の登録サンプル データを貼り付ける場合は、ワークシートに授業の登録という名前を付けます。

  4. 手順 2 と 3 を繰り返し、2 つ目のサンプル テーブルを空のワークシートにコピーして、ワークシートの名前を変更します。

    注: スプレッドシート ファイルにワークシートを追加する必要がある場合があります。スプレッドシート ファイルにワークシートを追加する方法については、スプレッドシート プログラムのヘルプを参照してください。

  5. ブックをコンピューター上またはネットワーク上の便利な場所に保存して、次の手順に進みます。

ワークシートからデータベース テーブルを作成する

  1. 新規または既存のデータベースで、次の操作を行います。

    [外部データ] タブの [インポート] で、[Excel] をクリックします。

    Access のリボンの画像

    - または -

    [その他] をクリックして、一覧からスプレッドシート プログラムを選びます。

    [外部データの取り込み - プログラム名スプレッドシート] ダイアログ ボックスが表示されます。

  2. [参照] をクリックし、上の手順で作成したスプレッドシート ファイルを見つけて開き、[OK] をクリックします。

    スプレッドシート インポート ウィザードが起動します。

    ウィザードは既定でワークブックの 1 つ目のワークシート (上のセクションの手順に従った場合は [学生の専攻]) を選び、ワークシートのデータがウィザード ページの下側に表示されます。

  3. [次へ] をクリックします。

  4. ウィザードの次のページで、[最初の行に列ヘッダーが含まれている] チェック ボックスをオンにしてから、[次へ] をクリックします。

  5. 次のページでは、[フィールド オプション] のテキスト ボックスとリストを使って、フィールド名とデータ型を変更したり、インポート操作からフィールドを除外したりすることができます。この例では、何も変更する必要はありません。[次へ] をクリックします。

  6. 次のページで、[主キーを設定しない] オプションを選んでから [次へ] をクリックします。

  7. Access では既定でワークシートの名前が新しいテーブルに適用されます。[インポート先のテーブル] ボックスの名前をそのまま受け入れてから、[完了] をクリックします。

  8. [インポート操作の保存] ページで、[閉じる] をクリックしてウィザードを終了します。

  9. 手順 1 から 7 を繰り返して、スプレッドシート ファイルの各ワークシートからテーブルを作成します。

結合を使ってサンプル テーブルを比較して、一致するレコードを検索する

これで、学生の専攻テーブルと授業の登録テーブルを比較する準備が整いました。2 つのテーブル間のリレーションシップが定義されていないために、クエリで適切なフィールド間の結合を作成する必要があります。テーブルには共通のフィールドが複数あり、[生徒 ID]、[年]、および [カリキュラム] (授業の登録テーブル) および [専攻] (学生の専攻テーブル) という共通フィールドのペアごとに結合を作成する必要があります。この例では、関心があるのは数学専攻のみであるため、フィールド抽出条件を使ってクエリ結果の制限も行います。

  1. サンプル テーブルを保存したデータベースを開きます。

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

  3. [テーブルの表示] ダイアログ ボックスで、表示するレコードを含むテーブル (この例では、[授業の登録] テーブル) をダブルクリックします。次に、比較するテーブル (この例では、[学生の専攻] テーブル) をダブルクリックします。

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

  5. [授業の登録] テーブルの [生徒 ID] フィールドを [学生の専攻] テーブルの [生徒 ID] フィールドにドラッグします。デザイン グリッドの 2 つのテーブル間に線が表示されます。これは、結合が作成されたことを示します。その線をダブルクリックして、[結合プロパティ] ダイアログ ボックスを開きます。

  6. [結合プロパティ] ダイアログ ボックスで 3 つのオプションを確認します。既定では、オプション 1 が選択されます。場合によっては、1 つのテーブルから行を追加するために結合プロパティを調整する必要があります。ここでは一致するデータのみを検索しようとしているため、オプション 1 に設定されている結合はそのままにしておきます。[キャンセル] をクリックして、[結合プロパティ] ダイアログ ボックスを閉じます。

  7. その他の 2 つの結合を作成する必要があります。これらの結合を作成するには、[授業の登録] テーブルの [] フィールドを [学生の専攻] テーブルの [] フィールドにドラッグしてから、[授業の登録] テーブルの [カリキュラム] フィールドを [学生の専攻] テーブルの [専攻] フィールドにドラッグします。

  8. [授業の登録] テーブルで、アスタリスク (*) をダブルクリックし、テーブルのすべてのフィールドをクエリ デザイン グリッドに追加します。

    注: アスタリスクを使ってすべてのフィールドを追加する場合、デザイン グリッドには列が 1 つだけ表示されます。表示される列には、テーブル名の後にピリオド (.) とアスタリスク (*) が示されます。この例の場合、列名は、授業の登録.* となります。

  9. [学生の専攻] テーブルで、[専攻] フィールドをダブルクリックしてグリッドに追加します。

  10. クエリ デザイン グリッドの [専攻] 列の [表示] 行でチェック ボックスをオフにします。

  11. [専攻] 列の [抽出条件] 行に、「数学」と入力します。

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

    クエリが実行され、数学専攻の数学の成績のみが表示されます。

ページの先頭へ

抽出条件としてフィールドを使って 2 つのテーブルを比較する

データは一致するものの、データ型が異なるフィールドに基づいてテーブルを比較する場合があります。たとえば、あるテーブルのフィールドが数値データ型で、そのフィールドと、テキスト データ型の別のテーブルのフィールドと比較する場合があります。設計上の理由または別の理由 (別のプログラムからデータをインポートするなど) で、数値がテキストとして格納されると、フィールドに含まれるデータは類似しているものの、フィールドの種類が異なる場合があります。異なるデータ型を持つフィールド間では結合を作成できないため、別の方法を使ってフィールドを比較する必要があります。データ型が異なる 2 つのフィールドを比較するには、一方のフィールドをもう一方の抽出条件として使います。

たとえば、大学で企業研究を行っており、数学科における最近のカリキュラム変更が学生の成績にどのような影響を与えたかを確認するとします。数学専攻の学生の成績に特に関心があります。学生の専攻テーブルと授業の登録テーブルは既にあります。成績データは授業の登録テーブルに格納されており、学生の専攻データは学生の専攻テーブルに格納されています。数学専攻の成績がどのように変わったかを調べるには、専攻テーブルの対応するレコードを含む登録テーブルのレコードを確認する必要があります。ただし、テーブルの比較に使用するフィールドの一方のデータ型は、もう一方のものとは異なります。

抽出条件としてフィールドを使って 2 つのテーブルを比較するには、両方のテーブルを含む選択クエリを作成します。その場合、表示するフィールドを含め、抽出条件として使うフィールドに対応するフィールドも含めます。次に、テーブルを比較するための抽出条件を作成します。フィールドを比較するための抽出条件は必要なだけ作成することができます。

この方法を説明するために、前のセクションのサンプル テーブルを使いますが、サンプルの [学生の専攻] テーブルの [生徒 ID] フィールドのデータ型は数値からテキストに変更します。データ型が異なる 2 つのフィールド間には結合を作成できないため、一方のフィールドをもう一方の抽出条件として使って 2 つの [生徒 ID] フィールドを比較する必要があります。

[学生の専攻] の [生徒 ID] フィールドのデータ型を変更する

  1. サンプル テーブルを保存したデータベースを開きます。

  2. ナビゲーション ウィンドウで [学生の専攻] テーブルを右クリックしてから、ショートカット メニューの [デザイン ビュー] をクリックします。

    デザイン ビューで [学生の専攻] テーブルを開きます。

  3. [データ型] 列で、[生徒 ID] の設定を [数値] から [テキスト] に変更します。

  4. [学生の専攻] テーブルを閉じます。変更の保存を求められたら、[はい] をクリックします。

フィールド抽出条件を使ってサンプル テーブルを比較して、一致するレコードを検索する

以下の手順では、[学生の専攻] のフィールドの抽出条件として [授業の登録] のフィールドを使って、2 つの [生徒 ID] フィールドを比較する方法を説明します。Like キーワードを使えば、データ型が異なるフィールドでも比較することができます。

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

  2. [テーブルの表示] ダイアログ ボックスで、[授業の登録] をダブルクリックしてから [学生の専攻] をダブルクリックします。

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

  4. [授業の登録] テーブルの [] フィールドを [学生の専攻] テーブルの [] フィールドにドラッグしてから、[授業の登録] テーブルの [カリキュラム] フィールドを [学生の専攻] テーブルの [専攻] フィールドにドラッグします。これらのフィールドのデータ型は同じであるため、結合を使って比較できます。結合は、同じデータ型のフィールドを比較するのに適した方法です。

  5. [授業の登録] テーブルのアスタリスク (*) をダブルクリックして、そのテーブルのすべてのフィールドをクエリ デザイン グリッドに追加します。

    注: アスタリスクを使ってすべてのフィールドを追加する場合、デザイン グリッドには列が 1 つだけ表示されます。表示される列には、テーブル名の後にピリオド (.) とアスタリスク (*) が示されます。この例の場合、列名は、授業の登録.* となります。

  6. [学生の専攻] テーブルで、[生徒 ID] フィールドをダブルクリックしてグリッドに追加します。

  7. デザイン グリッドの [生徒 ID] 列の [表示] 行でチェック ボックスをオフにします。[生徒 ID] 列の [抽出条件] 行に、「Like [授業の登録].[生徒 ID]」と入力します。

  8. [学生の専攻] テーブルで、[専攻] フィールドをダブルクリックしてグリッドに追加します。

  9. デザイン グリッドの [専攻] 列の [表示] 行でチェック ボックスをオフにします。[抽出条件] 行に、「数学」と入力します。

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

    クエリが実行され、数学専攻の数学の成績のみが表示されます。

ページの先頭へ

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

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

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

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

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

×