スポンサーリンク

【Access】 選択クエリ の使い方~応用編~一つのテーブルからの抽出

クエリ
スポンサーリンク

選択クエリ には、様々な使い方があります。

選択クエリ の最も基本的な使い方は別の記事で紹介しています。

今回は、 選択クエリ のより複雑で応用的な使い方について紹介します。

ここまでさっと作れるようになったら、怖いものなしです。

選択クエリ とは?

応用編を閲覧されている読者の皆様には言わずもがなかもしれませんが、おさらいとして、 選択クエリとは何かを記載します。

選択クエリ とは、「Accessデータベース内にあるテーブルのデータを、ある条件を基に抽出して表示するもの」と認識していただければ良いと思っています。

ここで肝となるのは、あくまで表示するためのクエリということです。

その他のクエリは実行した際に、何かしらのアクションを起こしますが、 選択クエリ は表示することしかできません

選択クエリ の使い方

それでは、 選択クエリ の応用的な使い方について紹介していきます。

紹介する内容としては、大きく分けて、一つのテーブルから抽出する場合と、二つ以上のテーブルから抽出する場合について紹介します。

本記事ではそのうち、一つのテーブルのデータから抽出する場合の応用的な使い方を紹介します。

二つ以上のテーブルから抽出する場合の紹介については、こちらの記事にて紹介しています。

この内容は二つ以上のテーブルが存在していても応用することができるため、活用させてみてください。

複数の条件式を抽出条件に設定する

まず、複数の条件式を組み合わせて抽出条件として設定する場合です。

今回紹介する 選択クエリ の使い方の応用編の中で、一番よく使える(使う)ものです。

複数の条件式の設定の考え方は大きく3つあります。(下段ほど複雑です)

  1. ひとつのフィールドのみに対して〝or〟で複数の条件を設定する
  2. ひとつのフィールドのみに対して〝2行以上の抽出条件欄〟で複数の条件を設定する
  3. 複数のフィールドに対して〝2行以上の抽出条件欄〟で複数の条件をそれぞれ設定する

ひとつのフィールドのみに対して〝or〟で複数の条件を設定する

こちらは、一番エクセル的な考え方で応用編の中では一番簡単です。

抽出条件欄一か所に右図のように

“くだもの” or “飲み物”

と入力するだけです。

こうすることで、分類が〝くだもの〟もしくは〝飲み物〟だけのデータが抽出されます。

ひとつのフィールドのみに対して〝2行以上の抽出条件欄〟で複数の条件を設定する

こちらはややExcel的な使い方からは遠ざかりますが、まだまだ難しくなく、むしろAccessを使う上ではこちらの方が簡単かもしれません。(Excelに近いということで、前者を簡単と定義しました。)

右図の通り、抽出条件の2行にそれぞれ〝くだもの〟と〝飲み物〟を入力します。

こうすることで、分類が〝くだもの〟もしくは〝飲み物〟だけのデータが抽出されました。

これは前者の方法と出力結果が全く同じです。

やり方違いで同じ結果を出すための方法になります。

複数のフィールドに対して〝2行以上の抽出条件欄〟で複数の条件をそれぞれ設定する

この中でこれが一番奥が深い内容となります。

突然ですが問題です。

下図それぞれ①・②の抽出条件での抽出結果は同じでしょうか?同じではないでしょうか?

正解は・・・同じではありません。

抽出結果は下図の通り。

どうしてこうなるのか?について解説します。

クエリの抽出条件の横方向は〝AND/論理積〟縦方向は〝OR/論理和〟の働きをします。

この働きを理解するために、ベン図を使います。

まずは横方向の働き(AND/論理積)はベン図では下図のようになります。

2つの条件が重なった場所がで論理積と呼ばれていて、選択クエリの抽出条件の横方向の動きになります。

では縦方向の働き(OR/論理和)はベン図では下図のようになります。

2つの条件の輪郭をなぞった場所が論理和と呼ばれていて、選択クエリの抽出条件の縦方向の動きになります。

では、今回の2つのクエリの抽出条件でベン図を描くと下図のようになります。

①について分解すると

  1. 分類のフィールドに対して、論理和で赤枠が規定されます。
  2. 赤枠で規定された論理和と、コードのフィールドに対して規定された青枠部分に対して、論理積で緑色の塗りつぶしの部分が規定されます。

②について分解すると

  1. 分類のフィールドに対して規定された赤枠の部分と、コードのフィールドに対して規定された青色の部分に対して、論理積で紫色の塗りつぶしの部分が規定されます。
  2. 紫色の塗りつぶしで規定された論理積と、分類のフィールドに対して規定された緑枠の部分に対して、論理和で緑色の塗りつぶし部分が追加で規定されます。

複数のフィールドの値から計算させた結果を表示する

選択クエリ では、複数のフィールドの値から計算させた結果を表示させることができます。

※ここでいう計算とは算術演算になります。

選択クエリ での記載方法は、右図のように、計算したいフィールド同士の計算式を入力します。

今回は〝数量〟の値と〝入数〟の値を掛け合わせた数値を計算したいので、[数量] * [入数] と入力しています。

出力結果は以下のようになります。

算術演算は他にも、足し算〝+〟引き算〝-〟割り算〝/〟も可能です。

