クエリを制する者はAccessを制する

Accessの利点、Excelよりも優れている点はクエリにあります。Excelでも最近PowerQueryというツールが標準装備されましたが、あれはAccessのそれと比べるとやはり非力で使い勝手もよくありません。

クエリを制する者がAccessを制すると言います。今回はこのクエリについてまとめてみたいと思います。色々な種類がありますが、特に更新クエリはAccessの利点を最も強く感じるものになるんじゃないかなと思います。

今回使用するAccessファイル

利用するには、次項の事前準備にて、リンクテーブルを追加する必要があります。

事前準備

今回は添付しているxlsxファイルから、2つのリンクテーブルを作っておく必要があります。

以下の手順でxlsxやcsvファイルをあたかもテーブルであるかのように扱えるようになります。それがリンクテーブル。中のデータは編集できませんが、読み取ることは可能です。以下の手順でxlsxファイルをリンクさせる事が可能です。

  1. Accessの外部データタブ⇒インポートとリンク⇒Excelのアイコンをクリックします。
  2. 参照ボタンを押して、リンクするxlsxファイルを指定します。
  3. リンクテーブルを作成してソースデータにリンクするにチェックを入れます。
  4. OKを押して次に進む。
  5. リンクするワークシートを選択して次へ進みます。(2つともリンクしておきましょう)
  6. 先頭行をフィールド名として使うにチェックを入れると1行目は列の名前になります。
  7. リンクテーブルの名前を付けて完了。以降は解除されるまで、テーブル同様の扱いになります。

※Access2019だと1.の手順が新しいデータソース⇒ファイル⇒となっているので注意!!

図:リンクテーブル作成画面

図:開くと普通のテーブルと同じです。書き換えは出来ません。

基本的なクエリ

Accessには、選択クエリ、追加クエリ、更新クエリ、削除クエリ、テーブル作成クエリ、クロス集計クエリがあります。特殊なものには、ユニオンクエリ、パススルークエリ、データ定義クエリというものもあります。今回はユニオンクエリまでを説明してみたいと思います。

選択クエリ

概要

Accessで最もよく利用し、もっとも利用幅のあるクエリです。主な利用方法は

  1. 2つのテーブルに共通する列(例えば職員コード)などで連結して、1つにする
  2. 様々な抽出条件でテーブルからデータをフィルターする
  3. トップ10などを抽出するような使い方も可能(売上合計トップ10など)
  4. 計算する列を追加して、例えば数量*単価の結果を作ることが可能(数式内でAccess用関数やVBAの関数が利用できる)
  5. グループ化して集計が出来る(合計や平均、最大値、最小値などなど)

単純な選択クエリ

2つのテーブルから特定の列を基準に連結して、1つのクエリとして表示してみたいと思います。単純な事例です。また表示する列は自由に表示・非表示が可能です。A医薬品テーブルにJANコードを基準に、製造会社名を連結させて表示します。

  1. インポートデータ.xlsxからリンクしたMEDISテーブルを利用します。
  2. 作成タブからクエリデザインをクリックします。
  3. A医薬品テーブルとMEDISテーブルの2つを追加します。
  4. A医薬品テーブルのJANコードとMEDIS側JANコードを紐つけてリレーションシップを貼ります。
  5. A医薬品テーブルからは、JANコード、医薬品名を下のクエリフィールドへ追加します。
  6. MEDISテーブルからは、製造会社列をクエリフィールドへ追加します。
  7. 閉じてクエリに名前を付けます(今回は、連結クエリ基本という名前にしました)。
  8. 開くと、A医薬品テーブルにはない情報をMEDISテーブルを利用して製造会社名を付与できました。

図:連結して必要な列だけ表示させるのはクエリの基本

トップ10を出力してみる

