【SQL】LIKE演算子でパターンマッチ(あいまい検索)を行う方法をサンプルコードを使って解説

Web開発

SQLクエリで、一部分だけ一致しているデータを取り出す、あいまい検索がしたい!!!

WHERE句で、完全一致の値の検索ができるようになると、だんだんにあいまい検索を必要とする場面が出てきます。

そんな時使う演算子が「LIKE演算子」です。

LIKE演算子を使うと、「%」「_」の特殊文字を使用してパターンマッチ検索を行うことができます。

この記事では、LIKE演算子を使ったパターマッチ検索の方法について解説します。

記事のポイント
  • LIKE演算子について理解できる
  • パターンマッチの方法が分かる

今回使用するテーブルやデータのSQL構文は下記に記載しているので、ご自分の開発環境にコピペして使用してください。

CREATE TABLE user_table
    (id int, name varchar(30), address varchar(50))
;
    
INSERT INTO user_table
    (id,name, address)
VALUES
    ('1','Aoki', 'Aomori'),
    ('2','Akiyama', 'Akita'),
    ('3','Iwasaki', 'Iwate'),
    ('4','Yamada', 'Yamagata'),
    ('5','Miyauti', 'Miyagi'),
    ('6','Fukuda', 'Fukushima')
;

パターンマッチを行う方法|LIKE演算子の基本

パターンマッチを行うには、WHERE句の中に「LIKE演算子」を使用します。

LIKE演算子を使用することでカラムの値に、「%」「_」を使用したあいまい検索をかけることができます。

基本構文は下記の通りです。

SELECT * FROM table_name WHERE col_name LIKE pattern

「%」を使った検索方法

「%」は、任意の文字列を表していて、部分一致、前方一致、後方一致などの検索に使用されます。

それでは例を見ながら解説していきます。

LIKE演算子で部分一致検索をする方法

LIKE演算子を使って、部分一致検索をしたい場合は、「cal_name LIKE ‘%文字列%’」と検索したい文字列を「%」で囲むように指定します。

実際にデータを取り出してみましょう。

【クエリ】

SELECT
  *
FROM
  user_table
WHERE
  address LIKE '%ma%'
;

【実行結果】

idnameaddress
4YamadaYamagata
6FukudaFukushima

部分一致でaddressに「ma」を含むデータが取得できていることが分かります。

LIKE演算子で前方一致検索をする方法

LIKE演算子を使って、前方一致検索をしたい場合は、「cal_name LIKE ‘文字列%’」と検索したい文字列の後方部分に「%」をつけて指定します。

では実際にデータを取り出してみましょう。

【クエリ】

SELECT
  *
FROM
  user_table
WHERE
  address LIKE 'a%'
;

【実行結果】

idnameaddress
1AokiAomori
2AkiyamaAkita

先頭の文字に「’a’」を含むデータが取得できています。

また大文字、小文字を区別して検索したい場合には、MySQLでは「BINARY」、SQLServerでは「COLLATE Japanese_CS_ASを使用します。
こちらの詳しい解説は、下記の記事にて詳しく解説していますので、参考にしてみてください。

LIKE演算子で後方一致検索をする方法

LIKE演算子を使って、後方一致検索をしたい場合は、「cal_name LIKE ‘%文字列’」と検索したい文字列の前方部分に「%」をつけて指定します。

では実際にデータを取り出してみましょう。

【クエリ】

SELECT
  *
FROM
  user_table
WHERE
  address LIKE '%a'
;

【実行結果】

idnameaddress
2AkiyamaAkita
4YamadaYamagata
6FukudaFukushima

最後の文字に「’a’」を含むデータが取得できています。

「_」を使った検索方法

「%」が任意の文字列だったのに対して、「_」は任意の1文字を指定します。

実際に使い方を見てみましょう。

LIKE演算子で文字数を指定して検索する方法

「_」は任意の1文字を指定できるので「cal_name LIKE ‘_____’」として、5文字のデータを取得してみたいと思います。

【クエリ】

SELECT
  *
FROM
  user_table
WHERE
  address LIKE '_____'
;

【実行結果】

idnameaddress
2AkiyamaAkita
3IwasakiIwate

addressが5文字のデータのみが検索できています。

次は、文字列と「」を使用して検索をしてみたいと思います。 「cal_name LIKE ‘a___’」として、データを取り出してみます。

【クエリ】

SELECT
  *
FROM
  user_table
WHERE
  address LIKE 'A____'
;

【実行結果】

idnameaddress
2AkiyamaAkita

Aで始まる5文字のデータが取り出せていることが分かります。

まとめ

  • パターンマッチには、WHERE句の中に、LIKE演算子を使用します
  • 「\」「_」の特殊文字を使用して検索文字列を指定します

LIKE演算子を使用できるようになれば、抽出できるデータの幅も広がると思います。

タイトルとURLをコピーしました