データベースを構築する中で、データの混在による煩雑化を防ぐために、フィールド構成が同様でも敢えてテーブルを分割して作成することがあります。しかしながら、これらテーブル間のレコードを合算して処理する必要性が出てくる場合もあります。このような時にはユニオンクエリを作成することで問題を解決できます。
サンプルデータについて
例えば、顧客管理データベースとしてそれぞれの店舗用にテーブルを作成しているとします。今回の例では、A支店で「ユニオンテーブル1」を、B支店で「ユニオンテーブル2」を扱っているとし、それぞれのテーブルは表1に示す構造とします。
表1 ユニオンテーブルの構造
フィールド名 | データ型 |
氏名 | 短いテキスト |
生年月日 | 日付/時刻型 |
性別 | 短いテキスト |
次に、各テーブルには表2と表3に示す顧客情報が保存されているとします。
表2 ユニオンテーブル1に保存されている顧客情報(サンプル)
氏名 | 生年月日 | 性別 |
佐藤 花子 | 1975/04/01 | 女 |
山田 一郎 | 1988/05/07 | 男 |
渡部 敦夫 | 1962/01/07 | 男 |
表3 ユニオンテーブル2に保存されている顧客情報(サンプル)
氏名 | 生年月日 | 性別 |
松島 楓 | 2001/12/17 | 女 |
渡部 敦夫 | 1962/01/07 | 男 |
さて、このようなレコードが存在する中で、全店舗の顧客情報を集約する方法として、ユニオンクエリが有効な手段になります。
SQL文入力画面の表示方法
Accessではユニオンクエリを作成してくれるウィザードがありません。そのため、SQL文を入力する必要があります。まず、「作成」タブぼ「クエリデザイン」アイコンをクリックします。
続いて、「テーブルの表示」画面でテーブルは選択せずに「閉じる」をクリックします。
この状態で、「デザイン」タブの「SQL」アイコンをクリックします。すると、画面が切り替わり、SQL文を直接入力できるようになります。
ユニオンクエリの作成
さて、ここまででSQL文を直接入力することができるようになりました。そこで、画面に以下のSQL文を入力します。
SELECT * FROM ユニオンテーブル1
UNION
SELECT * FROM ユニオンテーブル2;
これは、2つのSELECT文を「UNION」でつないでいます。そして、画面左上の「表示」アイコンをクリックしてデータシートビューに切り替えると、図4に示す結果が得られます。
上記のSQL文では、ユニオンテーブル1とユニオンテーブル2の全てのレコードを、全フィールド(それぞれのフィールドが型式を含めて一致していることがポイント)で出力するという意味です。このため、結果はそれぞれのテーブルに登録されている顧客情報が出力されています。ただし、「渡部 敦夫」については、各テーブルで同一のデータが保持されているため、Access内でも同一データとして認識され、1つだけのレコードに集約して出力しています。
もし、重複していても集約せずにレコードを出力したい場合は、以下のSQL文を入力します。そして先ほどと同様にデータシートビューに切り替えてみましょう。
SELECT * FROM ユニオンテーブル1
UNION ALL
SELECT * FROM ユニオンテーブル2;
SQL文の記載方法は先ほどとほとんど同じですが、「UNION」のあとに「ALL」を記入することで、全てのレコードが出力されるようになりました。
まとめ
今回はユニオンクエリの作成方法について、紹介をしました。テーブル同士を結合させてレコードを出力させる方法としてユニオンクエリは活用することができますが、一方でフィールドの数、データ型を一致させる必要がありますので、注意してください。
スポンサーリンク
コメント