少し変則的なクエリですが、選択クエリのプロパティにある設定を弄ると、変わったクエリを出力可能です。今回はクエリデータトップ10を作ってみたいと思います。インポートデータクエリに於いて、商品名、価格、製造開始日の3つだけ使って、価格のトップ10を作ってみます。

  1. 作成タブのクエリデザインをクリックします。
  2. インポートデータテーブルを追加する。
  3. 商品名、価格、製造開始日3つを選んで下のクエリフィールドへ追加する。
  4. テーブルが表示されているテーブル以外の領域をクリック(灰色っぽい背景部分)
  5. プロパティシートを表示する
  6. プロパティシートの「トップ値」に10と入れる
  7. クエリフィールドの価格に於いて、並べ替えを「降順」にしてみる。
  8. 閉じてクエリに名前を付けて保存する。今回はインポートデータトップ10としました。
  9. 開いてみると、降順ソートされたデータのうち、トップ10が表示されました。

図:プロパティシートを使ったテクニック

計算列を作って表示する

インポートデータテーブルには、価格はあるものの、数量列や合計列は用意されていません。そこで、これらをクエリ上で用意して表示・計算させる事が可能です。また、この計算列では関数を使うことも可能であり、VBAで作った自作の関数も使えます。抽出条件にも関数は使えますので、活用の幅が広いテクニックです。

  1. 作成タブを開き、クエリデザインをクリックする。
  2. インポートデータテーブルを追加します。
  3. ID列以外のすべてを下のクエリフィールドに追加します。
  4. 製造開始日列の隣の空列に於いて、フィールドをクリックしてから右クリック⇒ビルドをクリック
  5. 式ビルダーが開かれます。列名は「列の名前:」といった具合にコロンを付けます。
  6. 列の名前につづけて、数式を入れます。フィールド同士を計算させるので、[価格] * 10としました。
  7. 閉じてクエリに名前を付けます。売上計算クエリと名前をつけました。
  8. 開いてみると、すべてのレコードにおいて価格 * 10の結果の列が計算されて表示されているはずです。

図:売上という計算列を追加しました。

グループ化

グループ化とは、レコードデータに於いて同じ値のものは1行にまとめて、さらにその上で特定列の合計などを行なう為の集計クエリになります。但し、フィールドが多いほど細かいグルーピングになってしまい、少ない場合非常に単純な集計クエリになりますので、必要なフィールドだけを表示するようにしましょう。

今回は、インポートデータテーブルに於いて、商品名と年度でグループ化し、価格の平均を出したいと思います。

  1. 作成タブを開き、クエリデザインをクリックする。
  2. インポートデータテーブルを追加します。
  3. 商品名、製造開始日、価格の3つのフィールドを追加します。
  4. 上にある「Σ 集計」をクリックします。
  5. 下のクエリフィールドに「集計」が追加されます。商品名と製造開始日は「グループ」でOK.
  6. 下のクエリフィールドの「価格」の集計部分は平均を取りたいので、平均に変更します。
  7. 閉じて名前を付けます。今回はインポートデータ集計クエリとしました。
  8. 実行すると、商品名別製造開始日別単価の平均値表が作れました。

図:グループ化して集計するクエリ作成中

図:商品別製造開始日別単価の平均集計表が作れた。

追加クエリ

概要

毎月決まったデータを用意してあるテーブルに流し込む為に使うクエリです。例えば、売上データ等のCSVやXLSXファイルを取り込み、1つのテーブルに追加するなどなど。追加する際にも、フィルタを掛けて追加や変換して追加(例えば全角を半角に)といった事が可能で、Excelのように貼り付ける位置を気にしたり、数値の列に文字列を入れてしまったりといったミスをせずに、取り込むことが可能です。

よく使うパターンは

  1. xlsxファイルをリンクテーブルとしてAccessにつなげる
  2. 作成しておいた追加クエリを実行して、テーブルにデータを流し込む。
  3. リンクテーブルを解除する

追加クエリの作り方

別のテーブルから別のテーブルへデータを追加するのが追加クエリです。以下の特徴があります。

  1. インポート先のテーブルのすべての列を指定する必要はありません。必要な列だけインポートが可能
  2. オートナンバー列に指定値を入れようとしても入れられません。自動採番されます。
  3. インポート元とインポート先の列の「データ型」は合わせておく必要があります(でないと、インポートエラーになります)。
  4. インポート元に無い列であっても、クエリ上で列を自分で作って、インポート先に入れる事が可能です(例えば、数量*単価の合計値列がインポート先にしかないケース)

以上の特徴を踏まえた上で、今回はインポートデータ.xlsxをリンクテーブルとしてリンクし、インポート先というテーブルにインポートするクエリを作ってみます。インポートデータ.xlsxはリンクしておきましょう。

  1. 作成タブを開く。
  2. クエリデザインをクリックする。
  3. インポートデータというテーブルをクリックして、追加をクリック
  4. ID列以外の項目を選んで掴み、下のクエリフィールドへドラッグアンドドロップする。
  5. 上にあるクエリの種類では「追加」をクリックして変更する。
  6. 追加先は事前に用意してあるインポート先テーブルを選び、OKをクリックする。
  7. 下のクエリフィールドで相手先に同じ列名がある場合は自動で、レコードの追加の部分に追加先が指定されます。
  8. この時、不要な列を削除すると、その列のデータはインポートされません。また、7.に於いてレコードの追加部分が空の場合もデータ追加の対象外になります。
  9. 閉じてクエリの名前を付ける(今回はデータ追加クエリという名前を付けました)。
  10. 実行すると、インポートデータというテーブルのデータが、インポート先に追加されるようになります。もちろん、抽出条件を指定すれば、一部のデータだけを追加出来るようになります。

図:追加クエリ作成途中の画面

更新クエリ

概要

データ更新クエリは、Accessのクエリの中でも高度ですが、Excelには出来ない芸当を一瞬でやってのける非常に優れたクエリです。既存のテーブルにあるクエリで、条件に合致するレコードの特定の列の値を書き換えるクエリなのですが、事例としては「2008年のデータだけ現在の価格より10%値上げした値に書き換える」なんて時に効力を発揮します。

また、別のテーブルを参照させて、同じIDを持つレコードがある場合、変換先のコードに、全て置き換えるなんて芸当も可能になっています(販売コードが一斉に変更になった時に新旧対応表を用意しておいて、それを元に更新させると全部入れ替えてくれます)。上手に更新がキマると気持ちの良いクエリでもあります。

単独で条件に合致するレコードを更新するクエリを作る

1つのテーブルに対して、条件を指定し合致するレコードの価格を10%増しに書き換えるクエリを作ってみます。予め、追加クエリにてインポートデータを入れておきましょう。条件は製造開始日が2008のデータを書き換えます。

  1. 作成タブにあるクエリデザインをクリックする
  2. インポート先テーブル追加して閉じる。
  3. クエリの種類は「更新クエリ」をクリックして変更します。
  4. ここからがハマりポイント。まずは、値更新の対象となる列をクエリフィールドに追加します。(今回で言えば価格列)
  5. レコードの更新という項目では、10%増しなので、[価格] * 1.1と入力する
  6. 次に条件を加えます。製造開始日列をクエリフィールドに追加します。
  7. レコードの更新は空のままにし、抽出条件に2008を入れます。
  8. これで完成です。閉じて名前を付けます。(レコード更新クエリと名付けました)。
  9. 実行すると製造開始日が2008のデータだけ、元の価格よりも10%増しの価格に書き換わります。但し、何度も実行するとその度に10%増しになるので、更新クエリは実行に注意が必要です。
  10. 更新後の結果がテーブルの列のデータ型に反する場合、エラーになるので、注意。また、数値の計算の場合、データ型が整数型なのに計算結果が小数点を含む場合、小数点以下は切られてしまうので、テーブル設計に注意が必要です。

図:更新クエリを作っている様子

図:実行すると1行目のはちみつの価格が10%増しになってるのを確認できる。

別のテーブルを利用してレコードを更新するクエリを作る

