クエリの抽出条件の例

クエリの抽出条件とは、クエリ結果に含めるレコードを指定する規則です。すべてのクエリに抽出条件が必要になるわけではありませんが、基になるレコードソースに保存されているすべてのレコードを表示する必要のない場合は、クエリをデザインするときに抽出条件を追加する必要があります。

ここでは、クエリの抽出条件の例をいくつか示します。単純な選択クエリがデザインできることを前提としています。

選択クエリの作成については、「簡単な選択クエリを作成する」を参照してください。

このトピックの内容


クエリ抽出条件の概要

抽出条件は数式に似た文字列で、フィールド参照、演算子 (演算子: 式を構成する記号や単語。これにより、実行する計算の種類を指定します。演算子には、算術演算子、関係演算子、論理演算子、参照演算子などがあります。)、および定数 (定数: 計算されない、したがって変化しない値。たとえば、210 という数値、"四半期売上" という文字列などは、定数です。式や式の計算結果の値は定数ではありません。)から構成されます。Microsoft Office Access 2007 では、クエリ抽出条件を式と呼ぶこともあります。

次の表は、抽出条件の例とその説明です。

抽出条件 説明
>25 and <50 この抽出条件は、"単価" や "梱包単位" など、数値型フィールドに適用されます。"単価" フィールドまたは "梱包単位" フィールドの値が 25 より大きく、かつ 50 より少ないレコードだけが対象になります。
DateDiff ("yyyy", [生年月日], Date()) > 30 この抽出条件は、"生年月日" など、日付/時刻型フィールドに適用されます。誕生日から本日までの年数が 30 より大きいレコードだけが対象になります。
Is Null この抽出条件は、どの型のフィールドにも適用できます。フィールド値が Null であるレコードを示します。

上の例を見てもわかるように、抽出条件は、条件を適用するフィールドのデータ型や使用目的によりまったく異なります。基本的な演算子と定数を使用した単純な抽出条件もあれば、関数や特別な演算子、フィールド参照などを使用した複雑な抽出条件もあります。

ここでは、データ型ごとに、よく使用される抽出条件を示します。ここで示す例が自分の使用目的に合わない場合は、自分専用の抽出条件を記述する必要があります。そのためには、関数、演算子、特殊文字、およびフィールドとリテラルを参照する式の構文に精通しておく必要があります。詳細については、[参照] セクションの記事を参照してください。

ここでは、抽出条件を追加する場所と方法について説明します。抽出条件をクエリに追加するには、そのクエリをデザイン ビューで開く必要があります。次に、抽出条件を指定するフィールドを指定します。フィールドがデザイン グリッドにない場合は、クエリ デザイン ウィンドウからフィールド グリッドにドラッグするか、フィールドをダブルクリックして追加します (フィールドをダブルクリックすると、フィールド グリッドの次の空の列に自動的にフィールドが追加されます)。最後に、抽出条件を [抽出条件] 行に入力します。

[抽出条件] 行で複数のフィールドに対して指定した抽出条件は、AND 演算子で結合されます。つまり、"都道府県" フィールドと "生年月日" フィールドに指定した抽出条件は、次のように解釈されます。

都道府県 = "兵庫県" AND 生年月日 < DateAdd("yyyy", -40, Date())


"都道府県" フィールドと "生年月日" フィールドの抽出条件

コールアウト 1 "都道府県" フィールドと "生年月日" フィールドに抽出条件が指定されています。
コールアウト 2 "都道府県" フィールドに "兵庫県" という値が指定されているレコードだけが、この抽出条件に合致します。
コールアウト 3 年齢が 40 歳以上のレコードだけが、この抽出条件に合致します。
コールアウト 4 両方の条件を満たすレコードだけが、抽出結果に含まれます。

このうちの 1 つだけの条件を満たすようにするには、つまり代替抽出条件がある場合には、どのように入力するといいでしょうか。

代替抽出条件がある場合、または 1 つの独立抽出条件セットだけを満たすのに十分な 2 つの独立抽出条件セットがある場合は、デザイン グリッドの [抽出条件] 行と [または] 行の両方を使用します。


代替抽出条件

コールアウト 1 [抽出条件] 行で "都道府県" フィールドに抽出条件が指定されています。
コールアウト 2 [または] 行で "生年月日" フィールドに抽出条件が指定されています。

[抽出条件] 行と [または] 行で指定した抽出条件は、次に示すように、OR 演算子で結合されます。

都道府県 = "兵庫県" OR 生年月日 < DateAdd("yyyy", -40, Date())

