<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
  MS-Access2000超入門部屋--いろいろなクエリ
 [はじめに] [AND条件] [OR条件] [または] [パラメータ] [〜以上] [〜の間] [あいまい] [YesNo] [条件組合わせ] [複数テーブル] 
 [並べ替え] [トップ値] [集計] [「週」で集計] [クロス集計]



■複数のテーブルをくっつけて作るクエリ

Accessに限らず、昨今の「データベース」と呼ばれるものの中には、「テーブルを小分けする」考え方が根付いています。

別に何か決まりがあるわけじゃないんですが、「顧客」のデータはまとめてひとつのテーブルに、「商品」のデータはまとめてひとつのテーブルに・・・という形で、内容によって分けてデータをためていくようにテーブルの設計をするのが、Accessを使う上でのひとつのポイントですね。

で、「こっちのテーブルに顧客の住所や電話番号があって、こっちのテーブルに今月の売上のデータがあるんだけどー」という場合は、クエリでくっつけます。
作り始めるときに、くっつけたいテーブルを全部選べばいいんですけど、クエリ作り始めて途中でテーブルを追加したいときは、ツールバーの「テーブルの表示」ボタンをクリックします。
と、テーブルの一覧が出てきますので、追加したいテーブルを選びます。

こんな感じで、多分自動的に「関連するフィールド」同士を結び付けてくれてると思います。
線が出ない場合は、多分、両方のテーブルの関連性が、Accessにはわからなかった、ということでしょう。ほんとは、自動的に線が出てくれるのが理想的なんですけど、そういう構造でないテーブルを作っちゃったって場合もありますよね。

その場合は、片方から片方に、フィールド名をドラッグしてやります。
もし、結合線が自動的に出なかったら・・・ってお話ですよ。出てる場合はそのままでよいです。



結合線、ふつうの黒い線ですよね。
この状態だと、「ふたつのテーブルの両方に存在する社員番号のレコードだけ取ってくる」ことになります。

たとえば、社員テーブルには登録してないけど、臨時雇いみたいな感じの人が売り上げた伝票は出てこないし、あるいは今月1回も何も売れなかった人も、名前も出てきません。
それじゃ困る・・・という場合もあるかもしれませんね。
結合線をダブルクリックすると、両方のテーブルのくっつきかたを調べることができます。

1番は今の状態。
2番は、とりあえず売上があってもなくても、社員テーブルに登録されている人なら、売上のとこは空っぽの常態でいいから出す。
3番は、社員テーブルに登録されてない社員でもいいから、とりあえず名なしで所属ナシでいいから、売上金額だけ出す。

みたいな感じの、微妙な違いが出ます。
両方とも入ってるデータが同じなら問題ないですけどね。
これはケースバイケースで、すごく重要になってくるところだと思います。

で、あとは、両方のテーブルから、必要なフィールドを選び出してやればいい、ということになりますね。

と、こんな感じ・・・おや、「社員番号順」に並んでるみたいですね。こっちに主導権あり、と見なしているみたいですね。Accessは・・・。

「社員番号」って、両方のテーブルにありますよね・・・どっちから選んでも同じなのかな・・・。

上の結合の状態のうちの、1番のパターンなら、どっちから選んでも同じようなもんです。
レコード件数の少ない方のテーブルから選ぶ方がよいかな・・・。

2番の状態なら、社員テーブルから取るといいでしょう。
3番の状態なら、売上明細のテーブルから取ってくるといいでしょう。

別にエラーになるとかそういうわけじゃないですけど、2番の場合、もし、仮に、売上明細テーブルの方にその社員の人のレコードがなかったら・・・。社員番号のとこ、空欄になっちゃうと思いません?ヘンですよね。それだと・・。

複雑なクエリになると、この辺もいろいろ考えなくちゃいけなくなりそうですね。