前項では、単独のテーブルだけで値を更新させました。次に別のテーブルを使って、値を更新する方法をやってみたいと思います。この場合、別のテーブルは新旧対応表のような構造で、更新先のテーブルと同じ項目値を持っている必要があります。

今回は、商品名に対して仕入先をすべて同じものに変更したいと思います。新旧対応表ではユニークな商品名と変更する仕入先名を入れただけのシンプルなものを用意します。はちみつ、トマト、にんじん、イチゴの4点に対して、同一の仕入先に変更します。

  1. 作成タブにあるクエリデザインをクリックする
  2. インポート先テーブル追加して、更に新旧対応表テーブルを追加する。
  3. クエリ通しがつながってないので、インポート先の商品名を掴んで、新旧対応表の商品名上で離す。リレーションシップが一時的に貼られます(今回のつなぎ方は、両方に同じデータがあるものだけを抽出します)。
  4. クエリの種類は「更新」をクリックして、変更しておく。
  5. インポート先に反映するので、インポート先テーブルの仕入先列をクエリフィールドに追加する。
  6. レコードの更新では、新旧対応表の仕入先の値を反映させるので、[新旧対応表].[仕入先]と入力する(テーブル名と列をドットで繋いだものになります)
  7. これで閉じて名前を付けて保存します(今回は仕入先更新クエリとしました)。
  8. 実行すると、新旧対応表にある商品名に対応する仕入先の名前が、インポート先のテーブルに一斉更新されました。

図:変換用のテーブルを使って値を一斉書き換え

図:新仕入先の名前に一斉更新された。

削除クエリ

削除クエリは非常に単純なクエリです。指定したテーブルのデータを条件に応じて削除するだけのクエリです。ですので、作り方も非常にシンプルです。テーブルが消えるわけではないので注意。

  1. 作成タブにあるクエリデザインをクリックします。
  2. データ削除対象のテーブルをクリックして追加します。
  3. 通常は列のデータではなく、レコードを削除するので、インポート先テーブルの「*」を掴んでクエリフィールドに離します。
  4. 抽出条件を付けて削除する場合には、別途条件指定用の列を追加して、例えば製造開始日が2005より前ならば、<=2005と抽出条件に入れておきます。(条件がなければテーブルの全データ削除になります)。
  5. 閉じて名前を付けます。(今回は、データ削除クエリと名前を付けました)。
  6. 実行すると抽出条件に合致したレコードだけをテーブルから消し去ってくれます。

図:データ削除クエリを作ってる様子

特殊なクエリを作る

それそのものは普通の選択クエリながら、テクニックを使う事で「2つのテーブル間で不一致のレコードを取り出す」「テーブルの中で重複しているデータを取り出す」といったクエリを作る事が可能です。最近のxlsxでも出来るようになってきましたが、Accessではこれがあっさり作る事が可能です。Accessを使用する利点の1つです。

不一致クエリ

概要

不一致クエリとは、同じ構造の2つのテーブルに於いて、片方にだけ存在しているデータをあぶり出す為のクエリです。そのため、比較元と比較先の2つのテーブルが必要になります。クエリウィザードで作るのが手っ取り早いですが、どういう理屈で抽出しているのかを知っておいた方が後々良いので、今回は手動で作成します。

但し、正しく抽出するには、以下の条件があります。

  1. 両テーブルに於いて抽出する上で利用する条件は、通常はIDなどのユニークな値を利用します。但し、ユニークであるならば、IDでなくとも利用可能です。
  2. 但し、IDの列がオートナンバーの場合、両者のID列の番号が異なることは普通にありえるので、数値型の列である必要があります。
  3. 両者比較する列は同じデータ型である必要があります(数値型なら数値型といった具合に)
  4. クエリ自体は普通の選択クエリと同じです。
  5. 作り方に注意。通常はA医薬品にあってB医薬品にないものとして作ります。A医薬品になくてB医薬品にあるものは出てきません。

不一致クエリを作ってみる

