8.4.3.7 Recherche de valeurs

MySQL propose les méthodes de recherche standard du SQL, mais aussi les recherches à base d'expression régulière, similaire à celle utilisées dans les utilitaires Unix, tels que vi, grep et sed.

Les méthodes de recherche SQL vous permettent d'utiliser le caractère ``_'' pour remplacer n'importe quel caractère unique, et ``%'' pour remplacer n'importe quel nombre de caractères (y compris le caractère 0). Les recherches SQL sont insensibles à la casse. Reportez vous aux exemples ci-dessous. Remarquez bien que l'on n'utilise pas = ou != mais plutôt LIKE ou NOT LIKE.

Recherche des noms commençant par ``b'':@:

mysql> SELECT clean_docs_mysql clean_docs-php debut.php fin.php index.php menu.php mysql php FROM animaux WHERE nom LIKE "b%";
+--------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+--------+---------------+--------+--------+----------------+------------+
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
+--------+---------------+--------+--------+----------------+------------+

Recherche des noms finissant par :@:``fy'':

mysql> SELECT clean_docs_mysql clean_docs-php debut.php fin.php index.php menu.php mysql php FROM animaux WHERE nom LIKE "%fy";
+--------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+--------+---------------+--------+--------+----------------+------------+
| Fluffy | Harold | chat | f | 1993-02-04 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+--------+---------------+--------+--------+----------------+------------+

Recherche des noms contenant ``w'':@:

mysql> SELECT clean_docs_mysql clean_docs-php debut.php fin.php index.php menu.php mysql php FROM animaux WHERE nom LIKE "%w%";
+----------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+----------+---------------+--------+--------+----------------+------------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | oiseau | NULL | 1997-12-09 | NULL |
+----------+---------------+--------+--------+----------------+------------+

Recherche des noms contenant exactement 5 caractères, utilisez le caractère ``_'' :@:

mysql> SELECT clean_docs_mysql clean_docs-php debut.php fin.php index.php menu.php mysql php FROM animaux WHERE nom LIKE "_____";
+----------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+----------+---------------+--------+--------+----------------+------------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+----------+---------------+--------+--------+----------------+------------+

L'autre type de recherche disponible avec MySQL est les expression régulières. Pour utiliser ce type de recherche, il faut ajouter les mots clé REGEXP et NOT REGEXP (ou RLIKE t NOT RLIKE, qui sont des synonymes).

Les caractéristiques des expressions régulières sont :@:

Pour illustrer le fonctionnement des expressions régulières, les requêtes précédentes ont été réécrites en utilisant les expressions régulières.

Recherche des noms commençant par ``b'':@: on utilise ``^'' pour indiquer le début de la valeur, et ``[bB]'' pour rechercher indifféremment, ``b'' minuscule ou majuscule.

mysql> SELECT clean_docs_mysql clean_docs-php debut.php fin.php index.php menu.php mysql php FROM animaux WHERE nom REGEXP "^[bB]";
+--------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+--------+---------------+--------+--------+----------------+------------+
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
+--------+---------------+--------+--------+----------------+------------+

Recherche des noms finissant par :@:``fy'': on utilise ``$'' pour indiquer la fin de la valeur

+--------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+--------+---------------+--------+--------+----------------+------------+
| Fluffy | Harold | chat | f | 1993-02-04 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+--------+---------------+--------+--------+----------------+------------+

Recherche des noms contenant ``w'':@:, on utilise ``[wW]'' pour rechercher les ``w', 'minuscule ou majuscule :

mysql> SELECT clean_docs_mysql clean_docs-php debut.php fin.php index.php menu.php mysql php FROM animaux WHERE nom REGEXP "[wW]";
+----------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+----------+---------------+--------+--------+----------------+------------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | oiseau | NULL | 1997-12-09 | NULL |
+----------+---------------+--------+--------+----------------+------------+

Etant donné qu'une expression régulière est vrai si elle est vrai sur une partie d'une valeur, il n'est pas besoin de caractères spéciaux.

Recherche des noms contenant exactement 5 caractères, utilisez ``^'' et ``$'' pour indiquer le début et la fin de la chaîne, et 5 fois ``.'' pour les 5 caractères.

mysql> SELECT clean_docs_mysql clean_docs-php debut.php fin.php index.php menu.php mysql php FROM animaux WHERE nom REGEXP "^.....$";
+----------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+----------+---------------+--------+--------+----------------+------------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+----------+---------------+--------+--------+----------------+------------+

Vous auriez pu aussi utiliser l'opérateur ``{n''} `` n-fois'':@:

mysql> SELECT clean_docs_mysql clean_docs-php debut.php fin.php index.php menu.php mysql php FROM animaux WHERE nom REGEXP "^.{5}$";
+----------+---------------+--------+--------+----------------+------------+
| nom | proprietaire | espece | genre | naissance | mort |
+----------+---------------+--------+--------+----------------+------------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+----------+---------------+--------+--------+----------------+------------+