メインコンテンツへスキップ

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
LIKE は 2 つの文字で形を表します。REGEXP はパターン言語全体で形を表す ため、LIKE には表現できない条件を指定できます。候補の中からの選択、 繰り返されるグループ、文字の範囲などです。 始める前に、mysql -u root -p sakila でクライアントを開いてください。

REGEXP の仕組み

PATTERN_TEXT を探したい正規表現に置き換えます。 条件は、パターンが値の中のどこかに一致したときに真になります。これが、値全体を 表さなければならない LIKE との最初の違いです。 以下で使う部品です。

例

  1. 先頭が一致する

^ がなければ、パターンはタイトル内のどこにある ACA にも一致します。

  1. 末尾が一致する

  1. 2 つの先頭のいずれか

ALBERT が 2 回現れるのは、2 人の俳優が同じ名前を持つためです。SELECT は 行を報告するのであって、重複を除いた値を報告するのではありません。

  1. LIKE には表せない形

これは、A または B で始まり S で終わるタイトルを求めます。

  1. 一致しないものすべて

NOT REGEXP は、NOT LIKE と同じように、テストを反転します。
NULL 値は REGEXP にも NOT REGEXP にも一致しません。どちらも NULL に対して NULL を返すためです。IS NULL でそれを扱います。

RLIKE は同じ演算子

RLIKE と REGEXP は 1 つの演算子の 2 つの綴りです。どちらかを選び、それを 使い続けてください。

大文字と小文字、およびその区別を強制する方法

パターンは、LIKE と同じく、照合対象の照合順序に従います。そのため、 デフォルトでは小文字のパターンが大文字のテキストに一致します。REGEXP_LIKE() はこの演算子の関数形で、その第 3 引数がそれを上書きします。'c' は大文字と 小文字を区別するという意味です。

LIKE で表せるときは LIKE を優先する

REGEXP 検索を絞り込めるインデックスはありません。一致がどこから始まっても よいため、サーバーはすべての値をテストします。固定テキストで始まるパターンの LIKE は、インデックスの一致する部分に直接ジャンプできます。どちらでも フィルタを表現できるときは、LIKE のほうが 2 つのうちで安価です。 LIKE のレッスンで、どのパターンがインデックスを使え、 どれが使えないかを説明しています。

まとめ

  • 値の中のどこかにあるパターンを照合するには REGEXP を使います。
  • 一致が先頭または末尾になければならないときは、^ と $ でアンカーします。
  • RLIKE は REGEXP の別名として読みます。
  • 大文字と小文字を区別する照合を強制するには REGEXP_LIKE(value, pattern, 'c') を使います。
  • まず LIKE に手を伸ばします。REGEXP 検索を絞り込めるインデックスはないためです。

関連項目