不一致クエリ・外部結合を理解してデータ加工の幅を広げよう

こんにちはmasalifeです。

今回はデータ加工の幅を広げてくれる「不一致クエリ」の使い方を紹介します。

社内の実務において、不一致クエリを理解しないと話にならないぐらいに頻繁に使っているクエリです。

コツさえ掴めば難しいものではないので、ぜひこの記事でマスターしてください。

費用対効果バツグンです。

不一致クエリは「外部結合」の仕組みを利用したものなので、「外部結合とは何?」の部分にも触れて紹介していきますね。

使用するデータ(会員名簿・利用者)の確認

今回使用するデータの確認をします。

前提として、スポーツジムのスタッフとして、会員と利用者の管理をすることとします。

① T_会員名簿(テーブル)

ジムの会員ごとのIDと会員名を格納

② T_使用日(テーブル)

ジムの利用者と使用日を格納

これら2つのデータを元に不一致クエリを使って、目的ごとにデータを抽出していきます。

不一致クエリは外部結合の仕組みを利用したもの

不一致クエリは外部結合の仕組みを利用したものです。

外部結合とは、「異なる2つのテーブルを結合するキーとなるフィールドを指定して、そのフィールドに格納されている値が一致するデータを結合して取得する方法です。基準となるテーブルを指定し、基準となるテーブルのデータは一致する一致しないに関わらず、すべて取得する」のが特徴です。

どのテーブルを基準とするのかで、抽出されるデータが異なるため、

何を抽出したいのか。

どのテーブルを基準にするのか。

を正しく理解することがとても重要になってきます。

不一致クエリを使ってデータを抽出する

目標1:会員の中で利用していない人を特定する

【目次1:使用するデータ(会員名簿・利用者)の確認】のデータを使って、

会員の中で利用していない人を特定してみましょう。

ポイントは、会員の中で・・・というところです。

実際の業務でイメージすると、

「会員さんの中で、まだ利用していない人に利用してくださいのDMを送りたい。来ていない人は誰か確認しよう。」

といった感じです。

会員さんの中で・・・のため、基準となるテーブルは会員情報が格納されているT_会員名簿となります。

それでは不一致クエリをデザインしていきましょう。

不一致クエリをデザインする

クエリをデザインビューで開きます。

使用する2つのテーブルを表示します。


T_会員名簿の会員名フィールドとT_使用日の利用者フィールドを結合(リレーション)します。

*結合の仕方は結合したいフィールドのどちらか一方をクリックし、もう一方のフィールドにドラッグし重ねることで出来ます。


① 結合線をダブルクリックし、結合プロパティのダイアログボックスを出します。

② 2の「T_会員名簿の全レコードとT_使用日の同じ結合フィールドのレコードだけを含める。」を選択し、【OK】ボタンをクリックします。

*「会員の中で・・・」という条件が「T_会員名簿の全レコードと・・・」の部分に対応しています。


T会員名簿からT_使用日に向かって、結合線が→に変わりました。

これが外部結合です。

→の元のテーブルが基準となるテーブルであることを意味しています。

すべてのフィールドをデザイングリッドに表示し、外部結合の結果を確認してみます。

クエリを実行します。


外部結合をしたクエリの実行結果について、少し考えてみましょう。


外部結合の基準となっているテーブル(T_会員名簿)のデータはすべて表示されています。

そして、会員名フィールドと利用者フィールドを外部結合しているため、

会員名フィールドにあって(会員の中で)、利用者フィールドにない(利用していない)データである「複雑 文字」のT_使用日のフィールドはNull値となります。

これが外部結合の特徴です。


不一致クエリはこの外部結合の特徴を利用したもので、

使用日フィールドの抽出条件にIs Nullと指定すれば、不一致クエリのデザインが完成します。

*利用者フィールドにIs Nullと指定しても大丈夫です。


実行すると、

会員の中で利用していない人の特定が出来ました。

・抽出条件にIs Nullを指定するフィールドはデータに空白またはNull値を含まないものを指定する。

*仮に「複雑 文字」が利用者として登録されていたにもかかわらず、使用日の入力を忘れていた場合、使用日の抽出条件に指定したIs Nullによって、利用していないこととなってしまい、正しい結果が得られません。

・基準となるテーブルを何にするかは必ず意識する。

目標2:利用者の中で会員でない人を特定する

【目次1:使用するデータ(会員名簿・利用者)の確認】のデータを使って、

利用者の中で会員でない人を特定してみましょう。

ポイントは、利用者の中で・・・というところです。

実際の業務でイメージすると、

「利用者の中で、会員でないビジター利用の人に営業メールを送りたい。ビジター利用の人を確認してみよう。」

といった感じです。

利用者の中で・・・のため、基準となるテーブルは利用者の情報が格納されているT_使用日となります。

それでは不一致クエリをデザインしていきましょう。

不一致クエリをデザインする。

*不一致クエリの細かい部分については、【目標1:会員の中で利用していない人を特定する】で説明していますので、方法のみを紹介します。理解がより深まるので、目標1もやってみてください。

クエリをデザインビューで開きます。

使用する2つのテーブルを表示します。


T_会員名簿の会員名フィールドとT_使用日の利用者フィールドを結合(リレーション)します。


① 結合線をダブルクリックし、結合プロパティのダイアログボックスを出します。

② 3の「T_使用日の全レコードとT_会員名簿の同じ結合フィールドのレコードだけを含める。」を選択し、【OK】ボタンをクリックします。

*「利用者の中で・・・」という条件が「T_使用日の全レコードと・・・」の部分に対応しています。


すべてのフィールドをデザイングリッドに表示し 、会員IDフィールドの抽出条件をIs Nullとします。

*会員名フィールドにIs Nullと指定しても大丈夫です。


実行すると、

利用者の中で会員でない人の特定が出来ました。

さいごに

外部結合を利用するとデータ加工の幅が広がると感じていただけましたでしょうか。

社内研修でも、外部結合と不一致クエリは時間をかけて説明をしていますが、

なかなか理解するのが難しいようです。

まずは簡単なデータから、様々なデータを抽出してみるところから始めてみてください。

必ず使いこなせるようになります。

悩んだ時に、またこの記事に戻っていただければ幸いです。

最後まで読んでいただきありがとうございました。