MySql公式マニュアル学習ノート2 MySqlのあいまい検索と正規表現


SQLパターンマッチングは「_」を使用することができます。任意の1文字にマッチします。「%」は任意の数の文字にマッチします。はい、 MySQLでは、SQLのパターンはデフォルトでは大文字と小文字を無視しています。いくつかの例を示します。注意SQLモードの場合は、====;LIKEまたはNOT LIKEを使ってオペレータを比較するべきです。
「b」で始まる名前を探したいです。
 
mysql> SELECT * FROM pet WHERE name LIKE 'b%';
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
「fy」で終わる名前を探したいです。
 
 
mysql> SELECT * FROM pet WHERE name LIKE '%fy';
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
「w」を含む名前を見つけたいです。
 
+--------+--------+---------+------+------------+-------+
 
mysql> SELECT * FROM pet WHERE name LIKE '%w%';
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
ちょうど5文字が含まれている名前を探したいなら、「ウ」を使います。モード文字:
 
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+
 
mysql> SELECT * FROM pet WHERE name LIKE '_____';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
MySQLによって提供されるパターンマッチングの他のタイプは拡張正規表現を使用する。これらのモードをマッチングテストするとき、REGEXPとNOT REGEXPのオペレータ(またはRLIKEとNOT RLIKEとは同義語である)を使用する。
正規表現を拡張するいくつかの文字は以下の通りです。
・         ‘.'任意の文字にマッチします。
・         文字クラス「...」は、四角い括弧内の任意の文字にマッチします。例えば、「[a b c]」は、「a」、「b」、または「c」に整合する。文字の名前を付ける範囲に「-」を使います。a-z''は任意の文字にマッチし、「0-9」は任意の数字にマッチします。
・         “ * ”ゼロまたは複数の前の文字にマッチします。例えば、「x*」は任意の数の「x」文字にマッチし、「0-9」は任意の数の数字にマッチし、「.*」は任意の数の文字にマッチします。
  • REGEXPモードがテストされた値のどこにでもマッチする場合、モードは一致する(これはLIKEモードとは違って、全体の値と一致するだけで、モードは一致する)。
  • は、テストされた値の開始または終了に一致するようにモードを特定するために、モード開始に「^」またはモードの最後に「$」を使用する。
  • 拡張正規表現がどのように動作するかを説明するために、REGEXPを使って上記のLIKEクエリを書き換えます。
    「b」で始まる名前を探すために、「^」を使って名前に合うスタートです。
     
    +-------+--------+---------+------+------------+-------+
    | Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
    +-------+--------+---------+------+------------+-------+
     
    mysql> SELECT * FROM pet WHERE name REGEXP '^b';
    +--------+--------+---------+------+------------+------------+
    強制的にREGEXPを大文字と小文字を区別したい場合は、BINARYを使って文字列の一つをバイナリ文字列に変更します。このクエリは名前の最初の文字の小文字‘b’だけにマッチします。
     
    | name   | owner  | species | sex  | birth      | death      |
    「fy」で終わる名前を見つけるために、「$」で名前に合う末尾を使います。
     
    +--------+--------+---------+------+------------+------------+
    | Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
    | Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
    +--------+--------+---------+------+------------+------------+
     
    mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';
     
    「w」を含む名前を探すために、以下の問い合わせを使います。
     
    mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
    +--------+--------+---------+------+------------+-------+
    | name   | owner  | species | sex  | birth      | death |
    +--------+--------+---------+------+------------+-------+
    | Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
    | Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
    +--------+--------+---------+------+------------+-------+
    正規表現が値のどこにでも現れると、パターンが一致するので、前のクエリーにモードの両側にワイルドカードを置いて、それが全体の値に一致するようにする必要はありません。SQLモードを使ったように。
    ちょうど5文字の名前を見つけるために、「^」と「$」を使って名前の最初と最後に一致し、5つの「.」の例との間にあります。
     
     
    mysql> SELECT * FROM pet WHERE name REGEXP 'w';
    +----------+-------+---------+------+------------+------------+
    | name     | owner | species | sex  | birth      | death      |
    +----------+-------+---------+------+------------+------------+
    | Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
    | Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
    前のクエリを「{n}」「繰り返しn回」のオペレータで書き直すこともできます。
     
    | Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
    +----------+-------+---------+------+------------+------------+
     
    mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
    +-------+--------+---------+------+------------+-------+
    | name  | owner  | species | sex  | birth      | death |
    +-------+--------+---------+------+------------+-------+