今回は、医薬品名の入った2つのテーブルに於いて、名前で不一致を抽出してみたいと思います。A医薬品テーブルとB医薬品テーブルで比較をしてみたいと思います。A医薬品にだけ、ロキソプロフェン水和物という医薬品が入っていて、B医薬品には入っていません。

  1. 作成タブのクエリデザインをクリックする。
  2. A医薬品とB医薬品の2つのテーブルを追加する。
  3. ここがハマりポイント1AにあってBにないものを探すので、A医薬品の医薬品名とB医薬品の医薬品名とをリレーションシップで繋ぎます。
  4. リレーションシップの線をダブルクリックする。
  5. 両方のテーブルの...ではなく、A医薬品の全レコードとB医薬品の同じ結合フィールドのレコードだけ含めるに変更します。線がA⇒Bへと変化します。
  6. A医薬品テーブルの表示したい列だけ、下のクエリフィールドにドラッグ&ドロップします。
  7. ハマりポイント2。B医薬品に無いもの なので、B医薬品テーブルの医薬品名列を、下のクエリフィールドに追加し、抽出条件に「Is Null」を入れます。表示する必要はない列なので、この列の表示のチェックは外してOK.
  8. 閉じてクエリに名前を付けます(今回は、AとBの不一致クエリと名付けました)。
  9. 実行してみると、A医薬品テーブルにある医薬品1個がB医薬品テーブルにはないので、検出されます。但し、B医薬品テーブルにだけあるものは、ここに出てきません。
  10. B医薬品テーブルにあってA医薬品テーブルにないものを出したい場合には、逆方向のクエリを別途用意する必要があります。

図:リレーションの方向と抽出条件に注意!!

図:リレーションシップの貼り方が重要

重複クエリ

概要

重複クエリとは、1つのテーブル内で指定した列で同じデータが存在していた場合に抽出するクエリです。例えば、棚卸しに於い1度棚卸しデータを登録しているのに、また同じコードで棚卸しのデータを登録しちゃっている場合などに検出する事が可能です。

重複登録を防ぐ事は、テーブル設計時に列のプロパティにて重複なしにすれば、可能ですが、複数の施設で1つのテーブルを共有して使う場合には、どこかの施設が登録してしまうと、同じコードで別の施設が登録できなくなってしまうなど弊害もあります(施設別にテーブルを分けるのも合理的とは言えない)。

また、同じ名前での登録であっても、別の列の値が異なっていれば重複と見做さないといったケースの場合、名前で重複検出をしてしまうと、別の列の値が違う場合は、重複と見做さないというルールに反して検出されてしまうので、どの列を見て重複とするか?はよく検討する必要があります。

重複クエリを作ってみる

今回は、C医薬品テーブル内に於いて、JANコードが重複しているものを検出します。ですので、医薬品名が重複していても重複とは見做しません。また、複数の列を持って比較も可能なので、同じ医薬品名同じ包装単位の2つで調べるといったことも可能です。但しこのクエリは、「サブクエリ」というクエリの抽出条件に別のクエリを使う手法が必要なので、手動で作るのは面倒です

よって、今回は、クエリウィザードの力を借りることにしましょう。

  1. 作成タブにある「クエリウィザード」をクリックします。
  2. 重複を調べるテーブルでは、C医薬品テーブルを選択します。
  3. 重複データを調べるフィールドでは、今回は医薬品名ではなく、JANコードを基準にするので、JANコードを選びます。ここでは複数の列を指定可能です。
  4. 表示する列を追加してあげます。
  5. 最後に名前を付けて完了です。今回はC医薬品重複レコードという名前を付けました。
  6. 実行してみると、JANが重複してる医薬品だけが抽出されています。医薬品名が同じだけれどJAN違いのものは、重複とは見做されず出てきません。

図:重複クエリ作成中の様子

図:抽出条件に複雑なサブクエリがあるのが特徴

クロス集計クエリ

概要

