【クエリ】選択クエリ 20パターンの抽出条件解説

選択クエリの抽出条件解説 クエリ

Accessにおける基本的なクエリである選択クエリは、非常に奥深い機能を持っています。

データ活用の基本となるデータ抽出を行う選択クエリでは、さまざまな抽出条件を設定できます。抽出条件のパターンを知識として蓄えておくことで、データ活用をよりスムーズに行えるでしょう。

この記事では、選択クエリの抽出パターンを20種類紹介します。

今回の学習に使用する題材テーブル

 今回の選択クエリは、3つのテーブルを連携した「社員管理」クエリを題材にして学習を進めていきます。

クエリ学習の題材とするクエリ

こちらがクエリのデザインビューです。抽出条件はデザイングリッドの抽出条件に設定してします。

クエリのデザインビュー

抽出パターンによって必要なフィールドが異なるので、その都度デザイングリッドに追加等していくよ

選択クエリの抽出パターン

それではさっそく始めていきましょう。最初は基本的なパターンから開始し、徐々に応用的なパターンに進んでいきます。

完全一致

抽出例人事部に所属する社員のみ抽出する
設定方法「所属名」の抽出条件欄に 人事部 を入力する

《解説>

指定した条件と完全に一致するレコードを抽出する、最も基本的な抽出条件です。抽出条件がテキストの場合、条件となる文字列を " (ダブルクォーテーション)で囲む必要があります(手動で入力しなくても、Accessが自動的に認識して反映します)。

《抽出条件の設定》

完全一致の抽出条件

《抽出結果》

完全一致の抽出結果

部分一致

抽出例    社員名に”田”が含まれる社員のみ抽出する
設定方法     「社員名」の抽出条件欄に LIKE "*田*" を入力する

《解説》

部分一致は、LIKE演算子を使用した「あいまい検索」によるデータ抽出です。(アスタリスク)で囲むことで、前後にどのような文字があっても抽出されます。ちなみに、 とすると前方一致となり、先頭に を含むレコードが抽出され、*田 とすると後方一致となり、末尾に を含むレコードが抽出されます。

ちなみに、Like演算子と組み合わせて使用する「(アスタリスク)」のような文字をワイルドカードといいます。ワイルドカードについては、こちらの記事で詳しく解説しています。

《抽出条件の設定》

部分一致の抽出条件

《抽出結果》

部分一致の抽出結果

不一致

抽出例    人事部以外の社員を抽出する
設定方法     「所属名」の抽出条件欄に ”<>人事部” を入力する

《解説》

抽出条件の先頭に比較演算子の「<>(不等号)」を付けることで、「指定した文字列以外」という条件になります。不一致条件でも、あいまい検索が可能です。例えば、 を含まないレコードを抽出したい場合は、 Not Like "*田*" と条件設定すれば、希望どおりの抽出ができます。

《抽出条件の設定》

不一致の抽出条件

《抽出結果》

不一致の抽出結果

範囲指定

抽出例    2015/04/01 から 2020/03/31 に採用された社員のみを抽出し、昇順に並べ替える
設定方法     「採用年月日」の抽出条件欄に BETWEEN #2015/04/01# AND #2020/03/31# を入力し、並べ替え欄は 昇順 を選択する

《解説》

抽出条件に一定の範囲を指定する場合は、BETWEEN 演算子を使用します。範囲指定は、日付だけでなく数値にも使用できます。日付の場合は、#(シャープ)で日付部分を囲む必要があります。

《抽出条件の設定》

範囲指定の抽出条件

《抽出結果》

範囲指定の抽出結果

NUll値の抽出

抽出例    備考が未入力(Null値)のレコードのみ抽出する
設定方法     備考の抽出条件欄に ”Is Null” を入力する

《解説》

何も値が入力されていないフィールドを NULL値 といいます。NULL値を抽出するには、抽出条件に Is Null を指定します。ただし、見た目が空欄であっても、NULL値ではなく、長さ0の文字列 "" として扱われている場合があります。 Is Null で想定どおりの結果が得られない場合は、抽出条件に "" を入力して試してみてください。

