SQL

【SQL】具体例でLIKE句を学ぶ(NOT LIKEや複数含む)

本記事概要

本記事の対象者

・SQLでのデータ分析を勉強されている方
・特に非エンジニアのマーケティング担当者やPMの方
【SQL練習】サンプルデータベースを用意するでMySQL公式のデータベースをローカルに作成されている方には特におすすめです。

本記事の目的

・LIKE句を使えるようになる。

filmテーブル概要

映画の概要とレンタルする際のデータ(期間やレンタル料金)などが記載されたテーブルです。
実際はdescriptionspecial_featuresというカラムもあるのですが、文字列のため長く、とても見にくいので今回は排除しています。

【SQL】LIKE句の具体例を行っていきます

そもそもLIKE句とは?

ある文字を含むデータ」を取得したい場合LIKE句を使います。
例えば映画のタイトルに「LOVE」を含む映画を抽出したいとします。
まずは実際の使い方を見てみましょう。

抽出結果は以下です。

このように「LOVE」単体だけでなく、「IDENTITY LOVER」、「LOVELY JINGLE」、「LOVERBOY ATTACKS」、「STRANGELOVE DESIRE」などの「LOVEを含む」単語も抽出できていますね。

LIKE句

LIKE句は「〇〇なような〜」という意味を持つ通り、「〇〇を含むレコード」を抽出することができます。

その〇〇は「」を使って指定することができます。
「%」はワイルドカードと呼ばれており、どんな文字列にも一致することを意味する記号です。
」の使い方は主に以下の3通りです。

・完全一致

上記のLOVEの例で使用した方法になります。

where 該当カラム like ‘%LOVE%’

のような形で使用します。
抽出したい文字(LOVE)の前後にどんな文字列にも一致する「%」を置くことで、
該当カラムにLOVEが含まれているレコードはすべて抽出することができます。

・前方一致

where 該当カラム like ‘LOVE%’

前方一致は抽出したい文字(LOVE)の後側に「」を置くことで、
LOVE〇〇と言った文字を含むレコードを抽出することができます。
LOVE以降の文字列はどんな文字列にも一致すると考えるとわかりやすいです。

・後方一致

where 該当カラム like ‘%LOVE’

後方一致は抽出したい文字(LOVE)の前側に「」を置くことで、
〇〇LOVEと言った文字を含むレコードを抽出することができます。
LOVE以前の文字はどんな文字列にも一致すると考えるとわかりやすいです。

では「前方一致」と「後方一致」を実際に書いて見て、抽出結果を見てみましょう。

前方一致と後方一致の具体例

■前方一致

しっかりLOVE〇〇のみが抽出されていますね。
では後方一致はどうなるのでしょう?

■後方一致

こちらもしっかり〇〇LOVEのみが抽出されてますね。
ここでこの完全一致には含まれていて、前方一致にも後方一致にも該当しなかったtitle名を見ていただきたいのですが、

「IDENTITY LOVER」と「STRANGELOVE DESIR」の2つになります。

どちらも〇〇LOVEでもLOVE〇〇でもないですね。
※空白は文字とみなされます。

LIKEの基礎はここまでで十分理解いただいたと思います。
では次に否定系を見ていきます。

NOT LIKEと複数条件

〇〇を含む文字列以外を抽出したいと考えた時どのようにすれば良いのでしょうか。
非常に簡単でNOTを使うだけになります。

where not 該当カラム ‘%文字列%’

では実際に使ってみましょう。
今回もfilmテーブルを使って、母音を「A=あ」しか使っていないタイトルを抽出します。
「I=い」「U=う」「E=え」「O=お」を一切使っていないタイトルなんぞいくつあるのか不思議なもんですがw
複数条件は単純に&で繋いでいます。
ちょっと助長ではありますが、4つくらいなら問題ないです。

5つだけありましたねw
合計で1,000タイトル以上はあったので、やはりかなりレアではありますw

 おわりに

LIKE検索いかがでしたでしょうか?
実務でもログ抽出などの際に頻出するので、覚えておいて損はない便利関数です。
その他便利関数についても解説してますので、良ければ見てください。

【SQL入門】データ分析に必須なSQL文とは?基本構文を6つ紹介

【SQL】COALESCE()関数を使って、NULLを0に置き換える。

【SQL】Window関数でデシル分析をする

 

ABOUT ME
Okada Shogo
某Web系企業でアクセス解析やKPI管理をやってます。主にインハウスマーケターの方に向けて情報発信できればと思っております!