代替抽出条件をさらに追加する場合は、[または] 行の下の行を使用します。

次に進む前に、以下の点に注意してください。

  • 抽出条件が一時的なものまたは頻繁に変更されるものである場合は、クエリ抽出条件を修正する代わりに、クエリ結果をフィルタします。フィルタは、クエリのデザインを変更することなく、クエリ結果を変更する一時的な抽出条件として使用することができます。フィルタの詳細については、「フィルタ: ビューに表示するレコード数を制限する」を参照してください。
  • 抽出条件のフィールドは変化しないが、注目する値が頻繁に変化する場合は、パラメータ クエリを作成します。パラメータ クエリでは、フィールド値を入力するためのメッセージを表示し、ユーザーが入力した値を使用してクエリ抽出条件を作成します。パラメータ クエリの詳細については、「クエリとレポートでパラメータを使用する」を参照してください。

テキスト型、メモ型、およびハイパーリンク型フィールドの抽出条件

以下に、連絡先の情報を保存するテーブルを基にしたクエリの CountryRegion フィールドの例を示します。抽出条件は、デザイン グリッドのフィールドの [抽出条件] 行で指定されています。

CountryRegion フィールドの抽出条件

ハイパーリンク型フィールドに指定している抽出条件は、既定では、フィールド値の表示テキスト部分に適用されます。値のリンク先 Uniform Resource Locator (URL) 部の抽出条件を指定するには、HyperlinkPart 式を使用します。この式の構文は HyperlinkPart([Table1].[Field1],1) = "http://www.microsoft.com/" で、Table1 はハイパーリンク フィールドを含むテーブルの名前、Field1 はハイパーリンク フィールド、および http://www.microsoft.com は抽出する URL です。

対象とするレコードの内容 使用する抽出条件 クエリ結果
値 (China など) に完全一致する "China" CountryRegion フィールドが China に設定されているレコードを返します。
値 (Mexico など) に一致しない Not "Mexico" CountryRegion フィールドが Mexico 以外に設定されているレコードを返します。
指定した文字列 (U など) で始まる Like U*

"U" で始まるすべての国/地域 (UK、USA など) のレコードを返します。

 メモ   式では、アスタリスク (*) は任意の文字列を表します。ワイルドカード文字ともいいます。詳細については、「Access ワイルドカード文字リファレンス」を参照してください。

指定した文字列 (U など) で始まらない Not Like U* "U" 以外の文字で始まるすべての国/地域のレコードを返します。
指定した文字列 (Korea など) を含む Like "*Korea*" 文字列 "Korea" を含むすべての国/地域のレコードを返します。
指定した文字列 (Korea など) を含まない Not Like "*Korea*" 文字列 "Korea" を含まないすべての国/地域のレコードを返します。
指定した文字列 ("ina" など) で終わる Like "*ina" 名前の最後が "ina" であるすべての国/地域 (China や Argentina など) のレコードを返します。
指定した文字列 ("ina" など) で終わらない Not Like "*ina" 名前の最後が "ina" でないすべての国/地域のレコードを返します (China や Argentina などは含まれません)。
Null 値を含む Is Null フィールドに値のないレコードを返します。
Null 値を含まない Is Not Null フィールドに値が含まれているレコードを返します。
長さ 0 の文字列を含む "" (引用符のペア) フィールドが Null ではなく、空白に設定されているレコードを返します。たとえば、別の部門で発生した販売レコードの CountryRegion フィールドには空白値が含まれる場合があります。
長さ 0 の文字列を含まない Not "" CountryRegion フィールドが空白値ではないレコードを返します。
Null 値または長さ 0 の文字列を含む "" Or Is Null フィールドに値がないか、またはフィールドが空白値に設定されているレコードを返します。
Null 値でも空白でもない Is Not Null And Not "" CountryRegion フィールドが空白値でも Null 値でもないレコードを返します。
指定した値 (Mexico など) 以降の値を含む (アルファベット順) >= "Mexico" Mexico のレコードを先頭に、以降アルファベット順に最後の国/地域までのレコードを返します。
指定した範囲内 (A ~ D など) に含まれる Like "[A-D]*" 名前の先頭が "A" ~ "D" で始まる国/地域のレコードを返します。
2 つの値のうちのどちらか一方 (USA または UK など) に一致する "USA" Or "UK" USA および UK のレコードを返します。
値リストのうちの 1 つの値を含む In("France", "China", "Germany", "Japan") リスト内で指定されるすべての国/地域のレコードを返します。
フィールド値の指定位置に指定文字を含む Right([CountryRegion], 1) = "y" この場合、名前の最後の文字が "y" であるすべての国/地域のレコードを返します。
長さ要件を満たす Len([CountryRegion]) > 10 この場合、名前の文字数が 10 文字を超える国/地域のレコードを返します。
指定パターンに一致する Like "Chi??"

