| 3.3.4 Récupérer des informations à partir d'une table
 3.3 Création et utilisation d'une base de données
 3 Tutoriels d'introduction
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Sélectionner toutes les données
 . Sélectionner des lignes particulières
 . Sélectionner des colonnes particulières
 . Trier les enregistrements
 . Calcul sur les Dates
 . Travailler avec la valeur NULL
 ->Recherche de modèles
 . Compter les lignes
 . Utiliser plus d'une table
 
 
 | 
  3.3.4.7 Recherche de modèles    
 
MySQL fournit le standard SQL des recherches de modèles, basé sur une extension
des expressions régulières similaires à celles utilisées par les 
utilitaires Unix comme  
vi
 ,  
grep
 , et  
sed
 .
La recherche de modèles SQL vous permet d'utiliser le caractère  
'_'
  pour 
trouver n'importe quel caractère et le caractère  
'%'
  pour trouver un nombre 
arbitraire de caractères (y compris aucun caractère). Dans MySQL, la recherche de 
modèles est sensible à la casse par défaut. Quelques exemples vous sont 
présentés ici.
Notez que vous n'utilisez ni  
=
  ni  
<>
  lorsque vous utilisez la recherche 
de modèles SQL ; utilisez les opérateurs de comparaison  
LIKE
  ou 
 
NOT LIKE
  à la place. 
Pour trouver les noms commençant par la lettre  
'b'
  :
 Pour trouver les noms finissant par  
'fy'
  :| 
mysql> SELECT * FROM animal WHERE nom LIKE "b%";+--------+--------+--------+------+------------+------------+
 | nom    | maitre | espece | sexe | naissance  | mort       |
 +--------+--------+--------+------+------------+------------+
 | Buffy  | Harold | chien  | f    | 1989-05-13 | NULL       |
 | Bowser | Diane  | chien  | m    | 1989-08-31 | 1995-07-29 |
 +--------+--------+--------+------+------------+------------+
 | 
 Pour trouver les noms contenant le caractères  
'w'
  :| 
mysql> SELECT * FROM animal WHERE nom LIKE "%fy";+--------+--------+---------+------+------------+-------+
 | nom    | maitre | espece  | sexe | naissance  | mort  |
 +--------+--------+---------+------+------------+-------+
 | Fluffy | Harold | chat    | f    | 1993-02-04 | NULL  |
 | Buffy  | Harold | chien   | f    | 1989-05-13 | NULL  |
 +--------+--------+---------+------+------------+-------+
 | 
 Pour trouver les noms contenant exactement 5 caractères, utilisez le caractère 
de recherche  
'_'
  :| 
mysql> SELECT * FROM animal WHERE nom LIKE "%w%";+----------+--------+---------+------+------------+------------+
 | nom      | maitre | espece  | sexe | naissance  | mort       |
 +----------+--------+---------+------+------------+------------+
 | Claws    | Gwen   | chat    | m    | 1994-03-17 | NULL       |
 | Bowser   | Diane  | chien   | m    | 1989-08-31 | 1995-07-29 |
 | Whistler | Gwen   | oiseaux | NULL | 1997-12-09 | NULL       |
 +----------+--------+---------+------+------------+------------+
 | 
 L'autre type de recherche de modèles fourni par MySQL utilise les expressions 
régulières étendues. Lorsque vous testez une recherche avec ce type de modèle,
utilisez les opérateurs  
REGEXP
  et  
NOT REGEXP
  (ou  
RLIKE
  et 
 
NOT RLIKE
  qui sont des synonymes).Quelques caractéristiques des expressions régulières étendues sont :| 
mysql> SELECT * FROM animal WHERE nom LIKE "_____";+-------+--------+--------+------+------------+------+
 | nom   | maitre | espece | sexe | naissance  | mort |
 +-------+--------+--------+------+------------+------+
 | Claws | Gwen   | chat   | m    | 1994-03-17 | NULL |
 | Buffy | Harold | chien  | f    | 1989-05-13 | NULL |
 +-------+--------+--------+------+------------+------+
 | 
 
Pour démontrer comment les expressions régulières fonctionnent, les requêtes  
LIKE
  
vues précédemment ont été réécrites pour utiliser  
REGEXP
 .
Le caractère  
'.'
  trouve n'importe quel caractère.
Une classe de caractères  
'[...]'
  trouve n'importe quel caractère contenu 
entre les crochets. Par exemple, la classe de caractères  
'[abc]'
  trouve
le caractère  
'a'
 ,  
'b'
 , ou  
'c'
 . Pour définir un intervalle de 
caractères, utilisez un trait d'union. La classe de caractères  
'[a-z]'
  
trouvera n'importe quel caractère minuscule, tout comme la classe  
'[0-9]'
 
trouvera n'importe quel nombre.
Le caractère  
'*'
  trouvera aucune ou plus d'instances du caractère qui le précède.
