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

あるテーブルのレコードを調査するとき、別のテーブルとの比較を行い、対応するレコードが別のテーブルに含まれているかどうかを確認する場合があります。対応するレコードとは、調査の条件に一致するデータが格納されたフィールドを 1 つ以上持つレコードのことです。たとえば、ボーナスの資格がある従業員を特定するために、少なくとも 1 つの受注を処理した従業員の従業員レコードを確認する場合などです。従業員と顧客の打ち合わせを設定するために、従業員の職場と同じ市区町村に住所がある顧客の連絡先情報を確認することなどもできます。

2 つのテーブルを比較して、一致するデータを検索するには、次のいずれかを実行します。

  • 既存のリレーションシップを使用するか、クエリのために作成した結合を使用して、各テーブルの、対応する情報が含まれるフィールドどうしを結合するクエリを作成します。この方法は最適なパフォーマンス (クエリが結果を返す速度) を得ることができますが、データ型が異なるフィールドを結合することはできません。
  • あるフィールドを別のフィールドの抽出条件として使用して、フィールドを比較するクエリを作成します。結合では、基になるテーブルを読み取る前にクエリの結果から行が削除されますが、抽出条件は、基になるテーブルを読み取った後にクエリの結果に適用されるため、通常は、あるフィールドを別のフィールドの抽出条件として使用すると、結合を使用する場合よりも遅くなります。ただし、フィールドをフィールド抽出条件として使用すると、データ型が異なるフィールドを比較できます (結合を使用する場合は比較できません)。

ここでは、2 つのテーブルを比較して一致するデータを識別する方法について説明します。またサンプル データを使用して、その手順の例を示します。

重複するデータとその影響については説明しません。重複するデータの検索、非表示、または削除の詳細については、ヘルプを検索するか、[参照] セクションのリンク先を参照してください。

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


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

結合を使用して 2 つのテーブルを比較するには、両方のテーブルを含む選択クエリを作成します。対応するデータを含むフィールドのテーブルの間に既存のリレーションシップがない場合は、一致を調べるフィールドに基づいて結合を作成します。任意の数の結合を作成できますが、結合されたフィールドの組み合わせはそれぞれ同じか互換性のあるデータ型であることが必要です。

あなたは大学の機関の研究者で、数学科で最近行ったカリキュラムの変更が学生の成績に与えた影響を確認します。特に、数学専攻の学生の成績に関心があります。学生の専攻のデータを格納するテーブルと、クラスの登録のデータを格納するテーブルは既に存在します。成績データは "在籍者" テーブルに格納されており、学生の専攻のデータは "専攻" テーブルに格納されています。数学専攻の学生について、最近カリキュラムを変更してからの成績の変化を確認するには、在籍者テーブルのレコードのうち、専攻テーブルで数学専攻となっている学生のデータを確認する必要があります。

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

この例では、数学科のカリキュラムの変更が、数学科の学生の成績にどのように影響したかを調べるクエリを作成します。2 つのサンプル テーブルを使用します。"専攻" テーブルと "在籍者" テーブルです。この "専攻" テーブルと "在籍者" テーブルをデータベースに追加します。

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

このセクションの手順では、空白のデータシートにデータを手動で入力する方法、サンプル テーブルを Office Excel 2007 にコピーする方法、およびそのテーブルを Access 2007 にインポートする方法について説明します。テキスト データの作成とインポートの詳細については、「テキスト ファイルのデータのインポートとリンクの設定」を参照してください。

専攻
学生 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 リボン イメージ

新しい空のテーブルがデータベースに追加されます。

 メモ   新しい空のテーブルを開く場合は、この手順を実行する必要はありませんが、テーブルをデータベースに追加する場合は、この手順を実行する必要があります。

  1. 見出し行の最初のセルをダブルクリックし、サンプル テーブルにフィールドの名前を入力します。

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

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

  1. 方向キーを使用して、次の空の見出しセルに移動し、2 番目のフィールド名を入力します (新しいセルをダブルクリックして入力することもできます)。フィールド名ごとにこの手順を繰り返します。
  2. サンプル テーブルにデータを入力します。

データを入力すると、Access で各フィールドのデータ型が推測されます。各フィールドには、数値、テキスト、日付/時刻など、特定のデータ型があります。データ型を設定すると、正確なデータが入力されるようになり、計算で電話番号を使用するなどの間違いを防ぐことができます。このサンプル テーブルの場合、Access でデータ型が推測されますが、フィールドごとに推測されたデータ型を確認するようにしてください。

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

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

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

上に示した各サンプル テーブルの名前 ("専攻" など) を使用してください。この記事の、手順について説明しているセクションに示したクエリでも、これらの名前を使用します。