名前の文字数が 5 文字であり、かつ最初の 3 文字が "Chi" である国/地域 (China や Chile など) のレコードを返します。

 メモ   式では、? と _ は 1 文字を表します。ワイルドカード文字ともいいます。文字 _ は、文字 ? を使用する式やワイルドカード文字 * を使用する式で使用することはできません。ワイルドカード文字 _ は、ワイルドカード文字 % を含む式で使用できます。

数値型、通貨型、およびオートナンバー型フィールドの抽出条件

以下に、製品の情報を保存するテーブルを基にしたクエリの "単価" フィールドの例を示します。抽出条件は、クエリ デザイン グリッドのフィールドの [抽出条件] 行で指定します。

単価フィールドの抽出条件

対象とするレコードの内容 使用する抽出条件 クエリ結果
値 (100 など) に完全一致する 100 製品の単価が 100 円であるレコードを返します。
値 (1000 など) に一致しない Not 1000 製品の単価が 1000 円以外であるレコードを返します。
指定した値 (100 など) より小さい値を含む < 100
<= 100
単価が 100 円より小さい (<100) レコードを返します。2 番目の表現 (<=100) は、単価が 100 円以下のレコードを返します。
指定した値よりも大きい値 (99.99 など) を含む >99.99
>=99.99
単価が 99.99 円よりも大きいレコードを返します (>99.99)。2 番目の表現 (>=99.99) は、単価が 99.99 円以上のレコードを返します。
2 つの値のうちのどちらか一方 (20 または 25 など) を含む 20 or 25 単価が 20 円または 25 円のレコードを返します。
値が指定範囲内にある >49.99 and <99.99
- または -
Between 50 and 100
単価が 49.99 ~ 99.99 円の範囲内にあるレコードを返します (49.99 円と 99.99 円は含みません)。
値が指定範囲外にある <50 or >100 単価が 50 ~ 100 円の範囲内にないレコードを返します。
指定した複数の値のいずれかを含む In(20, 25, 30) 単価が 20 円、25 円、30 円のいずれかであるレコードを返します。
指定した数値で終わる値を含む Like "*4.99"

単価が "4.99" で終わるレコード (4.99 円、14.99 円、24.99 円など) を返します。

 メモ   式では、* と % は任意の文字列を表します。ワイルドカード文字ともいいます。文字 % は、文字 * を使用する式やワイルドカード文字 ? を使用する式で使用することはできません。ワイルドカード文字 % は、ワイルドカード文字 _ を含む式で使用できます。

Null 値を含む Is Null "単価" フィールドに値が入力されていないレコードを返します。
非 Null 値を含む Is Not Null "単価" フィールドに値が含まれているレコードを返します。

日付/時刻型フィールドの抽出条件

以下に、受注情報を保存するテーブルを基にしたクエリの "受注日" フィールドの例を示します。抽出条件は、クエリ デザイン グリッドのフィールドの [抽出条件] 行で指定します。

受注日フィールドの抽出条件

対象とするレコードの内容 使用する抽出条件 クエリ結果
値 (2/2/2006 など) に完全一致する #2/2/2006# 2006 年 2 月 2 日に行われた取引のレコードを返します。Access で日付値とテキスト文字列とを区別できるように、データ値は必ず # 文字で囲みます。
値 (2/2/2006 など) に一致しない Not #2/2/2006# 2006 年 2 月 2 日以外の日に行われた取引のレコードを返します。
指定日付 (2/2/2006 など) より前の値を含む < #2/2/2006#

2006 年 2 月 2 日より前に行われた取引のレコードを返します。

この日付以前に行われた取引を表示するには、< 演算子の代わりに <= 演算子を使用します。

指定日付 (2/2/2006 など) より後の値を含む > #2/2/2006#

2006 年 2 月 2 日より後に行われた取引のレコードを返します。

この日付以降に行われた取引を表示するには、> 演算子の代わりに >= 演算子を使用します。

値が指定日付範囲内にある >#2/2/2006# and <#2/4/2006#

2006 年 2 月 2 日~ 2006 年 2 月 4 日に行われた取引のレコードを返します。