Excelではおなじみのピボットテーブルこと「クロス集計」。Accessでも作る事が可能です。但しExcelとは異なり、二行に渡る列名の表示ができない為、Excelのような自由度はありません。一方で、Excelとは異なり、複数テーブルの結合結果からクロス集計を作るといった流れをAccessは出来るので、一長一短ですね。

その基本的な考え方はExcelと同じですが、Excelと違う点はクロス集計クエリの結果もまたクエリなので、別のデータで流用できる点。但し、列側の値が増減する可能性があるため、流用を考えるならば設計をよく考えておかないと行けない。

クロス集計クエリを作ってみる

クロス集計クエリも手動で作ると大変なので、ウィザードを使って楽をしましょう。但し、このクエリはそれだけでは微調整ができなかったりするので、手修正も含めて作ることを考えないといけません。今回はインポート先テーブルのデータに於いて、行に商品名、列に製造開始日、値に価格の平均を取ってクロス集計を作ってみたいと思います。

  1. 作成タブにあるクエリウィザードをクリックします。
  2. クロス集計クエリウィザードを選びます。
  3. テーブルの選択画面では、インポート先テーブルを選びます。
  4. 次へ進むと、行見出しの指定です。ここでは商品名を選びます。3つまで選べるとありますが、手修正で4つ以上指定も可能です。
  5. 列見出し製造開始日で並べます。
  6. 最後に値は価格を指定。集計は「平均」を指定します。
  7. クロス集計クエリの名前を付けて閉じます(今回はインポート先のクロス集計としました)。
  8. 実行してみると、行に商品名、列に製造開始日、値は価格の平均を取ることができました。
  9. 横に長くなりそうならば、行見出しと列見出しを逆にしてあげると良いでしょう。縦に長い分には見にくくなりませんが、横に長いと見にくくなります。

図:クロス集計クエリウィザードの様子

図:クロス集計クエリの結果を表示してみた

高度なクエリ

テーブル作成クエリ

あまり使うシーンはありませんが、例えばリンクテーブルから色々列を足して、それを元にテーブルを作りたいシーンがあります。0から作るのは面倒。でも、追加クエリで追加する先のテーブルを作るなら、まずこのテーブル作成クエリでテーブルをガッっと作り、手修正のほうが早い・・・

また、長年使ってきて、1つのテーブルのデータ量が大きい場合、切り出すために年度名でテーブルを分けたい時などにこのクエリを使います。このクエリ自体は非常に簡単に作れます。

  1. 作成タブを開き、クエリデザインを開きます。
  2. 今回はリンクテーブルである「インポートデータ」からテーブルを作りたいと思うので、インポートデータテーブルを追加します。
  3. クエリの種類にて、テーブルの作成をクリックして変更します。
  4. 作成するテーブル名を付けます。今回は一時テーブルと名付けました。
  5. すべてのフィールドを、下のクエリフィールドにドラッグアンドドロップします。
  6. クエリを閉じて、名前を付けます。新テーブル作成クエリと名付けました。
  7. 実行すると、リンクテーブルから一時テーブルと言う名前で新しいテーブルが作成されます。データも追加されている状態です。

注意点として、テーブルは既存にすでに同名のテーブルがある場合、既存のテーブルを削除するかどうか確認してきます。また、テーブルのデータ型などは、元のテーブルもしくはExcelでリンクした時のそれぞれの列の型を引き継ぐので、Excelの段階からその列の型をしっかり定義しておくべきでしょう。

図:テーブル作成クエリ自体は非常にシンプル

パラメータクエリ

概要

パラメータクエリとは、クエリ実行時に絞り込む条件を最初から固定しておかず、ユーザに入力させて絞り込む動的クエリです。クエリ自体に仕掛けをしておくパターンと、別途入力用のフォームを作り、クエリからフォーム上のテキストボックスを参照させる2パターンがあります。

パラメータを実行時に決定ができる為、クエリの抽出条件を固定化しておくと使い勝手が悪い場合に利用します。また、これは選択クエリ以外でも利用する事が可能です。

クエリ自体に仕掛けをしておくパターン

