【SQL】%(パーセント)と_(アンダーバー)の違いを説明

SQL パーセントとアンダーバーの違い プログラミング

「nameの値が頭文字がAで始まる行を抽出する」
「priceの値が0で終わる行を抽出する」

僕

どちらも↑のようなことができるってわかるけど、いまいち違いが分からない。

そう感じている人に向けて、SQLにおける「%」と「_」の違いについて解説します。

%(パーセント)と_(アンダーバー)の違い

シンプルに違いを説明すると次のようになります。

% → 文字数は何文字でもいいから、頭文字や語尾だけ指定して抽出する
_ → 文字数も指定して抽出する

どのように摘出されるかを見る

「%」と「_」を使うと、それぞれどのようにデータが抽出されるのかを実際に見てみましょう。

例えば、次のような「アルファベット」というテーブルがあったとします。

idnameprice
1ABC100
2CBA200
3AB300
4BC400
アルファベット

このときに「%」と「*」をそれぞれ使って、一番最初の文字がAであるデータという条件でデータを抽出してみます。

%を使って抽出

抽出するためのSQL文は次のようになります。

SELECT * FROM WHERE name LIKE 'A%'

抽出されるデータはこちらです。

idnameprice
1ABC100
3AB300

_を使って抽出

抽出するためのSQL文は次のようになります。

SELECT * FROM WHERE name LIKE 'A_'

抽出されるデータはこちらです。

idnameprice
3AB300

どうでしょう?違いはわかったでしょうか?

「%」を使って抽出されたデータが2行なのに対し、「_」を使って摘出されたデータは1行になりました。

抽出できたデータの行が変わった理由

なぜ、抽出できたデータの行が変わったのかというと、それは_を使って抽出した方のSQL文には次の意味が込められていたためです。

SELECT * FROM WHERE name LIKE 'A_'
nameの列において、一番最初が文字がAでありかつAの後ろの文字が1文字である行を抽出する。

Aの右横にある「_」の個数がAの後ろの文字数を指定していたんです。

そのため、次のように2つの「_」を使って抽出しようとすると、

SELECT * FROM WHERE name LIKE 'A__'

抽出されるデータは、こちらに変わります。

idnameprice
1ABC100

まとめ

「%」と「_」のどちらとも、次のようなときに使うということに変わりありません。

  • 特定の文字から始まる行を抽出したいとき
  • 特定の文字で終わる行を抽出したいとき

違うのは、

% → 後ろまたは前の文字数が何文字でも抽出する。
_ → 後ろまたは前の文字数が_の個数の場合のみ抽出する。

という部分でした。

コメント

タイトルとURLをコピーしました