【SQL基礎】LIKE演算子による条件指定
本項では、LIKE演算子について説明していきます。
文字列の部分一致検索
本連載でここまでに出てきた演算子では、文字列で検索を行う場合は、基本的に「=」演算子を使用することになるかと思います。
この場合は、文字列が完全に一致するものしか判定できません。
しかし、完全に一致するかしないかでしか検索を行えないとなると、例えば、メールの件名にあるプロジェクト名が含まれているものだけ抽出したいとか
住所データの中から特定の地域に住んでいる人だけ抽出したいとか言った場合など、不便な場面も出てきます。
そこで大体のプログラミング言語には、部分一致検索用の関数が用意されています。
SQLでは、LIKE演算子がそれになります。
LIKE演算子の基本構文
LIKE演算子は、対象の文字列が指定したパターンに一致した場合にTRUEを返します。
対象文字列 LIKE パターン文字列
否定形の場合は下記になります。
対象文字列 NOT LIKE パターン文字列
このパターン文字列のところで、ワイルドカードという特殊な記号を使用することで部分一致検索を実現します。
ちなみに、ワイルドカードを使わなかった場合は「=」と同じで完全一致となります
LIKE演算子で使用できるワイルドカードは以下になります。
ワイルドカード | 意味 |
% | 0文字以上の任意の文字列 |
_ | 任意の1文字 |
それでは、実際にLIKE演算子を使て検索してみましょう。
前回に引き続き、以下のテーブルとデータを使用します。
前方一致検索
まずは、指定の文字列で始まるかどうかをみる前方一致検索をしてみましょう
SELECT * FROM teachers WHERE name like "タカ%";
名前がタカから始まる人のデータのみを抽出しています。
このように「文字列%」とすることで前方一致で検索することができます。
注意点としては、「%」は0文字以上の任意の文字列なので、この場合「タカ〇〇…」だけでなく「タカ」だけの文字列でもパターンにマッチします。
今度は先ほどのタカのカをワイルドカードの「_」に置き換えて検索してみましょう。
SELECT * FROM teachers WHERE name like "タ_%";
今回は、タ+任意の1文字+0文字以上の任意の文字列なので、「タカシ」だけでなく「タロウ」もパターンにマッチしました。
後方一致検索
今度は、逆に指定の文字列で終わるかどうかをみる後方一致検索をしてみます。
SELECT * FROM teachers WHERE address like "%県";
住所が県の人のデータを抽出しています。
このように、「%文字列」とすることで後方一致検索が可能です。
中間一致検索
今度は、指定の文字列が含まれているが、前方一致でも後方一致でもない場合にマッチする中間一致検索をしてみます。
SELECT * FROM teachers WHERE name LIKE "_%ウ%_";
名前の中間が「ウ」の人のデータのみ抽出しています。
前方一致も後方一致もしてはいけないので、このように「_%文字列%_」とすることで中間地一致検索をすることができます。
部分一致検索
最後に、指定の文字列が含まれているかどうかみる部分一致検索をしてみます。
SELECT * FROM teachers WHERE name LIKE "%ウ%";
名前に「ウ」が含まれている人のデータのみ抽出しています。
指定文字列がどこかに含まれていればいいので、「%文字列%」とすることで部分一致検索をすることができます。
中間一致とは違ってどこかに含まれていればいいので、後方一致している「タロウ」の行もマッチします。
指定の文字列を含まない検索
ここまで、パターンにマッチするもを検索してきましたが、マッチしないものを検索したい場合は否定形の「NOT LIKE」を使用します。
SELECT * FROM teachers WHERE address NOT LIKE "%東京%";
住所に「東京」を含まない人のデータのみ抽出しています。
今回の学習ポイント
・文字列の部分一致検索にはLIKE演算子を使用する。
・LIKE演算子では二つのワイルドカードを使用できる。
練習問題
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。 [sql] CREATE DATABASE worldcup2014;
use worldcup2014
source C:\worldcup2014.sql
[/sql]
2.名前が「フェル」で始まって、「ン」以外で終わる人のデータを「players」テーブルから抽出してください。
3.名前が「アン」で始まって6文字の名前の選手の情報を「players」テーブルから抽出してください。
ただし、WHERE句ではlike演算子のみを使うこととする。