Developer

【SQL基礎】LIKE演算子による条件指定
2020.12.25
Lv1

【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演算子では二つのワイルドカードを使用できる。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

[sql] CREATE DATABASE worldcup2014;

use worldcup2014

source C:\worldcup2014.sql
[/sql]

1.名前に「アルメ」が含まれる選手のデータを「players」テーブルから抽出してください

答え
[sql] SELECT *
FROM players
WHERE name LIKE "%アルメ%";
[/sql]

「アルメ」が含まれていればいいので、LIKE演算子を使って部分一致検索をします。

2.名前が「フェル」で始まって、「ン」以外で終わる人のデータを「players」テーブルから抽出してください。

答え
[sql] SELECT *
FROM players
WHERE name LIKE "フェル%" AND name NOT LIKE "%ン";
[/sql]

前方一致と後方一致を組み合わせることで検索できます。
ただし、後方一致のほうは、「ン」以外という条件なので否定形の「NOT LIKE」演算子を使用しています。

3.名前が「アン」で始まって6文字の名前の選手の情報を「players」テーブルから抽出してください。
ただし、WHERE句ではlike演算子のみを使うこととする。

答え
[sql] SELECT *
FROM players
WHERE name LIKE "アン____";
[/sql]

アンの前方一致検索ですが、名前が6文字という条件もあるので、アンの後は「%」ではなく「_」を4つ使用します。

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