Between 演算子を使用して日付範囲を指定することもできます。たとえば、「Between #2/2/2006# and #2/4/2006#」は「>#2/2/2006# and <#2/4/2006#」と同じです。

値が指定日付範囲外にある <#2/2/2006# or >#2/4/2006# 2006 年 2 月 2 日より前または 2006 年 2 月 4 日より後に行われた取引のレコードを返します。
2 つの値のうちのどちらか一方 (2/2/2006 または 2/3/2006 など) を含む #2/2/2006# or #2/3/2006# 2006 年 2 月 2 日または 2006 年 2 月 3 日に行われた取引のレコードを返します。
指定した複数の値のいずれかを含む In (#2/1/2006#, #3/1/2006#, #4/1/2006#) 2006 年 2 月 1 日、2006 年 3 月 1 日、または 2006 年 4 月 1 日に行われた取引のレコードを返します。
日付が指定月内 (年に関係なく、12 月など) にある DatePart("m", [SalesDate]) = 12 任意の年の 12 月に行われた取引のレコードを返します。
日付が指定四半期内 (年に関係なく、第 1 四半期など) にある DatePart("q", [SalesDate]) = 1 任意の年の第 1 四半期に行われた取引のレコードを返します。
本日の日付を含む Date() 現在の日付に行われた取引のレコードを返します。本日の日付が 2006 年 2 月 2 日である場合、"受注日" フィールドが 2006 年 2 月 2 日に設定されているレコードが表示されます。
前日の日付を含む Date()-1 現在の日付の前日に行われた取引のレコードを返します。本日の日付が 2006 年 2 月 2 日である場合、2006 年 2 月 1 日のレコードが表示されます。
次の日の日付を含む Date() + 1 現在の日付の翌日に行われる取引のレコードを返します。本日の日付が 2006 年 2 月 2 日である場合、2006 年 2 月 3 日のレコードが表示されます。
日付が現在の週にある DatePart("ww", [SalesDate]) = DatePart("ww", Date()) and Year( [SalesDate]) = Year(Date()) 現在の週に行われた取引のレコードを返します。週は日曜日に始まり土曜日に終わります。
日付が前週にある Year([SalesDate])* 53 + DatePart("ww", [SalesDate]) = Year(Date())* 53 + DatePart("ww", Date()) - 1 前週に行われた取引のレコードを返します。週は日曜日に始まり土曜日に終わります。
日付が次週にある Year([SalesDate])* 53+DatePart("ww", [SalesDate]) = Year(Date())* 53+DatePart("ww", Date()) + 1 次週に行われる取引のレコードを返します。週は日曜日に始まり土曜日に終わります。
日付が直前の 7 日間にある Between Date() and Date()-6 直前の 7 日間に行われた取引のレコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年 1 月 27 日から 2006 年 2 月 2 日までのレコードが表示されます。
日付が現在の月に属する Year([SalesDate]) = Year(Now()) And Month([SalesDate]) = Month(Now()) 現在の月のレコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年 2 月のレコードが表示されます。
日付が前月に属する Year([SalesDate])* 12 + DatePart("m", [SalesDate]) = Year(Date())* 12 + DatePart("m", Date()) - 1 前月のレコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年 1 月のレコードが表示されます。
日付が次の月に属する Year([SalesDate])* 12 + DatePart("m", [SalesDate]) = Year(Date())* 12 + DatePart("m", Date()) + 1 次の月のレコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年 3 月のレコードが表示されます。
日付が直前の 30 日または 31 日間にある Between Date( ) And DateAdd("M", -1, Date( )) 1 か月間の販売レコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年 1 月 2 日から 2006 年 2 月 2 日のレコードが表示されます。
日付が現在の四半期に属する Year([SalesDate]) = Year(Now()) And DatePart("q", Date()) = DatePart("q", Now()) 現在の四半期のレコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年の第 1 四半期のレコードが表示されます。
日付が前の四半期に属する Year([SalesDate])*4+DatePart("q",[SalesDate]) = Year(Date())*4+DatePart("q",Date())- 1 前の四半期のレコードを返します。本日が 2006 年 2 月 2 日である場合、2005 年の第 4 四半期のレコードが表示されます。
日付が次の四半期に属する Year([SalesDate])*4+DatePart("q",[SalesDate]) = Year(Date())*4+DatePart("q",Date())+1 次の四半期のレコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年の第 2 四半期のレコードが表示されます。
日付が現在の年にある Year([SalesDate]) = Year(Date()) 現在の年のレコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年のレコードが表示されます。
日付が前年にある Year([SalesDate]) = Year(Date()) - 1 前年に行われた取引のレコードを返します。本日が 2006 年 2 月 2 日である場合、2005 年のレコードが表示されます。
日付が次の年にある Year([SalesDate]) = Year(Date()) + 1 次の年に行われる取引のレコードを返します。本日が 2006 年 2 月 2 日である場合、2007 年のレコードが表示されます。
日付が 1 月 1 日から本日までの間にあるレコード (本年これまでのレコード) Year([SalesDate]) = Year(Date()) and Month([SalesDate]) <= Month(Date()) and Day([SalesDate]) <= Day (Date()) 現在の年の 1 月 1 日から本日までの間に行われた取引のレコードを返します。本日が 2006 年 2 月 2 日である場合、2006 年 1 月 1 日から 2006 年 2 月 2 日までの間のレコードが表示されます。
日付が過去 < Date() 過去に行われた取引のレコードを返します。
日付が未来 > Date() 未来に予定されている取引のレコードを返します。
Null 値をフィルタする Is Null 取引の日付が設定されていないレコードを返します。
非 Null 値をフィルタする Is Not Null 取引の日付が設定されているレコードを返します。

その他のフィールドの抽出条件

Yes/No 型フィールド    [抽出条件] 行で、「Yes」を入力すると、チェック ボックスがオンであるレコードが対象になります。「No」を入力すると、チェック ボックスがオフであるレコードが対象になります。

添付ファイル    [抽出条件] 行で、「Is Null」を入力すると、添付ファイルのないレコードが対象になります。「Is Not Null」を入力すると、添付ファイルのあるレコードが対象になります。

ルックアップ フィールド    ルックアップ フィールドには、(外部キーを使用して) 既存のデータ ソースの値をルックアップするものと、ルックアップ フィールドが作成されたときに指定された値のリストに基づいたものとの 2 種類あります。

指定された値のリストに基づくルックアップ フィールドはテキスト型のフィールドであり、使用できる抽出条件は他のテキスト フィールドと同じです。

既存のデータ ソースの値に基づくルックアップ フィールドで使用できる抽出条件は、ルック アップ対象のデータのデータ型ではなく、外部キーのデータ型により変わります。たとえば、従業員名を表示するルックアップ フィールドで、数値型の外部キーを使用している場合などです。フィールドにはテキストではなく数値が保存されるので、数値を対象にした抽出条件 (>2) を使用します。

外部キーのデータ型がわからない場合は、デザイン ビューでソース テーブルを調べて、フィールドのデータ型を確認します。その方法を次に示します。

  1. ナビゲーション ウィンドウでソース テーブルを検索します。
  2. 次のいずれかの方法で、テーブルをデザイン ビューで開きます。
    • テーブルをクリックし、Ctrl キーを押しながら Enter キーを押します。
    • テーブルを右クリックし、[デザイン ビュー] をクリックします。
  3. 各フィールドのデータ型は、テーブルのデザイン グリッドの [データ型] 列に表示されます。

複数値フィールド    複数値フィールドのデータは、フィールドを表現するために Office Access 2007 で作成され入力される隠しテーブルの行として保存されます。クエリ デザイン ビューでは、展開可能なフィールドを使用して、[フィールド リスト] に表されます。複数値フィールドの抽出条件を使用するには、隠しテーブルの単一行に対する抽出条件を指定します。その方法を次に示します。

  1. 複数フィールドを含むクエリを作成し、デザイン ビューで開きます。
  2. 複数値フィールドの横にあるプラス記号 (+) をクリックしてフィールドを展開します。フィールドが既に展開されている場合は、マイナス記号 (-) になっています。フィールド名のすぐ下に、複数値フィールドの単一値を表すフィールドが表示されます。このフィールドの名前は、複数値フィールドの名前と同じになり、文字列 ".Value" が追加されます。
  3. 複数値フィールドと単一値フィールドを、デザイン グリッドの別の列にドラッグします。結果に完全な複数値フィールドだけを表示する場合は、単一値フィールドの [表示] チェック ボックスをオフにします。
  4. フィールドの値のデータ型に適した抽出条件を、単一値フィールドの [抽出条件] 行に入力します。
  5. 複数値フィールドの各値が、指定した抽出条件によって個別に評価されます。たとえば、一連の数値を保存する複数値フィールドがあるとします。>5 AND <3 という抽出条件を指定すると、5 より大きい値が最低 1 つあり、かつ 3 より小さい値が最低 1 つあるレコードに一致します。
 
 
適用対象:
Access 2007