ゆる~く覚えるSQL入門:〇〇を含むレコード(行)を検索する【LIKE】

  • 2020年9月20日
  • 2020年9月21日
  • IT, SQL
  • 1view
IT

SQL文入門:パン屋さんのmenuテーブルで考えてみよう

テーブル名:menu

id name price category
1 メロンパン 200 菓子パン
2 カレーパン 300 総菜パン
3 カツサンド 400 総菜パン
4 デニッシュ 300 菓子パン
5 バターロール 200 総菜パン
6 食パンプレミアム 500 総菜パン

今回も簡単な題材として、パン屋さんのmenuテーブルを例にSQL文を学習してきます。

【LIKE】〇〇を含むデータ全てを検索する

SQL文を使ってデータを検索するときに、WHERE = “テキスト”であるカラムがテキストと一致したレコード(行)を検索できました。

しかし、これには1つ問題があります。

それは、完全に一致しているもののみしか検索できない点です

では、パン屋さんのmenuテーブルを例にして、商品名(name)に「パン」が含まれるもののみ検索したい場合はどうしたらよいでしょうか?

つまり、デニッシュやカツサンド、バターロール以外を検索したい場合です。

こんなときは「LIKE」を使って検索することで可能になります。

SQL文の記載方法は以下の通りです。

select カラム名
from テーブル名
where カラム名 like "%テキスト%"
; 

では、実際にnameに「パン」が付くもののみ検索してみたいと思います。

select *
from menu
where name like "%パン%"
;

↓↓↓↓実行してみると

・実行結果

id name price category
1 メロンパン 200 菓子パン
2 カレーパン 300 総菜パン
6 パンプレミアム 500 総菜パン

実行するとnameカラム(列)に「パン」と含まれるもののみ検索されます。

LIKEの後に付いてる「%」はどんな文字列にも一致することを指す記号

select * 
from menu 
where name like "%パン%"  ←%(パーセント)ってなぜつけるの??
;

上のコードを見てパンの両サイドに付いてる「%(パーセント)」ってなぜ付けるの?と思う方もいるかと思います。

この「%(パーセント)」はワイルドカードと言って、どんな文字列にも一致することを指す記号です。

そのため、”%パン%”とすると、

  • 〇〇パン(メロンパン、カレーパンなど)のようにパンの前に文字列があるもの
  • パン〇〇(食パンプレミアム)のようにパンの後に文字列があるもの

の両方を検索できます。

 ワイルドカードは片方に付けることも可能

ワイルドカードの%ですが、テキストの両サイドではなく、片方のみに付けることも可能です。

もし仮に”テキスト%”とした場合、前方一致といって「テキスト〇〇」というテキストから始まるもののみ検索できます。

これを前方一致といいます。

一方で”%テキスト”とした場合は「〇〇テキスト」という後ろにテキストが付いたもののみ検索できます。

これを後方一致といいます。

上の説明だと少々分かりにくいので、実際の例で考えてみましょう。

たとえば今回パン屋さんおmenuテーブルから、メロンパンやカレーパンといった〇〇パンのみ検索したい場合は以下のようにSQL文を記載します。
(食パンプレミアムは除外したい)

select *
from menu
where name = "%パン"
;

↓↓↓↓実行してみると

・実行結果

id name price category
1 メロンパン 200 菓子パン
2 カレーパン 300 総菜パン

実行するとnameカラム(列)に「〇〇パン」と後ろにパンが含まれるもののみ検索されます。

まとめ

今回の記事をまとめると

  • 〇〇を含むデータを検索する場合はLIKEを使う
  • ワイルドカード(%)はどんな文字列にも一致することを指す記号
  • ワイルドカードは前後片方のみに付けて、検索することも可能
最新情報をチェックしよう!