SQLで文字列検索するにはLIKE句を使う
SQLで文字列の検索を行いたい場合は「LIKE句」を使います。
次のように記述することで、指定した文字列に一致したデータを取得できるのです。
SELECT カラム名 FROM テーブル名 WHERE カラム名 LIKE '検索文字';
LIKE句は、このように文字列に完全一致するもの以外にもさまざまな検索方法があります。
この記事では、そんなさまざまな検索方法の中でも「前方一致検索」について解説します。
前方一致検索は、指定する語句の先頭がデータと一致するものを調べるための方法のことです。
具体的な検索方法を紹介するので、ぜひ参考にしてください。
前方一致検索の使い方
では、前方一致検索の使い方を見ていきましょう。
前方一致検索を行う場合は、次のように記述できます。
SELECT カラム名 FROM テーブル名 WHERE カラム名 LIKE '検索文字%';
ポイントが、検索文字の末尾にある「%」です。
この%は、ワイルドカード文字で「0文字以上の任意の文字列」を意味します。
前方一致検索で使えるワイルドカードは次の通りです。
ワイルドカード | 意味 |
---|---|
% | 0文字以上の任意の文字列 |
_ | 任意の1文字 |
実際にテーブルのデータを用いて、動作を確認してみましょう。
ここでは、次のテーブルを用意しました。
mysql> SELECT * FROM sample_table; +------+--------------+-------+ | id | name | price | +------+--------------+-------+ | 1 | book_attile | 1000 | | 2 | book_bttile | 1200 | | 3 | book_c | 800 | | 4 | potepan_book | 1000 | | 5 | book_dttile | 1000 | | 6 | user_book | 1200 | | 7 | pen | 500 | | 8 | mypen | 600 | | 9 | pencil | 700 | | 10 | book_pen | 800 | +------+--------------+-------+ 10 rows in set (0.00 sec)
idと名前、値段を格納したテーブルです。
このテーブルの nameカラム の先頭が「book」のデータを取得してみましょう。
次のように記述できます。
SELECT * FROM sample_table WHERE name LIKE 'book%';
上記のSQLを実行することで、 nameカラム の先頭が「book」のデータだけが取得可能です。
実行結果は次の通りです。
mysql> SELECT * FROM sample_table WHERE name LIKE 'book%'; +------+-------------+-------+ | id | name | price | +------+-------------+-------+ | 1 | book_attile | 1000 | | 2 | book_bttile | 1200 | | 3 | book_c | 800 | | 5 | book_dttile | 1000 | | 10 | book_pen | 800 | +------+-------------+-------+ 5 rows in set (0.03 sec)
期待通りの結果が取得できています。
少し条件を変えて、「book_」の後ろが任意の1文字であるもの(book_c)だけを取得してみましょう。
「%」の代わりに「_」を使う形ですね。
次のように記述できます。
mysql> SELECT * FROM sample_table WHERE name LIKE 'book__'; +------+--------+-------+ | id | name | price | +------+--------+-------+ | 3 | book_c | 800 | +------+--------+-------+ 1 row in set (0.00 sec)
このように、「book_c」だけが取得できました。
前方一致検索で複数指定する
ここまで、前方一致検索の基本的な使い方について紹介しました。
前方一致検索する際に「条件を複数設定したい」と思うこともありますよね。
ここでは、前方一致検索で複数指定する方法を見ていきましょう。
複数の条件を設定する簡単な方法は「OR」を使う方法です。
ORは、左右の条件のどちらかを満たすデータを取得する条件句です。
このORを使うことで、条件を複数指定できます。
例えば、次のように記述可能です。
SELECT * FROM sample_table WHERE name LIKE 'book%' OR name LIKE 'pen%';
上記のSQL文は「book」という前方一致の条件と、「pen」という前方一致の条件を OR で指定しています。
実際に、SQLを実行すると次のように結果を取得できるはずです。
mysql> SELECT * FROM sample_table WHERE name LIKE 'book%' OR name LIKE 'pen%'; +------+-------------+-------+ | id | name | price | +------+-------------+-------+ | 1 | book_attile | 1000 | | 2 | book_bttile | 1200 | | 3 | book_c | 800 | | 5 | book_dttile | 1000 | | 7 | pen | 500 | | 9 | pencil | 700 | | 10 | book_pen | 800 | +------+-------------+-------+ 7 rows in set (0.01 sec)
また、ORは「||」とも書けるため、次のように記述しても同じ結果を得られます。
SELECT * FROM sample_table WHERE name LIKE 'book%' || name LIKE 'pen%'; mysql> SELECT * FROM sample_table WHERE name LIKE 'book%' || name LIKE 'pen%'; +------+-------------+-------+ | id | name | price | +------+-------------+-------+ | 1 | book_attile | 1000 | | 2 | book_bttile | 1200 | | 3 | book_c | 800 | | 5 | book_dttile | 1000 | | 7 | pen | 500 | | 9 | pencil | 700 | | 10 | book_pen | 800 | +------+-------------+-------+ 7 rows in set, 1 warning (0.01 sec)
複数の条件を指定して前方一致検索する場合は、ORを使いましょう。
前方一致検索で数値は指定できる?
前方一致検索で数値の指定はできるのでしょうか?
MySQLであれば数値型データの検索も一応可能です。ただし、誤動作を引き起こす可能性もあるためおすすめしません。
こちらも実際に動作させて確認しましょう。
例えば、sample_tableテーブル の priceカラム は数値型(int)のカラムです。
この priceカラム で前方一致検索をすると、次のように結果が取得できます。
mysql> SELECT * FROM sample_table WHERE price LIKE '8%'; +------+----------+-------+ | id | name | price | +------+----------+-------+ | 3 | book_c | 800 | | 10 | book_pen | 800 | +------+----------+-------+ 2 rows in set (0.01 sec) mysql> SELECT * FROM sample_table WHERE price LIKE '1%'; +------+--------------+-------+ | id | name | price | +------+--------------+-------+ | 1 | book_attile | 1000 | | 2 | book_bttile | 1200 | | 4 | potepan_book | 1000 | | 5 | book_dttile | 1000 | | 6 | user_book | 1200 | +------+--------------+-------+ 5 rows in set (0.01 sec)
このように、期待した通りの結果を取得できています。
しかし、LIKE関数は文字列比較関数のため、数値型データに対して使うのはおすすめできません。
なぜなら、予期しない不具合や誤動作を引き起こす可能性が考えられるからです。
数値型データの検索を行いたい場合は、WHERE句や比較演算子を使いましょう。
当サイトでも条件検索の方法を詳しく解説しているので、よければ参考にしてみてください。
【関連記事】