LIKEとNOT LIKEの使い方(文字列のパターンマッチング)| プログラミングの砂場

プログラミング学習やタイピング練習に役立つツールを公開しているサイトです。

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」を使うことによって、指定したパターンとマッチしたデータを取得できます。

構文

SELECT 列名 FROM テーブル名 WHERE 列名 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つ)

これは、なにかしらの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」を使うことによって、指定したパターンとマッチしないデータを取得できます。

構文

SELECT 列名 FROM テーブル名 WHERE 列名 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)」についてです。
TOP