サンプル データの入力が完了したら、2 つのテーブルを比較する準備ができました。

前のセクションのテーブルからサンプル データに基づくワークシートを作成する方法を学習する必要がない場合は、次のセクション (「サンプル ワークシートを作成する」) はスキップしてください。

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

  1. 表計算プログラムを起動し、新しい空のファイルを作成します。Excel を使用する場合は、プログラムを起動したときに、新しい空のブックが既定で作成されます。
  2. 前のセクションから最初のサンプル テーブルをコピーし、最初のワークシートに最初のセルから貼り付けます。見出し行にはサンプル テーブルのフィールド名が含まれているため、見出し行もコピーしてください。
  3. 表計算プログラムで指定されている方法に従って、ワークシートにサンプル テーブルと同じ名前を付けます。たとえば、"在籍者" サンプル データを貼り付ける場合、ワークシートにも "在籍者" という名前を付けます。
  4. 手順 2. ~ 3. を繰り返し、2 番目のサンプル テーブルを空のワークシートにコピーして、ワークシートの名前を変更します。

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

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

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

  1. 新規または既存のデータベースで、次の手順を実行します。

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

Access リボン イメージ

または

[その他] をクリックし、一覧から表計算プログラムを選択します。

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

  1. [参照] をクリックし、前の手順で作成したワークシート ファイルを探して開き、[OK] をクリックします。

ワークシート インポート ウィザードが起動します。

既定では、ブック内の最初のワークシート (前のセクションの手順を実行した場合は "専攻") が選択され、そのワークシートのデータがウィザード ページの下部に表示されます。

  1. [次へ] をクリックします。
  2. ウィザードの次のページで、[先頭行をフィールド名として使う] チェック ボックスをオンにし、[次へ] をクリックします。
  3. 次のページでは、[フィールドのオプション] のテキスト ボックスと一覧を使用してフィールド名とデータ型を変更したり、インポート処理に不要なフィールドを省略することができます。この例では、何も変更する必要はありません。[次へ] をクリックします。
  4. 次のページで、[主キーを設定しない] チェック ボックスをオンにし、[次へ] をクリックします。
  5. 既定では、ワークシートの名前が新しいテーブルに適用されます。[インポート先のテーブル] ボックスの名前をそのまま使用して、[完了] をクリックします。
  6. [インポート操作の保存] ページで、[閉じる] をクリックしてウィザードを完了します。
  7. スプレッドシート ファイルの各ワークシートからテーブルを作成するまで、手順 1. ~ 7. を繰り返します。

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

これで、"在籍者" テーブルと "専攻" テーブルを比較する準備ができました。2 つのテーブル間のリレーションシップを定義していないため、クエリ内の適切なフィールドの間に結合を作成する必要があります。各テーブルには 1 つ以上の共通するフィールドがあるため、共通するフィールド ("在籍者" テーブルの "学生 ID"、"年"、および "カリキュラム"、"専攻" テーブルの "専攻") の組み合わせごとに結合を作成する必要があります。この例では、数学専攻の学生だけに関心があるため、フィールド抽出基準を使用して、クエリ結果を絞り込みます。

  1. サンプル テーブルを保存したデータベースを開きます。
  2. [作成] タブの [その他] で [クエリ デザイン] をクリックします。
  1. [テーブルの表示] ダイアログ ボックスで、表示するレコードを含むテーブル (この例では "在籍者" テーブル) をダブルクリックし、比較するテーブル (この例では "専攻" テーブル) をダブルクリックします。
  2. [テーブルの表示] ダイアログ ボックスを閉じます。
  3. "在籍者" テーブルの "学生 ID" フィールドを、"専攻" テーブルの"学生 ID" フィールドにドラッグします。デザイン グリッドの 2 つのテーブルの間に線が表示され、結合が作成されたことを示します。線をダブルクリックして、[結合プロパティ] ダイアログ ボックスを開きます。
  4. [結合プロパティ] ダイアログ ボックスの 3 つのオプションを確認します。既定では、オプション 1 がオンになっています。場合によっては、結合プロパティを調整して、1 つのテーブルから追加の行を含むように指定する必要があります。一致するデータだけを検索するため、結合の設定はオプション 1 のままにしておきます。[キャンセル] をクリックして [結合プロパティ] ダイアログ ボックスを閉じます。
  5. さらに 2 つの結合を作成する必要があります。"在籍者" テーブルの "年" フィールドを "専攻" テーブルの "年" フィールドにドラッグしてから、"在籍者" テーブルの "カリキュラム" フィールドを "専攻" テーブルの "専攻" フィールドにドラッグして、結合を作成します。
  6. "在籍者" テーブルで、アスタリスク (*) をダブルクリックして、テーブルのすべてのフィールドをクエリ デザイン グリッドに追加します。

 メモ   アスタリスクを使用してすべてのフィールドを追加すると、デザイン グリッドには 1 列だけが表示されます。表示される列のテーブル名には、ピリオド (.) とアスタリスク (*) が付きます。この例では、列は "在籍者.*" という名前になります。

  1. "専攻" テーブルで、"専攻" フィールドをダブルクリックしてグリッドに追加します。
  2. クエリ デザイン グリッドで、[専攻] 列の [表示] 行のチェック ボックスをオフにします。
  3. [専攻] 列の [抽出条件] 行に、「数学」と入力します。
  4. [デザイン] タブの [結果] で [実行] をクリックします。

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

