データが一致する 1 つ以上のフィールドを含む別の Access テーブルに対応するレコードがある場合にのみ、1 つの Access テーブルのレコードを確認することがあります。 たとえば、ボーナス受給資格がある従業員を特定するために 1 つ以上の注文を処理した従業員のレコードを確認することができます。 また、直接会合を行う場合に顧客と従業員を適切にマッチングできるように、その従業員と同じ都市に在住の顧客の連絡先情報を確認できます。
2 つの Access テーブルを比較して、一致するデータを検索する必要がある場合は、次のいずれかの方法で行います。
-
既存のリレーションシップを使うか、クエリ用に作成した結合を使って、各テーブルの対応する情報を含むフィールドを結合するクエリを作成します。 この方法では最適なパフォーマンスが得られます (クエリから結果が返される時間が短縮される) が、種類の異なるデータ型を持つフィールドを結合することはできません。
-
一方のフィールドを他のフィールドの基準として使用して、フィールドを比較するクエリを作成します。 基になるテーブルが読み取られる前に結合によってクエリの結果から行が削除されるのに対し、基になるテーブルの読み取り後にクエリの結果に条件が適用されるため、一般に、フィールドを別のフィールドの基準として使用する方が、結合を使用するよりも時間がかかります。 ただし、フィールドをフィールド条件として使用して、異なるデータ型を持つフィールドを比較できます。これは、結合を使用して行うことはできません。
この記事では、一致するデータを識別するために 2 つのテーブルを比較する方法について説明し、手順例で使うことができるサンプル データを提供します。
目的に合ったトピックをクリックしてください
結合を使って 2 つのテーブルを比較する
結合を使って 2 つのテーブルを比較するには、両方のテーブルを含む選択クエリを作成します。 対応するデータを含むフィールドのテーブル間にまだリレーションシップが存在しない場合は、一致を確認するフィールドで結合を作成します。 必要な数だけ結合を作成できますが、結合フィールドの各ペアのデータ型は同じであるか、互換性がある必要があります。
たとえば、大学で企業研究を行っており、数学科における最近のカリキュラム変更が学生の成績にどのような影響を与えたかを確認するとします。 数学専攻の学生の成績に特に関心があります。 学生の専攻データが格納されているテーブルと、授業の登録データが格納されているテーブルは既にあります。 成績データは授業の登録テーブルに格納されており、学生の専攻データは学生の専攻テーブルに格納されています。 最近のカリキュラム変更により、数学専攻の成績がどのように変わったかを調べるには、専攻テーブルの対応するレコードを含む登録テーブルのレコードを確認する必要があります。
サンプル データを準備する
この例では、数学科での最近のカリキュラム変更が数学専攻の学生の成績にどのような影響を与えたかを判断するためのクエリを作成します。 サンプル テーブルとして、学生の専攻と授業の登録という 2 つを使用します。 これら 2 つのサンプル データ (学生の専攻と授業の登録) をデータベースに追加します。
Access では、これらのサンプル テーブルをデータベースに追加する方法がいくつかあります。 データを手動で入力し、各テーブルをスプレッドシート プログラムにコピーし、ワークシートを Accessにインポートするか、メモ帳などのテキスト エディターにデータを貼り付けて、結果のテキスト ファイルからデータをインポートできます。
このセクションの手順では、空白のデータシートに手動でデータを入力する方法を説明します。また、サンプル テーブルを 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 |
スプレッドシート プログラムを使ってサンプル データを入力する場合には、以下のセクションをスキップできます。
サンプル データを手動で入力する
-
新規または既存のデータベースを開きます。
-
[作成] タブの [テーブル] で、[テーブル] をクリックします。
Access により、データベースに空のテーブルが新規に追加されます。
注: 空の新規データベースが開かれている場合は、この手順は必要ありませんが、データベースにテーブルを追加する必要があるときは必ずこの手順どおりに行います。
-
見出し行の先頭のセルをダブルクリックしてから、サンプル テーブルのフィールド名を入力します。
Access の既定では、見出し行の空のフィールドには、次のように、[新しいフィールドの追加] というテキストが表示されています。
-
方向キーを使用して次の空白のヘッダー セルに移動し、2 番目のフィールド名を入力します。 (新しいセルをダブルクリックすることもできます)。 フィールド名ごとにこの手順を繰り返します。
-
サンプル テーブルにデータを入力します。
データを入力する際、各フィールドのデータ型を Access が予測します。 各フィールドには、数値、文字列、日付/時刻などの特定のデータ型があります。 データ型を設定すると、データを正確に入力できるだけでなく、計算で電話番号を使用する場合など、誤入力を防ぐことができます。 これらのサンプル テーブルの場合、Access でデータ型を予測できますが、Access が予測した各フィールドのデータ型は必ず確認してください。
-
データの入力が終わったら、[保存] をクリックするか、Ctrl キーを押しながら S キーを押します。
[名前を付けて保存] ダイアログ ボックスが表示されます。
-
[テーブル名] ボックスに、サンプル テーブルの名前を入力し、[OK] をクリックします。
各サンプル テーブルの名前 (学生の専攻など) を使用してください。この名前は、この記事の手順セクションのクエリでも使用します。
サンプル データの入力が終わったら、2 つのテーブルを比較できます。
前のセクションに示されているテーブルのサンプル データに基づくワークシートの作成方法を確認する必要がない場合は、以下のセクション (サンプル ワークシートを作成する) をスキップしてください。
サンプル ワークシートを作成する
-
スプレッドシート プログラムを開始して、新しい空のファイルを作成します。 Excel を使う場合は、プログラムの開始時に既定で新しい空白のブックが作成されます。
-
前のセクションの 最初のサンプル テーブル をコピーし、最初のセルから始まる最初のワークシートに貼り付けます。 ヘッダー行には、サンプル テーブルのフィールド名が含まれているため、必ずコピーしてください。
-
スプレッドシート プログラムで提供される方法を使えば、ワークシートをサンプル テーブルと同じ名前にすることができます。 たとえば、授業の登録サンプル データを貼り付ける場合は、ワークシートに授業の登録という名前を付けます。
-
手順 2 と 3 を繰り返し、2 つ目のサンプル テーブルを空のワークシートにコピーして、ワークシートの名前を変更します。
注: スプレッドシート ファイルにワークシートを追加する必要がある場合があります。 スプレッドシート ファイルにワークシートを追加する方法については、スプレッドシート プログラムのヘルプを参照してください。
-
ブックをコンピューター上またはネットワーク上の便利な場所に保存して、次の手順に進みます。
ワークシートからデータベース テーブルを作成する
-
新規または既存のデータベースで、次の操作を行います。
[外部データ] タブの [インポート] で、[Excel] をクリックします。
または
[その他] をクリックして、一覧からスプレッドシート プログラムを選択します。
[外部データの取り込み - プログラム名スプレッドシート] ダイアログ ボックスが表示されます。
-
[参照] をクリックし、上の手順で作成したスプレッドシート ファイルを見つけて開き、[OK] をクリックします。
スプレッドシート インポート ウィザードが起動します。
ウィザードは既定でワークブックの 1 つ目のワークシート (上のセクションの手順に従った場合は [学生の専攻]) を選び、ワークシートのデータがウィザード ページの下側に表示されます。
-
[次へ] をクリックします。
-
ウィザードの次のページで、[最初の行に列ヘッダーが含まれている] チェック ボックスをオンにしてから、[次へ] をクリックします。
-
次のページでは、[フィールド オプション] のテキスト ボックスとリストを使って、フィールド名とデータ型を変更したり、インポート操作からフィールドを除外したりすることができます。 この例では、何も変更する必要はありません。 [次へ] をクリックします。
-
次のページで、[主キーを設定しない] オプションを選んでから [次へ] をクリックします。
-
Access では既定でワークシートの名前が新しいテーブルに適用されます。 [インポート先のテーブル] ボックスの名前をそのまま受け入れてから、[完了] をクリックします。
-
[インポート操作の保存] ページで、[閉じる] をクリックしてウィザードを終了します。
-
手順 1 から 7 を繰り返して、スプレッドシート ファイルの各ワークシートからテーブルを作成します。
結合を使ってサンプル テーブルを比較して、一致するレコードを検索する
これで、学生の専攻テーブルと授業の登録テーブルを比較する準備が整いました。 2 つのテーブル間のリレーションシップが定義されていないために、クエリで適切なフィールド間の結合を作成する必要があります。 テーブルには共通のフィールドが複数あり、[生徒 ID]、[年]、および [カリキュラム] (授業の登録テーブル) および [専攻] (学生の専攻テーブル) という共通フィールドのペアごとに結合を作成する必要があります。 この例では、関心があるのは数学専攻のみであるため、フィールド抽出条件を使ってクエリ結果の制限も行います。
-
サンプル テーブルを保存したデータベースを開きます。
-
[作成] タブで [クエリ デザイン] をクリックします。
-
表示するレコードを含むテーブル (この例では クラス登録 テーブル) をダブルクリックし、比較するテーブルをダブルクリックします。この例では、 Student Majors テーブルです。
-
[学生 ID] フィールドを [クラス登録] テーブルから [学生の専攻] テーブルの [学生 ID] フィールドにドラッグします。 デザイン グリッド内の 2 つのテーブルの間に、結合が作成されたことを示す線が表示されます。 行をダブルクリックして、[ 結合プロパティ ] ダイアログ ボックスを開きます。
-
[結合プロパティ] ダイアログ ボックスで 3 つのオプションを確認します。 既定では、オプション 1 が選択されます。 場合によっては、1 つのテーブルから行を追加するために結合プロパティを調整する必要があります。 ここでは一致するデータのみを検索しようとしているため、オプション 1 に設定されている結合はそのままにしておきます。 [キャンセル] をクリックして、[結合プロパティ] ダイアログ ボックスを閉じます。
-
その他の 2 つの結合を作成する必要があります。 これらの結合を作成するには、[授業の登録] テーブルの [年] フィールドを [学生の専攻] テーブルの [年] フィールドにドラッグしてから、[授業の登録] テーブルの [カリキュラム] フィールドを [学生の専攻] テーブルの [専攻] フィールドにドラッグします。
-
[授業の登録] テーブルで、アスタリスク (*) をダブルクリックし、テーブルのすべてのフィールドをクエリ デザイン グリッドに追加します。
注: アスタリスクを使用してすべてのフィールドを追加すると、デザイン グリッドに表示される列は 1 つだけです。 表示される列には、テーブルの名前とピリオド (.) が続きます。 とアスタリスク (*)。 この例では、列の名前は Class Enrollments.*です。
-
[学生の専攻] テーブルで、[専攻] フィールドをダブルクリックしてグリッドに追加します。
-
クエリ デザイン グリッドの [専攻] 列の [表示] 行でチェック ボックスをオフにします。
-
[専攻] 列の [抽出条件] 行に、「数学」と入力します。
-
[デザイン] タブの [結果] グループで、[実行] をクリックします。
クエリが実行され、数学専攻の数学の成績のみが表示されます。
抽出条件としてフィールドを使って 2 つのテーブルを比較する
データは一致するものの、データ型が異なるフィールドに基づいてテーブルを比較する場合があります。 たとえば、あるテーブルのフィールドが数値データ型で、そのフィールドと、テキスト データ型の別のテーブルのフィールドと比較する場合があります。 設計上の理由または別の理由 (別のプログラムからデータをインポートするなど) で、数値がテキストとして格納されると、フィールドに含まれるデータは類似しているものの、フィールドの種類が異なる場合があります。 異なるデータ型を持つフィールド間では結合を作成できないため、別の方法を使ってフィールドを比較する必要があります。 データ型が異なる 2 つのフィールドを比較するには、一方のフィールドをもう一方の抽出条件として使います。
たとえば、大学で企業研究を行っており、数学科における最近のカリキュラム変更が学生の成績にどのような影響を与えたかを確認するとします。 数学専攻の学生の成績に特に関心があります。 学生の専攻テーブルと授業の登録テーブルは既にあります。 成績データは授業の登録テーブルに格納されており、学生の専攻データは学生の専攻テーブルに格納されています。 数学専攻の成績がどのように変わったかを調べるには、専攻テーブルの対応するレコードを含む登録テーブルのレコードを確認する必要があります。 ただし、テーブルの比較に使用するフィールドの一方のデータ型は、もう一方のものとは異なります。
抽出条件としてフィールドを使って 2 つのテーブルを比較するには、両方のテーブルを含む選択クエリを作成します。 その場合、表示するフィールドを含め、抽出条件として使うフィールドに対応するフィールドも含めます。 次に、テーブルを比較するための抽出条件を作成します。 フィールドを比較するための抽出条件は必要なだけ作成することができます。
この方法を説明するために、前のセクションのサンプル テーブルを使いますが、サンプルの [学生の専攻] テーブルの [生徒 ID] フィールドのデータ型は数値からテキストに変更します。 データ型が異なる 2 つのフィールド間には結合を作成できないため、一方のフィールドをもう一方の抽出条件として使って 2 つの [生徒 ID] フィールドを比較する必要があります。
[学生の専攻] の [生徒 ID] フィールドのデータ型を変更する
-
サンプル テーブルを保存したデータベースを開きます。
-
ナビゲーション ウィンドウで [学生の専攻] テーブルを右クリックしてから、ショートカット メニューの [デザイン ビュー] をクリックします。
デザイン ビューで [学生の専攻] テーブルを開きます。
-
[データ型] 列で、[生徒 ID] の設定を [数値] から [テキスト] に変更します。
-
[学生の専攻] テーブルを閉じます。 変更の保存を求められたら、[はい] をクリックします。
フィールド抽出条件を使ってサンプル テーブルを比較して、一致するレコードを検索する
以下の手順では、[学生の専攻] のフィールドの抽出条件として [授業の登録] のフィールドを使って、2 つの [生徒 ID] フィールドを比較する方法を説明します。 Like キーワードを使えば、データ型が異なるフィールドでも比較することができます。
-
[作成] タブの [その他] グループで、[クエリ デザイン] をクリックします。
-
[ クラスの登録] をダブルクリックし、[ 学生の専攻] をダブルクリックします。
-
[授業の登録] テーブルの [年] フィールドを [学生の専攻] テーブルの [年] フィールドにドラッグしてから、[授業の登録] テーブルの [カリキュラム] フィールドを [学生の専攻] テーブルの [専攻] フィールドにドラッグします。 これらのフィールドのデータ型は同じであるため、結合を使って比較できます。 結合は、同じデータ型のフィールドを比較するのに適した方法です。
-
[授業の登録] テーブルのアスタリスク (*) をダブルクリックして、そのテーブルのすべてのフィールドをクエリ デザイン グリッドに追加します。
注: アスタリスクを使用してすべてのフィールドを追加すると、デザイン グリッドに表示される列は 1 つだけです。 表示される列には、テーブルの名前とピリオド (.) が続きます。 とアスタリスク (*)。 この例では、列の名前は Class Enrollments.*です。
-
[学生の専攻] テーブルで、[生徒 ID] フィールドをダブルクリックしてグリッドに追加します。
-
デザイン グリッドの [生徒 ID] 列の [表示] 行でチェック ボックスをオフにします。 [生徒 ID] 列の [抽出条件] 行に、「Like [授業の登録].[生徒 ID]」と入力します。
-
[学生の専攻] テーブルで、[専攻] フィールドをダブルクリックしてグリッドに追加します。
-
デザイン グリッドの [専攻] 列の [表示] 行でチェック ボックスをオフにします。 [抽出条件] 行に、「数学」と入力します。
-
[デザイン] タブの [結果] グループで、[実行] をクリックします。
クエリが実行され、数学専攻の数学の成績のみが表示されます。