LIKEとNOT LIKEの使い方(文字列のパターンマッチング)
「LIKE」と「NOT LIKE」を使うと指定した文字列を含むかどうかを調べることができます。
目次
1. はじめに
ここでは、商品テーブル(Shouhin)を使って各種条件を指定してみましょう。
まずは、Shouhinの内容を確認してください。
SELECT * FROM Shouhin;
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
1 | アスパラガス | あすぱらがす | 1 | 256 |
2 | かぼちゃ | かぼちゃ | 1 | 300 |
3 | キャベツ | きゃべつ | 1 | 128 |
・ ・ ・ |
Shouhinの全データ(全行)が取得されました。
このデータに対して、「LIKE」と「NOT LIKE」を使用して行を絞り込んでいきます。
2. LIKEの使い方
「LIKE」を使うことによって、指定したパターンとマッチしたデータを取得できます。
構文
パターンは、検索したい文字列に「%(パーセント)」と「_(アンダースコア)」を織り交ぜて書きます。
2-1. %(パーセント)の使い方
「%」は、「なにかしらの文字列か、なにもない」を表します。
「よみがな(name_kana)」の最初の文字が「き」で始まる商品を取得してみます。
SELECT
*
FROM
Shouhin
WHERE
name_kana LIKE 'き%'
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
3 | キャベツ | きゃべつ | 1 | 128 |
4 | キュウリ | きゅうり | 1 | 150 |
13 | キウイ | きうい | 2 | 128 |
・ ・ ・ |
このSQLでは、検索のパターンとして「き%」を指定しました。
指定したパターン
これは、最初の文字列が「き」で、その後に続く文字列はなんでもよい(文字列がなくてもよい)という意味になります。
「よみがな(name_kana)」の最後の文字が「す」で終わる商品を取得してみます。
SELECT
*
FROM
Shouhin
WHERE
name_kana LIKE '%す'
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
1 | アスパラガス | あすぱらがす | 1 | 256 |
6 | ナス | なす | 1 | 130 |
9 | レタス | れたす | 1 | 128 |
・ ・ ・ |
このSQLでは、検索のパターンとして「%す」を指定しました。
指定したパターン
これは、最後の文字列が「す」で、その前にある文字列はなんでもよい(文字列がなくてもよい)という意味になります。
「よみがな(name_kana)」のどこかに「り」が入っている商品を取得してみます。
SELECT
*
FROM
Shouhin
WHERE
name_kana LIKE '%り%'
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
4 | キュウリ | きゅうり | 1 | 150 |
18 | ドリアン | どりあん | 2 | 2000 |
19 | リンゴ | りんご | 2 | 200 |
・ ・ ・ |
このSQLでは、検索のパターンとして「%り%」を指定しました。
指定したパターン
これは、「り」が文字列のどこかに含まれるという意味になります。
2-2. _(アンダースコア)の使い方
「_(アンダースコア)」は、「なにかしら1文字」を表します。
「よみがな(name_kana)」が2文字の商品を取得してみます。
SELECT
*
FROM
Shouhin
WHERE
name_kana LIKE '__'
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
6 | ナス | なす | 1 | 130 |
8 | ねぎ | ねぎ | 1 | 148 |
このSQLでは、検索のパターンとして「__」(アンダーバーを2つ)を指定しました。
指定したパターン
これは、なにかしらの2文字という意味になります。
練習用のShouhinテーブルには、「せっとしょうひん」と「せっとしょうひん2」というデータがあります。
このうち「せっとしょうひん」の最後に何か1文字ついている商品を検索してみます。
SELECT
*
FROM
Shouhin
WHERE
name_kana LIKE 'せっとしょうひん_'
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
27 | セット商品2 | せっとしょうひん2 | 3000 |
このSQLでは、検索のパターンとして「せっとしょうひん_」を指定しました。
指定したパターン
これは、「せっとしょうひん」の後ろになにか1文字という意味になります。
2-3. 注意点
注意点として、「_(アンダーバー)」は、必ず「なにかしらの1文字」に対応しているのに対して、 「%(パーセント)」のほうは、「なにかしらの文字列か、なにもない」の「なにもない」が許さるところです。
Shouhinテーブルの「せっとしょうひん」と「せっとしょうひん2」というデータを使って、「_」と「%」で取得されるデータの違いを見てみましょう。
上と同様に、「せっとしょうひん」の後に続く「1文字もしくは、文字列」を指定してみます。
「_(アンダーバー)」の場合
SELECT
*
FROM
Shouhin
WHERE
name_kana LIKE 'せっとしょうひん_'
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
27 | セット商品2 | せっとしょうひん2 | 3000 |
「せっとしょうひん2」のみが取得されました。
「%(パーセント)」の場合
SELECT
*
FROM
Shouhin
WHERE
name_kana LIKE 'せっとしょうひん%'
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
26 | セット商品 | せっとしょうひん | 4000 | |
27 | セット商品2 | せっとしょうひん2 | 3000 |
「せっとしょうひん」と「せっとしょうひん2」が取得されました。
せっとしょうひん%
この2つのパターンは、見た目似ていますが、「_」と「%」で結果が異なるので使用の際には注意してください。
3. NOT LIKEの使い方
「NOT LIKE」を使うことによって、指定したパターンとマッチしないデータを取得できます。
構文
パターンは、検索したい文字列に「%(パーセント)」と「_(アンダースコア)」を織り交ぜて書きます。
「%(パーセント)」と「_(アンダースコア)」の使い方については、上の「LIKEの使い方」を参照してください。
「よみがな(name_kana)」の最初の文字が「き」で始らない商品を取得してみます。
SELECT
*
FROM
Shouhin
WHERE
name_kana NOT LIKE 'き%'
shouhin_id | name | name_kana | category_id | price |
---|---|---|---|---|
1 | アスパラガス | あすぱらがす | 1 | 130 |
2 | かぼちゃ | かぼちゃ | 1 | 148 |
5 | トマト | とまと | 1 | 200 |
・ ・ ・ |
このSQLでは、検索のパターンとして「き%」を指定しました。
指定したパターン
これは、最初の文字列が「き」で、その後に続く文字列はなんでもよい(文字列がなくてもよい)という意味になりすが、
「NOT」で否定しているので、結果的に最初の文字が「き」以外の商品(パターンとマッチしない商品)が取得されます。
4. まとめ
「LIKE」と「NOT LIKE」の使い方(文字列のパターンマッチング)を確認しました。
「LIKE」を使うと、指定したパターンとマッチしたデータを取得できます。
「NOT LIKE」を使うと、指定したパターンとマッチしないデータを取得できます。
指定するパターンには、「%(パーセント)」や「_(アンダーバー)」を検索する文字列に織り交ぜます。
「%」は、「なにかしらの文字列か、なにもない」を表します。
「_(アンダースコア)」は、「なにかしら1文字」を表します。
次は、「データの並べ替え(ORDER BY)」についてです。