NULL値、空白、スペースは、見た目は似ていますが、Access内部での扱いはそれぞれ異なります

《抽出条件の設定》

Null値の抽出条件

《抽出結果》

Null値の抽出結果

Null値以外の抽出

抽出例    備考が未入力(Null値)以外のレコードを抽出する
設定方法     「備考」の抽出条件欄に Is Not Null を入力する

《解説》

NULL値以外のレコードを抽出する場合は、 Is Null を否定する Is Not Null を抽出条件に指定します。

《抽出条件の設定》

Null値以外を抽出する条件

《抽出結果》

Null値以外の抽出結果

複数条件の組み合わせ(AND)

抽出例    人事部所属で、かつ、基本給与が300,000万円以下のレコードを抽出する
設定方法     「所属名」及び「基本給与」の抽出条件に 人事部 及び <300,000 を入力する

《解説》

複数の条件をすべて満たすレコードを抽出する場合は、抽出条件欄の同じ行に複数の条件を指定します。これにより、内部的に AND で結合されたSQLが生成されます。例として、 所属名="人事部" AND 基本給与 < 300000 のような条件を設定すると、人事部に所属し、かつ基本給与が30万円未満のレコードのみが抽出されます。

《抽出条件の設定》

複数条件のデータ抽出条件(And)

《抽出結果》

複数条件の抽出結果(And)

複数条件の組み合わせ(OR)

抽出例    人事部、または経理部に所属する社員のみを抽出する
設定方法     「所属名」抽出条件の一段目に 人事部 、二段目に 経理部 を入力する

《解説》

複数の条件のいずれかに一致するレコードを抽出する場合は、抽出条件欄の別の行に複数の条件を指定します。これにより、内部的に OR で結合されたSQLが生成されます。例として、 所属名="人事部" OR 所属名="経理部" のような条件を設定すると、人事部または経理部に所属するレコードが抽出されます。今回は同一フィールドへの条件設定ですが、異なるフィールドへの条件設定も可能です。

《抽出条件の設定》

複数条件のデータ抽出条件(Or)

《抽出結果》

複数条件の抽出結果(Or)

複数条件の組み合わせ(AND/OR混在)

抽出例    人事部、または総務部で基本給与が30万円以上の社員を抽出する
設定方法     「所属名」抽出条件の一段目に 人事部 、二段目に 総務部 を入力し、
同じ行の 「基本給与」に >300000 を入力する

《解説》

AND条件とOR条件を組み合わせることで、より複雑な条件による抽出が可能です。抽出結果を見ると、人事部では給与が20万円台の社員も抽出されていますが、総務部では給与が30万円以上の社員のみが抽出されていることが分かります。

このように、複数の条件を組み合わせることで、非常に複雑な抽出も行うことができます。

《抽出条件の設定》

複数条件のデータ抽出条件(AndOr混在)

《抽出結果》

複数条件の抽出結果(AndOr混在)

日付操作関数の使用①

抽出例    2015年に採用された社員を抽出する
設定方法     デザイングリッドの新しいフィールドに 採用年:Year([採用月日]) を入力し、
同じ列の抽出条件欄に 2015 を入力する

《解説》

日付操作関数を使用した抽出例です。今回の例では、YEAR関数を使用して「採用月日」から年のみを抽出し、抽出条件で2015年を指定しています。同様に、MONTH関数で月、DAY関数で日を抽出することもできます。

《抽出条件の設定》

日付/時刻関数による抽出条件

《抽出結果》

日付/時刻関数の抽出結果

日付操作関数の使用②

抽出例    採用されてから何日経過されているか算出し、3000日以上経過している
社員のみを抽出する
設定方法     デザイングリッドの新しいフィールドに 経過日:DateDiff("d",[採用月日],Date())& "日" を入力し、同じ列の抽出条件に >=3000日 を入力する

《解説》

