Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのwhere句でのlikeの使用方法についてまとめています。

SQLのwhere句でlikeを使ったあいまい検索

SQLのwhere句でlike演算子を使ったあいまい検索が可能です。

以下は、Gで始まるfirst_name(姓名の名)のレコードを抽出する例です。%はワイルドカード文字です。

mysql> select * from employees
where first_name like 'G%'
limit 10;

+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10015 | 1959-08-19 | Guoxiang   | Nooteboom | M      | 1987-07-02 |
|  10055 | 1956-06-06 | Georgy     | Dredge    | M      | 1992-04-27 |
|  10063 | 1952-08-06 | Gino       | Leonhardt | F      | 1989-04-08 |
|  10075 | 1960-03-09 | Gao        | Dolinsky  | F      | 1987-03-19 |
|  10121 | 1962-07-14 | Guoxiang   | Ramsay    | M      | 1989-05-03 |
|  10124 | 1962-05-23 | Geraldo    | Marwedel  | M      | 1991-09-05 |
|  10133 | 1963-12-12 | Giri       | Isaak     | M      | 1985-12-15 |
|  10202 | 1956-01-05 | Greger     | Lichtner  | M      | 1991-10-06 |
|  10207 | 1955-05-28 | Girolamo   | Anandan   | F      | 1992-10-11 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.00 sec)

likeによるあいまい検索は標準SQLで、主要DBMS全てで同様に使用可能です。

where句で複数のあいまい検索

where句で複数のあいまい検索をおこないたい場合は、likeによる条件式をorもしくはandで複数接続します。

以下は、first_nameがGから始まるか、もしくはlast_nameがDから始まりeで終わるレコードを抽出する例です。

mysql> select * from employees where first_name like 'G%' or last_name like '
D%e' limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10015 | 1959-08-19 | Guoxiang   | Nooteboom | M      | 1987-07-02 |
|  10050 | 1958-05-21 | Yinghua    | Dredge    | M      | 1990-12-25 |
|  10055 | 1956-06-06 | Georgy     | Dredge    | M      | 1992-04-27 |
|  10063 | 1952-08-06 | Gino       | Leonhardt | F      | 1989-04-08 |
|  10075 | 1960-03-09 | Gao        | Dolinsky  | F      | 1987-03-19 |
|  10121 | 1962-07-14 | Guoxiang   | Ramsay    | M      | 1989-05-03 |
|  10124 | 1962-05-23 | Geraldo    | Marwedel  | M      | 1991-09-05 |
|  10133 | 1963-12-12 | Giri       | Isaak     | M      | 1985-12-15 |
|  10202 | 1956-01-05 | Greger     | Lichtner  | M      | 1991-10-06 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.00 sec)

【関連記事】
【SQL】LIKE句の基本的な使い方~複数検索する場合の方法まで解説 

where句のlikeで正規表現

標準SQLでは、likeのあいまい検索に正規表現を使うことはできません。しかし、一部のDBMSでは、拡張SQLとして正規表現が使えるものもあります。

例えばMySQLでは、rlike(もしくはregexp)という演算子で正規表現を扱うことが可能です。

以下は、first_nameがGで始まり途中にrが入り、iで終わるか、last_nameがLで始まり途中にtが入るレコードを抽出する例です。

mysql> select * from employees
where first_name rlike '^G.*r.*i$'
or last_name rlike '^L.*t.*'
limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10038 | 1960-07-20 | Huan       | Lortz     | M      | 1989-09-20 |
|  10041 | 1959-08-27 | Uri        | Lenart    | F      | 1989-11-12 |
|  10063 | 1952-08-06 | Gino       | Leonhardt | F      | 1989-04-08 |
|  10082 | 1963-09-09 | Parviz     | Lortz     | M      | 1990-01-03 |
|  10133 | 1963-12-12 | Giri       | Isaak     | M      | 1985-12-15 |
|  10151 | 1959-03-06 | Itzchak    | Lichtner  | M      | 1990-04-10 |
|  10176 | 1957-01-24 | Brendon    | Lenart    | F      | 1994-12-22 |
|  10178 | 1963-03-13 | Valery     | Litvinov  | M      | 1986-10-07 |
|  10202 | 1956-01-05 | Greger     | Lichtner  | M      | 1991-10-06 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.10 sec)

【関連記事】
MySQL likeのサンプルコード集 複数のパターンマッチングをするには?

他にもOracleではREGEXP_LIKE、PostgreSQLではSIMILAR TOなど正規表現に対応した拡張がされています。ただし、現在のところ日本語に対する正規表現は意図どおりに動作しないことが多いようです。

【関連記事】
SQLの正規表現は、各DBMSが拡張機能で対応 日本語文字列の対応は苦手

まとめ

ポテパンダの一言メモ
  • where句のlikeであいまい検索の条件指定が可能
  • andもしくはorで接続し、複数のあいまい検索を指定できる
  • DBMSによっては、拡張で正規表現を使ったあいまい検索が可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。