「LIKE」 < パターンマッチングでのデータの抽出方法 >
例えば、20代の人だけを抽出するときのように、曖昧な条件や部分的に一致する条件のデータを抽出するためにはどうすればいいの?
では、実際のデータを用いてやってみましょう!
以下のデータは、1896年から2016年までに開催された全オリンピックのアスリートとイベントのデータです。(テーブル名:OLYMPICS_athlete_events)
OLYMPICS_athlete_events | テーブル名 |
---|---|
ID | データセット内の順番に基づいてアスリートに割り当てられたID番号 |
Name | アスリートの名前 |
Sex | アスリートの性別 |
Age | アスリートの年齢 |
Height | アスリートの身長(センチメートル単位) |
Weight | アスリートの体重(キログラム単位) |
Team | このアスリートが所属する国 |
NOC | アスリートが所属する国を表す3文字の略語 |
Games | このオリンピック大会の開催年と季節 |
Year | 大会の開催年 |
Season | 大会の季節(SummerまたはWinter) |
City | オリンピックが開催された都市 |
Sport | 大会の種目 |
Event | 大会の名前 |
Medal | アスリートが獲得したメダル(獲得したメダルがない場合は「NA」) |
この中から例えば、20代の人だけのデータのように、曖昧な条件や部分的に一致する条件のデータを抽出する際は「LIKE」と「%」を使用します。
以下のようにSQLを記述します。
前方一致:’条件%‘
後方一致:’%条件’
両端一致:’条件%条件’
パターン | 意味 |
---|---|
%〇〇% , _〇〇_ | 両端一致:「○○」を含む文字列 |
〇〇% , 〇〇_ | 前方一致:「○○」で始まる文字列 |
%〇〇 , _〇〇 | 後方一致:「○○」で始まる文字列 |
Ageが2%(%:任意の0文字以上の文字列)
SELECT ID,Name,Sex,Age
FROM OLYMPICS_athlete_events
WHERE Age LIKE '2%' ;
または
Ageが2_(_:任意の1文字)
SELECT ID,Name,Sex,Age
FROM OLYMPICS_athlete_events
WHERE Age LIKE '2_' ;
ふむふむなるほど〜、一部分が一致するように条件を指定する際は、LIKEと「%」や「_」を使用するんですね!
また、NOT LIKEのようにすると指定した条件と一致しないデータを取得できるんですね!
そういうことです。
ESCAPE処理 <ワイルドカード:特殊記号>
でも「%」や「_」を指定条件としてデータを抽出したいときはどうすればいいのだろうか…
いい疑問ですね。
そんなときはESCAPEを使用します。
「%」や「_」は先ほど学んだようにある効果を表す特殊記号となっています。
そのため、例えばデータとして「A_001」や「B_002」のような「_」を含んだ文字列を取得したい場合は、特殊記号の前に‘任意の文字列’をつけ、最後に「ESCAPE = ‘任意の文字列’」をつける必要があります。(※一般的には任意の文字列は「?」を用いることが多いです。)
そうすることによって、‘任意の文字列’の直後の特殊記号は文字列として扱われます。
以下のように記述します。
「?」の直後の特殊記号「_」は文字列として扱われます
SELECT ID,Name,Sex,Age
FROM OLYMPICS_athlete_events
WHERE Age LIKE '%?_%' ESCAPE = '?' ;
なるほど!そうやって書くのか〜〜
ESCAPE処理をすればいいだけなんですね!簡単だ!
そういうことです。
演習
それでは演習をしてみましょう。
準備中
まとめ
- パターンマッチング:LIKE(※NOT LIKEでそれ以外のパターン)
- 任意の0文字以上:「%」
- 任意の文字数:「_」
- 特殊記号を含む文字列検索:ESCAPE処理
未経験からデータサイエンティストへ!転職支援!
ROYAL AGENT&Co.では、全コンサルタントが5年以上のキャリアコンサルティング経験を持ち、データサイエンティストやAI,DX人材のご紹介に強い転職支援を行っております。
候補者様一人ひとりのキャリアに寄り添ったご支援を心がけ、無闇に求人をご紹介するのではなく、丁寧なカウンセリングを通してご志向性にあった求人をピンポイントにご紹介させて頂いております。未経験からのデータサイエンティスト転職支援実績も多数ございます。
無理な勧誘など一切ありませんので、キャリアのご相談等、まずはお気軽にお問合せください!心よりお待ちしております。