![]() ![]() |
|
![]() ![]() ![]() ![]() |
|
![]() |
![]() 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
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 Recherche des noms commençant par ``b'': mysql> SELECT * 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 * 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 * 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 * 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é 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 * 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 * 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 * 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''} `` mysql> SELECT * 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 | +----------+---------------+--------+--------+----------------+------------+ |