日付操作関数の別の使用例を見ていきましょう。ここでは、2つの日付の間隔を求めるDATEDIFF関数を紹介します。例では、DATE関数(現在の日付を取得する関数)も使用して、採用日から現在までの日数を日単位で求め、3000日以上経過しているレコードを抽出対象としています。日付操作関数には、他にもDATEADD関数、DATEPART関数、DATESERIAL関数など、さまざまな関数があります。

《抽出条件の設定》

日付操作関数の抽出条件(Datadiff)

※経過日の表示が不要で、抽出さえ出来れば良い場合は、採用月日の抽出条件に (DateDiff("d",[採用月日],Date()) & "日")>="3000日" を入力しても同様の結果を得ることができます。

《抽出結果》

日付操作関数の抽出結果(Datadiff)

Yes/No型における抽出

抽出例    削除フラグを設定した社員以外を抽出する
設定方法     「削除フラグ」の抽出条件に False を入力する

《解説》

Yes/No型のフィールドに対する抽出条件は明確に決まっています。いくつかのパターンがありますので、以下の参考にしてください。下記以外の条件を入力すると何も抽出されませんので、注意してください。

チェックを付けているレコードの抽出条件Yes,True,1,-1
チェックを付けていないレコードの抽出条件No,False,0

《抽出条件の設定》

Yes/No型の抽出条件

《抽出結果》

Yes/No型の抽出結果

グループ化による合計

抽出例    役職別の社員数と基本給与の合計額を表示する
設定方法     デザイングリッドに「集計」行を表示(メニュー「Σ(集計)」ボタンクリック)
させ、各フィールドは集計欄を下記のとおり選択する
「役職コード」:グループ化
「役職名」  :先頭
「社員コード」:カウント
「基本給与」 :合計

《解説》

任意のフィールドをグループ化させ、合計値や平均値を求めることができます。今回抽出条件は設定していませんが、グループ化したうえで更に条件で抽出することが可能です。

《抽出条件の設定》

グループ化による集計

《抽出結果》

グループ化による集計

条件分岐(IIF関数)