ページの先頭へ ページの先頭へ

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

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

あなたは大学の機関の研究者で、数学科で最近行ったカリキュラムの変更が、学生の成績に与えた影響を確認します。特に、数学専攻の学生の成績に関心があります。"専攻" テーブルと "在籍者" テーブルは既に作成してあります。成績データは "在籍者" テーブルに格納されており、学生の専攻のデータは "専攻" テーブルに格納されています。数学専攻の学生について成績の変化を確認するには、在籍者テーブルのレコードのうち、専攻テーブルで数学専攻となっている学生のレコードを参照する必要があります。ただし、テーブルの比較に使用するフィールドの 1 つのデータ型が、対応するフィールドのデータ型と異なっています。

フィールドを抽出条件として使用して 2 つのテーブルを比較するには、両方のテーブルを含む選択クエリを作成します。表示するフィールドを追加し、抽出条件として使用するフィールドに対応するフィールドも追加します。次に、テーブルを比較するための抽出条件を作成します。フィールドを比較するための抽出条件は、いくつでも作成できます。

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

"専攻" テーブルの "学生 ID" フィールドのデータ型を変更する

  1. サンプル テーブルを保存したデータベースを開きます。
  2. ナビゲーション ウィンドウで "専攻" テーブルを右クリックし、ショートカット メニューの [デザイン ビュー] をクリックします。

"専攻" テーブルがデザイン ビューで開きます。

  1. [データ型] 列で、[学生 ID] の設定を [数値型] から [テキスト型] に変更します。
  2. "専攻" テーブルを閉じます。変更内容を保存するかどうかを求めるメッセージが表示されたら、[はい] をクリックします。

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

次の手順は、"在籍者" テーブルのフィールドを、"専攻" テーブルのフィールドの抽出条件として使用して、2 つの "学生 ID" フィールドを比較する方法を示しています。"Like" キーワードを使用すると、データ型が異なっていても、フィールドを比較できます。

  1. [作成] タブの [その他] で [クエリ デザイン] をクリックします。
  1. [テーブルの表示] ダイアログ ボックスで、[在籍者] をダブルクリックし、[専攻] をダブルクリックします。
  2. [テーブルの表示] ダイアログ ボックスを閉じます。
  3. "在籍者" テーブルの "年" フィールドを "専攻" テーブルの "年" フィールドにドラッグしてから、"在籍者" テーブルの "カリキュラム" フィールドを "専攻" テーブルの "専攻" フィールドにドラッグします。

これらのフィールドのデータ型は同じなので、結合を使用して比較できます。データ型が同じフィールドの場合、比較方法としては、結合の方が適しています。

  1. "在籍者" テーブルで、アスタリスク (*) をダブルクリックして、テーブルのすべてのフィールドをクエリ デザイン グリッドに追加します。

 メモ   アスタリスクを使用してすべてのフィールドを追加すると、デザイン グリッドには 1 列だけが表示されます。表示される列のテーブル名には、ピリオド (.) とアスタリスク (*) が付きます。この例では、列は "在籍者.*" という名前になります。

  1. "専攻" テーブルで、"学生 ID" フィールドをダブルクリックしてグリッドに追加します。
  2. デザイン グリッドの [学生 ID] 列の [表示] 行のチェック ボックスをオフにします。[学生 ID] 列の [抽出基準] 行で、「Like [在籍者].[学生 ID]」と入力します。
  3. "専攻" テーブルで、"専攻" フィールドをダブルクリックしてグリッドに追加します。
  4. デザイン グリッドの [専攻] 列の [表示] 行のチェック ボックスをオフにします。[抽出条件] 行で、「数学」と入力します。
  5. [デザイン] タブの [結果] で [実行] をクリックします。

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

ページの先頭へ ページの先頭へ

 
 
適用対象:
Access 2007