SQLクエリで、一部分だけ一致しているデータを取り出す、あいまい検索がしたい!!!
WHERE句で、完全一致の値の検索ができるようになると、だんだんにあいまい検索を必要とする場面が出てきます。
そんな時使う演算子が「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%'
;
【実行結果】
id | name | address |
---|---|---|
4 | Yamada | Yamagata |
6 | Fukuda | Fukushima |
部分一致でaddressに「ma」を含むデータが取得できていることが分かります。
LIKE演算子で前方一致検索をする方法
LIKE演算子を使って、前方一致検索をしたい場合は、「cal_name LIKE ‘文字列%’」と検索したい文字列の後方部分に「%」をつけて指定します。
では実際にデータを取り出してみましょう。
【クエリ】
SELECT
*
FROM
user_table
WHERE
address LIKE 'a%'
;
【実行結果】
id | name | address |
---|---|---|
1 | Aoki | Aomori |
2 | Akiyama | Akita |
先頭の文字に「’a’」を含むデータが取得できています。
また大文字、小文字を区別して検索したい場合には、MySQLでは「BINARY」、SQLServerでは「COLLATE Japanese_CS_AS」を使用します。
こちらの詳しい解説は、下記の記事にて詳しく解説していますので、参考にしてみてください。
LIKE演算子で後方一致検索をする方法
LIKE演算子を使って、後方一致検索をしたい場合は、「cal_name LIKE ‘%文字列’」と検索したい文字列の前方部分に「%」をつけて指定します。
では実際にデータを取り出してみましょう。
【クエリ】
SELECT
*
FROM
user_table
WHERE
address LIKE '%a'
;
【実行結果】
id | name | address |
---|---|---|
2 | Akiyama | Akita |
4 | Yamada | Yamagata |
6 | Fukuda | Fukushima |
最後の文字に「’a’」を含むデータが取得できています。
「_」を使った検索方法
「%」が任意の文字列だったのに対して、「_」は任意の1文字を指定します。
実際に使い方を見てみましょう。
LIKE演算子で文字数を指定して検索する方法
「_」は任意の1文字を指定できるので「cal_name LIKE ‘_____’」として、5文字のデータを取得してみたいと思います。
【クエリ】
SELECT
*
FROM
user_table
WHERE
address LIKE '_____'
;
【実行結果】
id | name | address |
---|---|---|
2 | Akiyama | Akita |
3 | Iwasaki | Iwate |
addressが5文字のデータのみが検索できています。
次は、文字列と「」を使用して検索をしてみたいと思います。 「cal_name LIKE ‘a___’」として、データを取り出してみます。
【クエリ】
SELECT
*
FROM
user_table
WHERE
address LIKE 'A____'
;
【実行結果】
id | name | address |
---|---|---|
2 | Akiyama | Akita |
Aで始まる5文字のデータが取り出せていることが分かります。
まとめ
- パターンマッチには、WHERE句の中に、LIKE演算子を使用します
- 「\」「_」の特殊文字を使用して検索文字列を指定します
LIKE演算子を使用できるようになれば、抽出できるデータの幅も広がると思います。