Par exemple,  
'x*'
  trouvera n'importe quel nombre de fois le caractère  
'x'
 , 
 
'[0-9]*'
  trouvera n'importe quel nombre, et  
'.*'
  trouvera n'importe quel nombre de fois n'importe quel caractère.
Le modèle est trouvé s'il se produit n'importe où dans la valeur testée.
(Les modèles SQL ne sont trouvés que s'ils sont présents en valeur entière.)
Pour ancrer un modèle de sorte qu'il soit trouvé au début ou à la fin de valeur testée, 
utilisez  
'^'
  au début ou bien  
'$'
  à la fin du modèle.
 
Pour trouver les noms qui commencent par la lettre  
'b'
 , utilisez  
'^'
  pour 
trouver le début du nom :
 Avant la version 3.23.4 de MySQL,  
REGEXP
  était sensible à la casse, 
et la requête précédente ne retournait aucune ligne. Pour trouver la lettre  
'b'
  
minuscule ou majuscule, utilisez cette requête à la place :| 
mysql> SELECT * FROM animal WHERE nom REGEXP "^b";+--------+--------+--------+------+------------+------------+
 | nom    | maitre | espece | sexe | naissance  | mort       |
 +--------+--------+--------+------+------------+------------+
 | Buffy  | Harold | chien  | f    | 1989-05-13 | NULL       |
 | Bowser | Diane  | chien  | m    | 1989-08-31 | 1995-07-29 |
 +--------+--------+--------+------+------------+------------+
 | 
 Depuis MySQL 3.23.4, pour forcer  
REGEXP
  à être sensible à la casse, 
utilisez le mot-clé  
BINARY
  pour faire de la chaîne, une chaîne binaire.
Cette requête trouvera uniquement la lettre minuscule  
'b'
  au début du nom :| 
mysql> SELECT * FROM animal WHERE nom REGEXP "^[bB]";
 | 
 Pour trouver les noms finissant par  
'fy'
 , utilisez  
'$'
  pour trouver 
la fin du nom :| 
mysql> SELECT * FROM animal WHERE nom REGEXP BINARY "^b";
 | 
 Pour trouver les noms contenant la lettre  
'w'
  minuscule ou majuscule, 
utilisez la requête suivante :| 
mysql> SELECT * FROM animal WHERE nom REGEXP "fy$";+---------+--------+--------+-------+------------+------+
 | nom     | maitre | espece | sexe  | naissance  | mort |
 +---------+--------+--------+-------+------------+------+
 | Fluffy  | Harold | chat   | f     | 1993-02-04 | NULL |
 | Buffy   | Harold | chien  | f     | 1989-05-13 | NULL |
 +---------+--------+--------+-------+------------+------+
 | 
 Parce qu'une expression régulière est trouvée si le modèle
se trouve n'importe où dans la valeur, il n'est pas nécessaire dans la 
requête précédente de mettre un joker de chaque côté du 
modèle recherché pour trouver la valeur entière comme
cela aurait été le cas en utilisant les modèles de recherche SQL.| 
mysql> SELECT * FROM animal WHERE nom REGEXP "w";+----------+--------+---------+------+------------+------------+
 | nom      | maitre | espece  | sexe | naissance  | mort       |
 +----------+--------+---------+------+------------+------------+
 | Claws    | Gwen   | chat    | m    | 1994-03-17 | NULL       |
 | Bowser   | Diane  | chien   | m    | 1989-08-31 | 1995-07-29 |
 | Whistler | Gwen   | oiseaux | NULL | 1997-12-09 | NULL       |
 +----------+--------+---------+------+------------+------------+
 | 
 
Pour trouver les noms contenant exactement 5 caractères, utilisez  
'^'
  et  
'$'
  
pour trouver le début et la fin du nom, et 5 instances de  
'.'
  au milieu :
 Vous pouvez aussi écrire la requête suivante en utilisant l'opérateur  
'{n'
 } 
``répéter- 
n
 -fois'' :| 
mysql> SELECT * FROM animal WHERE nom REGEXP "^.....$";+-------+--------+--------+------+------------+------+
 | nom   | maitre | espece | sexe | naissance  | mort |
 +-------+--------+--------+------+------------+------+
 | Claws | Gwen   | chat   | m    | 1994-03-17 | NULL |
 | Buffy | Harold | chien  | f    | 1989-05-13 | NULL |
 +-------+--------+--------+------+------------+------+
 | 
 | 
mysql> SELECT * FROM animal WHERE nom REGEXP "^.{5}$";+-------+--------+--------+------+------------+------+
 | nom   | maitre | espece | sexe | naissance  | mort |
 +-------+--------+--------+------+------------+------+
 | Claws | Gwen   | chat   | m    | 1994-03-17 | NULL |
 | Buffy | Harold | chien  | f    | 1989-05-13 | NULL |
 +-------+--------+--------+------+------------+------+
 | 
 |