他にも、Access標準で準備されている算術演算の関数(CosやExpなど)やモジュールで自作した関数も利用することができます。

注意点としては、算術演算ができるのはフィールドが数値になっているものだけです。

複数のフィールドの値(文字列)を結合させた結果を表示する

選択クエリでは、複数のフィールドの値(文字列)を結合させた結果を表示させることができます。

選択クエリでの記載方法は右図のように、結合させたいフィールド同士を〝&〟でつなぎます。

今回は品名と分類を繋ぎたいので、[品名]&[分類]と記載しています。

出力結果は以下の通りになります。

この文字列操作ですが、単純な結合だけではなく、例えば品名の一部を取り出してみる関数(Mid)を利用したり、フィールドと特定の文字列を結合させたりすることも可能です。

抽出結果に対して出力結果を変化させる

ここでは、出力結果をテーブルに格納されているデータとは違うデータを表示させる方法について紹介します。

その方法とは、フィールドにIIF関数を利用して、条件分岐によって出力結果を変化させる方法です。

IIF関数とは?

IIF関数は、エクセルで言うIF関数、条件分岐の関数です。(同じマイクロソフト製ソフトなのにエクセルとアクセスで関数が違うのは分かりづらい気もしますが。)

ExcelのIF関数の説明はこちらからどうぞ。

A=Bが真ならばC、偽ならばDと出力結果違う値とすることができます。

その場合の構文は以下の通り。

IIF(A=B, C, D)

日本語で記載すると

IIF(条件式, 真の場合の値, 偽の場合の値)

となります。

真偽の考え方は、左右の式の結果が正しい場合は真、そうでない場合は偽となります。

例としては、1 + 1 = 2 これは真、1 + 1 = 1 これは偽となります。

フィールドにIIF関数を用いて出力結果を表示させる方法は?

それでは、実際にIIF関数を用いて出力結果を表示させる方法を紹介します。

前述の通り、IIF関数は条件式と真偽それぞれの場合の値を入力します。

そのため、使い方としては、条件式の部分にフィールドに対する条件式、真偽それぞれの場合の値のところに表示させたいデータ(値)を入力します。

パターンとして、以下の3パターンを例として挙げたいと思います。

  1. 分類が「くだもの」の場合〇、それ以外の場合は×にする。
  2. 分類が「くだもの」の場合〇、それ以外の場合は「分類に入力されているデータ」にする。
  3. 分類が「くだもの」の場合「品名に入力されているデータ」にし、それ以外の場合は「分類に入力されているデータ」にする

分類が「くだもの」の場合〇、それ以外の場合は×にする

この場合の関数の記述は以下のようになります。

IIF([分類] = “くだもの”, “〇”, “×”)

この関数を右図のように、フィールド名の部分に入力してください。

※入力する方法は、直接入力とビルダーで入力する方法があります。

出力結果は以下の通り。

<内容の解説>

まず、[分類] = “くだもの” が条件式にあたる部分です。

ここでは〝分類というフィールドの値が文字列の “くだもの” に一致する〟という条件式を記述しています。

そして、真偽それぞれが、”〇” と “×” なので、一致した場合は〇が出力され、一致しない場合は×が出力されます。

分類を[]で挟んでいますが、こちらはフィールドの名前が〝分類〟ですよ。と教えるために必要です。

[]で挟まなければ、〝分類〟を関数や演算子と認識してしまい、エラーとなってしまいます。

くだものや〇×について、””で挟んでいますが、こちらは値が文字列で、〝くだもの〟〝〇〟〝×〟を表していますよ。と教えるために必要です。

分類が「くだもの」の場合〇、それ以外の場合は「分類に入力されているデータ」にする

この場合の関数の記述は以下のようになります。

IIF([分類] = “くだもの”, “〇”, [分類])

この関数を右図のように、フィールド名の部分に入力してください。

出力結果は以下の通り。

分類が「くだもの」の場合「品名に入力されているデータ」にし、それ以外の場合は「分類に入力されているデータ」にする

この場合の関数の記述は以下のようになります。

IIF([分類] = “くだもの”, [品名], [分類])

この関数を右図のように、フィールド名の部分に入力してください。

出力結果は以下の通り。

このように、IIF関数で条件分岐させることで、出力結果を分岐させることができます。

この真の時の値や偽の時の値には、単純なフィールドの値や指定文字列を入れるだけではなく、算術演算させた計算値だったり、文字列の一部を切り取って表示させたりと様々に出力することができます。

まとめ

今回は、Accessの 選択クエリ の使い方の応用として、一つのテーブルからデータを抽出する場合に限定し、基本編で記載していた方法をより複雑にしたものをいくつか紹介しました。

関数の使い方次第では、まだまだ複雑なクエリを作成することも可能です。

ただ、フィールドの中に複雑な関数を入れこんだクエリでは、処理速度が低下することも考えられるので、他のクエリ(追加クエリや更新クエリなど)を駆使しながら、処理を組み立てる必要があります。

実務で考えると、1つのクエリで事足りる仕事は少ないです。

本記事で紹介したより複雑な方法は、Accessで連続して処理を作成する際に役立つと思いますので、是非活用してみてください。

コメント

タイトルとURLをコピーしました