Microsoft Access Club >SQL入門講座 >このページ >次頁 < 前項  サイト内検索
 

あいまいな条件抽出 - LIKE演算子 : SQL入門講座



WHERE句でレコード検索を行う方法を前回ご紹介しました。検索には、条件を指定するケースとあいまいな条件検索を行うケースとがあります。

ここでは、あいまい検索を取り上げ、 記述方法とWHERE句に用いる比較演算子の一覧表の解説を予定しています。なお、サンプルは、出張管理テーブルを予定しています。

あいまい検索 - LIKE演算子

WHERE句で検索条件を指定するときにLIKE演算子を使用すると、あいまい検索を行うことができます。あいまい検索とは、ある文字列の中で特定の文字が含まれている場合など不確定な条件検索をいいます。

  • LIKE演算子とは、ワイルドカードを使って文字列を検索するための演算子です。 Like演算子とワイルドカードを用いた検索は「あいまい検索」とも呼ばれ、幅広い対応が可能になります。
主なワイルドカード

主なワイルドカード以下のとおりです。

ワイルドカード 説明 事例
アスタリスク (*)
パーセント(%)
0文字以上の任意の文字列を表す。 名前 LIKE "鈴木*"(鈴木以下の文字は何でも検索する。鈴木美恵子、鈴木幸平などが該当する。)
疑問符(?)
アンダスコア(_)
任意の一文字を表す。 名前 LIKE "鈴木?"(鈴木以下の1文字は何でも検索する。鈴木仁、鈴木元などが該当する。)
シャープ(#) 任意の半角の1数字を表す。 数字 LIKE #32(132、332などが該当する。)
[文字リスト] 文字リストに含まれる全角、または半角の1文字 名前 LIKE "[田中]"(田、中が該当する。)
[!文字リスト] 文字リストに含まれない全角、または半角の1文字 名前 LIKE "[!田中]"(田、中以外が該当する。)
[文字A-文字B] 文字A〜文字Bの範囲の全角または半角の1文字 名前 LIKE "[A-C]"(A、B、Cが該当する。)
[!文字A-文字B] 文字A〜文字Bの範囲以外の全角または半角の1文字 名前 LIKE "[!A-U]"(V、W、Y、Uが該当する。)
応用
  • 数字以外の1文字 : [!0−9]
  • !という文字と数字の1文字 : ![0−9]
留意点
  • また、[]で範囲を指定する場合は昇順で指定する必要があります。[A−Z]は正しく検索が行われますが、[Z−A]を指定した場合は何も検索されません。
  • [](ブラケット)のなかを空白にすると、、長さ0の文字列("")を検索することができるようになります。

基本構文

LIKE演算子を用いるには、以下のように記述します。

  • SELECT tablename FROM fieldname WHERE句 fieldname LIKE wildcard+文字列

この構文も、選択クエリの基本文からアレンジが可能です。

サンプルテーブル(出張管理)は以下のものを予定しています。

ID社員名出発日帰社日目的地旅費額
2 橘 修平 2004/07/04 2004/07/05 京都支店 \28,400
4 柴田 喜一 2004/07/17 2004/07/21 東京支店 \78,310
1 正道 良一 2004/07/02 2004/07/05 広島支店 \56,720
3 田中 邦子 2004/07/10 2004/07/15 福井支店、石川支店 \98,200

サンプル構文

「社員名」フィールドの値のなかで田中という文字を持つレコードのみを抽出します。

  • SELECT * FROM 出張管理 WHERE 社員名 LIKE "*田中*";

「社員名」フィールドの値のなかで田、または中という文字を持つレコードのみを抽出します。

  • SELECT * FROM 出張管理 WHERE 社員名 LIKE "*[田中]*";

「社員名」フィールドの値のなかで田、または中という文字を持たないレコードのみを抽出します。

  • SELECT * FROM 出張管理 WHERE 社員名 NOT LIKE "*[田中]*";
留意点
  1. 社員名フィールドはテキスト型なので、抽出条件値をダブルクォーション(")で囲む必要があります。
  2. 文字列は本来ダブルクォーション(")で囲みますが、VBAでSQLで用いる場合はシングルクォーションで囲みます。
  3. NOT LIKE と記述することで、否定形でも利用できます。
DAOを用いた事例
  • SELECT * FROM 出張管理 WHERE 社員名 LIKE "*田中*";

DAOを用いてQ_sampleクエリを作成し開きます。

Sub MySQLSelect()

On Error GoTo エラー

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim mySQL As String
    
    Set db = CurrentDb()

    ' SQLを記述します。
    mySQL = "SELECT * FROM 出張管理 WHERE 社員名 LIKE '*田中*';" 
        
    Set qdf = db.CreateQueryDef("Q_sample", mySQL) ' Q_sampleを作成します。
    
    DoCmd.OpenQuery qdf.Name ' クエリを開きます。
                
    db.Close: Set db = Nothing

    Exit Sub
エラー:
    
    If Err.Number = 3012 Then
        db.QueryDefs.Delete "Q_sample" ' Q_sampleを削除します。
        Resume
    Else
        MsgBox Err.Number & " : " & Err.Description
    End If
    
End Sub
留意点
  • VBA内でSQLを用いる場合は、前後をダブルクォーション(")で囲みます。
  • 同名のクエリが既に存在しているとエラーになるので、削除します。
結果

下記のようにクエリが開きます。

クエリで作成

このSQLをクエリで作成すると、下記のようになります。

2004/08/14

ページの先頭へ 前ページへ戻る

 


あいまいな条件抽出 - LIKE演算子 : SQL入門講座


-Microsoft Access Club-

PLESKコンパネインストール済みの専用・共有レンタルサーバーを提供しています。日本語版で信頼性は抜群です。
PLESKインストール済みの専用・共有レンタルサーバーを提供しています。
信頼性は抜群です。コンパネ表記は日本語で信頼性は抜群です。