これは非常に単純です。以下のような手順で作ります。

  1. 作成タブのクエリデザインをクリックします。
  2. 今回はインポートデータテーブルを使ってみたいと思いますので、追加します。
  3. 全フィールドをクエリフィールドに追加します。
  4. 製造開始日列の抽出条件に[製造開始年を入力してください]といった文言を入れてみます。
  5. 閉じてクエリに名前を付けます(今回はパラメータクエリ基本と名付けました)。
  6. 実行してみると、文言の書かれたダイアログが出て、値を入力すると、それに基づいてフィルタされたクエリ結果が表示されるようになります。

図:抽出条件に文言を入れるのがポイント

図:パラメータ入力用ダイアログ

フォームのテキストボックスを参照するパターン

こちらのパターンはクエリ自体を表示というよりも、プログラム側で動的にフィルタされたクエリを使って処理をしたい場合に使います。よって、単独で使うシーンは少なく、VBAと合わせて使うシーンが殆どです。

作り方は非常に単純で、前項のクエリに仕掛けをしておくパターンと同様に抽出条件に、フォーム名とそのコントロール名を入れて上げるだけです。例えば、実績データ基準日出力というフォームの上に配置してある「kijunday」というテキストボックスの値を元に、パラメータクエリを作る場合には、以下の[Forms]から始まる内容を、抽出条件に入れておきます。

今回のパターンは「フォーム用パラメータクエリ」として保存してあります。また、入力用フォームは、実績データ基準日出力フォームとして作ってあり、ボタンを押すとテキストボックスの値で製造開始日をフィルタした内容をクエリ表示します。

図:フォームのテキストボックスを元にパラメータクエリ

図:パラメータ入力用フォーム

ユニオンクエリ

概要

ユニオンクエリとは、名前がなんだかサイバーですが、早い話が2つ以上の同じ構造のテーブルを一緒にするクエリです。但し、このクエリはGUIの画面からは作れません。また、あまり多くのテーブルを合体させてしまうと、非常に重たくなる為、実用上障害が出たり、条件を付けてフィルタをしている場合、その構造が見えにくくなるため、シンプルに結合するに留めておいたほうが無難です。

今回はA医薬品テーブルとB医薬品テーブルを結合させてみたいと思います。ユニオンクエリのアイコンは、青い2個のリングが交わったアイコンで表示されます。

ユニオンクエリを作ってみた

実はGUIでは作れないのですが、同じテーブル構造であるならば、簡単に合体させる事が可能です。但し、SQL文の知識が必要となるので、今回はSQLの知識をなるべく必要としない方法で作ってみます。

  1. A医薬品テーブルの全部を表示するクエリを作っておく。但しオーナンバーのID列は含めない。
  2. また同じ構造のB医薬品テーブルの全部を表示するクエリを作っておく。但しオーナンバーのID列は含めない。
  3. 何かテキストエディタを起動しておく(notepadなど)
  4. 1.で作ったクエリを開き、右下のバーにある「SQL」をクリックして、SQL文モードにします。
  5. 表示された文字列を一旦、テキストエディタにコピーしてこのクエリは閉じてしまいます。
  6. 5.で改行をして、UNIONと入力し、半角スペースを1個続けます。
  7. 次に、2.で作ったC医薬品のクエリを開き、4.と同じくSQL文モードにして、内容をコピー。テキストエディタの6.に繋げます。
  8. 作成タブに於いて、クエリデザインをクリックします。
  9. テーブルを追加せずに、右下のSQLをクリックして、SQL文モードにします。
  10. テキストエディタ上に作った文字列をコピーして、クエリに貼り付けます。
  11. 閉じて名前を付けて保存します。今回は、医薬品ユニオンクエリと名前を付けました。
  12. 開いて見ると、A医薬品テーブルとB医薬品テーブルの内容が合体し、ニコイチになって表示されます。
  13. 合体する両方のテーブルの列のデータ型は一致させておく必要があります。

図:ユニオンクエリのSQL文作成事例

図:ユニオンクエリ実行結果

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)