抽出例    生年月日が 1995/01/01 を基準にベテランチームとヤングチームに分け、
ヤングのみを抽出する
設定方法     新しいフィールドに チーム: IIf([生年月日]<#1995/01/01#,"ベテラン","ヤング")を入力する

《解説》

IIF関数を使用した条件分岐による抽出例です(ExcelのIF関数と同様の動作です)。

例の式を解説すると、まず条件式(生年月日フィールドが1995年1月1日より前かどうか)を指定し、条件に一致する場合は ベテラン 、一致しない場合は ヤング を表示します。今回は ヤング のみを抽出するため、抽出条件に ヤング と入力します。

《抽出条件の設定》

IIF関数による条件分岐の抽出条件

《抽出結果》

IIF関数による条件分岐の抽出結果

ワイルドカードを使用した複雑な抽出

抽出例    電話番号の市外局番が「090」または「080」で、末尾が「5~9」の電話番号を抽出する
設定方法     「電話番号」の抽出条件に 0[89]0*[5-9] を入力する

《解説》

前述の「部分一致」では、ワイルドカードとして「(アスタリスク)」を使用したあいまい検索を紹介しましたが、ワイルドカードにはさまざまな種類があります。ここでは、[ ](角かっこ)を組み合わせた例を紹介します。

[ ]は、中に指定した文字を含むレコードを抽出するワイルドカードです。[89]と指定すると、8または9を含むレコードが抽出され、「5-9」と指定すると、5から9までの範囲の文字を含むレコードが抽出されます。

《抽出条件の設定》

ワイルドカードを使用した複雑な抽出条件

《抽出結果》

ワイルドカードを使用した抽出結果

プロパティ設定による抽出

抽出例    基本給与の高い順からトップ5を表示する
設定方法     基本給与を降順で並び替えしたうえで、プロパティの「トップ値」に 5 を入力する

《解説》

クエリのデザインビューでは、さまざまなプロパティを設定できます。プロパティは「プロパティシート」という専用画面で設定し、デザインビュー上部の「プロパティシート」ボタンをクリックすると表示されます。

今回は、プロパティの中でも「トップ値」に 5 を入力し、並べ替えを 降順 に設定することで、表示件数を5件に絞り込んだ例を紹介します。このように、抽出条件を設定しなくても、プロパティの設定だけでレコードを絞り込むことができる場合があります

《抽出条件の設定》

プロパティを使用した抽出条件

《抽出結果》

プロパティを使用した抽出結果

パラメータークエリ

抽出例    社員名にその都度条件を入力して抽出する
設定方法     「社員名」の抽出条件に [社員名を入力してください] と入力します

《解説》

パラメータークエリは、選択クエリの一種で、抽出条件をクエリ実行時に手動で指定できます。例えば、毎月日付の範囲指定でデータ抽出を行う業務では、デザインビューで抽出条件を変更する手間を省き、効率的にデータ抽出を行えます。

《抽出条件の設定》

パラメータークエリの設定

《抽出結果》

クエリを実行すると条件入力のダイアログが表示されますので、今回は 小林愛 と入力します。

パラメータークエリの実行結果

サブクリエを使用した抽出

抽出例    全社員の給与平均よりも高い給与を貰っている社員を抽出する
設定方法     「基本給与」にSQL文 (SELECT AVG(基本給与) FROM M_社員基本情報マスタ)
を入力する

《解説》

サブクエリとは、クエリの中に別のクエリを記述するもので、抽出条件に使用したり、フィールドとして計算結果を算出したり、一時的なテーブルとして使用したりするなど、さまざまな用途があり、複雑な抽出条件を実現できます。今回の例では、平均給与を求めるサブクエリ(SQL文)を基本給与の抽出条件に指定することで、平均給与よりも高い給与の社員を抽出しています(平均給与が30万円の場合、30万円を超える給与が抽出されます)。

《抽出条件の設定》

サブクエリによる抽出条件

《抽出結果》

サブクエリによる抽出結果

Dlookup関数を使用した抽出

抽出例    人事部所属の社員のみを抽出する
設定方法     「所属コード」に =DLookUp("所属コード","M_所属マスタ","所属名='人事部'")
を入力する

《解説》

DLookup関数は、定義域集計関数の一つで、抽出条件に使用できます。この例では、本来であれば完全一致パターンで抽出できるデータを、テーブル間の結合(JOIN)を行わずに抽出しています。M_社員基本情報マスタには「所属名」フィールドが存在しませんが、M_所属マスタから 人事部 のレコードを検索し、その結果を抽出条件として使用しています。

《抽出条件の設定》

Dlookup関数を使用した抽出条件

《抽出結果》

DLookup関数を使用した抽出結果

自己結合

抽出例    自分の次に基本給与が高い社員をそれぞれ表示する
設定方法     「M_社員基本情報マスタ」を結合線無しで2つ配置し、2つ目テーブルの
「基本給与」抽出条件に (SELECT MAX(基本給与) FROM M_社員基本情報マスタ AS T2 WHERE T2.基本給与<M_社員基本情報マスタ.基本給与) を入力する

《解説》

自己結合は、同じテーブル内のレコードを比較するクエリのパターンです。結合線を結ばずに同じテーブルを2つ配置すると、全レコードの組み合わせが表示されます。この例では、最も高額な給与を求めつつ、比較元の社員よりも給与が少ない社員を抽出することで、レコードの比較を行っています。

《抽出条件の設定》

自己結合の抽出条件

《抽出結果》

自己結合の抽出結果

まとめ

この記事では、Accessの選択クエリにおける抽出条件の20パターンについて解説しました。抽出条件は、今回ご紹介した以外にもさまざまなパターンがあり、また、ご紹介したパターン自体も、応用や組み合わせによってさらに多くの活用方法があります。
まずは基本的なパターン(1~13くらいまで)をしっかり押さえておき、あとは実際に必要になった際に改めて試しながら習得していきましょう。

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