SQLのLIKE句の使い方
SQLのLIKE句は、あいまい検索を行う際に使用するクエリの手法です。文字列の検索にワイルドカードと呼ばれる文字記号を用いて、必要なデータを抽出することができます。分かりやすく言うと、膨大なデータから、パターンマッチングを行ってデータを探すための表記法を指します。
LIKE句はどこで使うのか?
LIKE句は、データベースに問い合わせするためのクエリで使用するもので、SQLのSELECT文で使用します。SELECT文は、SQLのテーブルに格納されているデータを検索するデータ操作言語(DML)です。SELECT文によってDBMSに対してクエリが発行され、必要なデータを得ることができます。
SELECT文の基本構文
SELECT文は、格納されているデータを紹介するためのデータ操作言語です。ここでは、LIKE句を理解するうえで欠かせないSELECT文を先に学びます。
SELECT文の基本構文は、次のように表すことができます。
SELECT カラム名1[, カラム名2,,] FROM テーブル名;
ここで示したカラム名はデータの列の名称で、複数のデータ列を取り込む場合は、それぞれのカラム名を記載します。また、データは表を意味するテーブルに格納されており、そのテーブル名を指定します。
すべてのデータ列を取り込む場合は、 ”SELECT * FROM テーブル名;” とし、 ”*” のワイルドカード文字で全体を指定します。
SELECT文のWHERE句を学ぶ
SELECT文では、WHERE句を使って抽出するデータの条件を指定することができます。具体的には、 ”SELECT カラム名 FROM テーブル名 WHERE 抽出条件となるカラム名 比較演算子 比較する値;” の構文に従います。
例えば、指定するオフィスに勤務する従業員は次のように、抽出することができます。
SELECT EmployeeID,name FROM EmployeeDirectory WHERE Office=’A001’;
比較演算子は、 ”=” が等しい場合、 ”>” が大きい場合、 ”<” が小さい場合です。その値以上が ”>=” 、値以下が ”<=” 、等しくない場合が ”!=” です。
LIKE句であいまい条件を指定する
これまでに、SELECT文とWHERE句で抽出するデータの条件を指定できることを学びました。WHERE句の検索条件は、複数の条件を論理演算子で示すことができ、LIKE句は検索条件があいまいな場合に使用します。
構文は、 ”SELECT カラム名 FROM テーブル名 WHERE 抽出条件となるカラム名 LIKE ’あいまい検索する文字’ ;” のように用います。
ここで示す ’あいまい検索する文字’ は、ワイルドカード文字が使用できます。ワイルドカード文字の ’%’ は0文字以上の任意の文字列で、 ’_’ は任意の1文字を指します。また、 ’[^]’ は除外を意味します。
例えば、900から始まる従業員番号を持つ従業員の登録情報を抽出する場合は、次のように、クエリを発行します。
SELECT * FROM EmployeeDirectory WHERE EmployeeID LIKE ’900%’;
LIKE句を使って色々な検索方法を学ぶ
ここでは、LIKE句を使って色々な検索方法を学んでいきます。先の例では、900から始まる従業員番号を持つ従業員の登録情報を抽出する例として以下のSELECT文を使用しました。
テーブル名がEmployeeDirectory、抽出条件となるカラム名がEmployeeIDとすると、次のように表すことができます。
SELECT * FROM EmployeeDirectory WHERE EmployeeID LIKE ’900%’;
以降は、この例に基づいて検索手法の違いについて学んでいきます。
前方一致検索を行う
前方一致検索は、LIKE句で用いるあいまい検索の文字列の後半に、ワイルドカード文字を指定する方法です。すべてのカラムを対象とする場合は、 ”SELECT * FROM テーブル名 WHERE カラム名 LIKE ’文字列%’” とします。前半の ’文字列’ が合致すれば後半の ’%’ は0文字以上の任意の文字が該当します。
先の例では、LIKEに続くあいまい検索をする文字列は ’900%’ でした。これは前半が ’900’ 、後半が ’%’ ですので、前方一致検索の手法を用いた例だということが分かります。
後方一致検索を行う
後方一致検索は、あいまい検索の文字列の前半にワイルドカード文字を指定する方法です。使う場合の構文は、 ”SELECT * FROM テーブル名 WHERE カラム名 LIKE ’%文字列’” とします。前半の ’%’ は0文字以上の任意の文字で後半の ’文字列’ が合致すれば必要な文字列を探すことができます。
例で例えると、従業員番号の下2桁が ’00’ で終わる従業員データは、次のように表すことができます。
SELECT * FROM EmployeeDirectory WHERE EmployeeID LIKE ’%00’;
部分一致検索を行う
部分一致検索は、あいまい検索の前後の文字列が不明な場合に使用する方法です。構文は、 ”SELECT * FROM テーブル名 WHERE カラム名 LIKE ’%文字列%’” のように、指定する ’文字列’ の前後にワイルドカードの ’%’ を追加します。
先のあいまい検索の例では、前方一致検索は ’900%’ を指定し、後方一致検索は ’%00’ を指定しました。部分一致検索は、前後の ’%’ を入れますので、 ’%100%’ とすると従業員番号の中に ’100’ が含まれる任意の文字が抽出されます。
この場合は従業員番号なので数字の文字を指定しますが、格納されるデータによっては英字などの文字を指定します。
完全一致検索を行う
LIKE句で完全一致検索を行う場合は、文字列にワイルドカード文字を入れずに指定します。具体的には、 ”SELECT * FROM テーブル名 WHERE カラム名 LIKE ’文字列’” のように記述します。文字列が特定できる場合は、このような完全一致検索を行うことができます。
LIKEをさらに使い込む
LIKE句では、検索する文字列に ’%’ や ’_’ が含まれている場合、ワイルドカード文字としてではなくリテラル(文字)として解釈させることもできます。この機能はESCAPE句を指定することで有効化します。
例えば検索する文字列に、 ’_’ を含む文字列を検索する場合は、次のようにESCAPE句を用います。
SELECT * FROM EmployeeDirectory WHERE EmployeeID LIKE ’%\_%’ ESCAPE ’\’;
上の例では、エスケープ文字にバックスラッシュ ’\’ を指定し、LIKE句で指定する文字列に ’_’ が含まれていることを示しています。
またLIKE句では、NOT LIKE句というLIKEの否定形式も提供されています。ワイルドカード文字の役割は変わりません。従業員番号が ’9’ で始まる従業員データを除外するには、次のように表すことができます。
SELECT * FROM EmployeeDirectory WHERE EmployeeID NOT LIKE ’9%’;
DBMSに違いによるLIKE句の扱い
LIKE句の用法は、DBMSによってドキュメント化され、情報が提供されています。マニュアルを実際に確認すると、LIKE演算子、LIKE条件などの言い方の違いも見られます。実際に用法を見ると、標準SQLの構文のほか、各社が追加実装した機能も見られます。
DBMSによる違いを具体的に見ると、SQLServerの場合では、ワイルドカード文字に 角括弧 ’[ ]’ を用いることで範囲指定が可能です。Oracle Databaseでは、LIKE以外に正規表現検索に対応するためにREGEXP_LIKE条件が実装されています。
また、PostgreSQLでは、ロケールに従って大文字小文字を区別しない一致などを実装した独自のILIKE句や、POSIX正規表現に対応しています。
【参考】:SQL Server: LIKE (Transact-SQL) 【参考】:Oracle Database SQL言語リファレンス: LIKE条件 【参考】:MySQL 文字列比較関数および演算子 【参考】:PostgreSQL: 関数と演算子 パターンマッチ LIKE演算子
SQLのLIKE句は慣れればさらに活用できる
データが蓄積されると、分析に活用できるので検索条件を学ぶと応用ができます。SQLでは、LIKE句と論理演算子であるORを使用して、複数条件のクエリを発行することもできます。今回学んだLIKE句に慣れたら、より複雑なクエリに活用できるでしょう。
マイナビエージェントに無料登録して
転職サポートを受ける
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから