MySQL - Opérateur RLIKE

Bonjour, aspirants passionnés de bases de données ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde de l'opérateur RLIKE de MySQL. En tant que votre professeur de sciences informatiques bienveillant, je suis là pour vous guider à travers ce sujet avec un grand nombre d'exemples et d'explications. Alors, prenez vos blocs-notes virtuels, et plongons dedans !

MySQL - RLIKE Operator

Opérateur RLIKE de MySQL

Qu'est-ce que RLIKE ?

RLIKE est un opérateur puissant dans MySQL qui nous permet d'effectuer des correspondances de motifs en utilisant des expressions régulières. Je sais ce que vous pensez - "Expressions régulières ? Ça a l'air effrayant !" Mais ne vous inquiétez pas, nous allons le décomposer étape par étape.

Pensez à RLIKE comme un outil de recherche super-intelligent. C'est comme avoir un détective dans votre base de données qui peut trouver des informations basées sur des motifs complexes. Génial, non ?

Syntaxe de base

La syntaxe de base de l'opérateur RLIKE est :

expr RLIKE pattern

Ici, expr est l'expression (généralement un nom de colonne) que nous voulons rechercher, et pattern est l'expression régulière que nous voulons correspondre.

Commençons avec un exemple simple :

SELECT * FROM customers WHERE last_name RLIKE 'son$';

Cette requête trouvera tous les clients dont le nom de famille se termine par 'son'. Le symbole $ dans le motif signifie "fin de la chaîne". Ainsi, il correspondra aux noms comme Johnson, Wilson ou Anderson.

Motifs utilisés avec RLIKE

Maintenant, examinons quelques motifs courants que nous pouvons utiliser avec RLIKE. J'aime penser à eux comme les codes secrets que notre détective de base de données utilise pour résoudre des mystères !

Motif Description Exemple
^ Correspond à la début de la chaîne '^A' correspond à 'Apple' mais pas à 'Banana'
$ Correspond à la fin de la chaîne 'e$' correspond à 'Apple' mais pas à 'Banana'
. Correspond à n'importe quel caractère unique 'b.t' correspond à 'bat', 'bit', 'but', etc.
* Correspond à zéro ou plusieurs occurrences du caractère précédent 'go*gle' correspond à 'ggle', 'google', 'gooogle', etc.
+ Correspond à une ou plusieurs occurrences du caractère précédent 'go+gle' correspond à 'google', 'gooogle' mais pas à 'ggle'
[] Correspond à n'importe quel caractère entre les crochets '[aeiou]' correspond à n'importe quel voyelle
[^] Correspond à n'importe quel caractère en dehors des crochets '[^0-9]' correspond à n'importe quel caractère non numérique

Mettons-en quelques-uns à l'œuvre !

SELECT * FROM products WHERE name RLIKE '^A.*e$';

Cette requête trouve tous les produits dont les noms commencent par 'A' et se terminent par 'e'. Le .* au milieu signifie "zéro ou plusieurs de n'importe quel caractère". Ainsi, cela pourrait correspondre à des noms comme "Apple", "Airplane" ou même "Ae".

RLIKE sur des chaînes

RLIKE n'est pas seulement pour la recherche dans des tables. Nous pouvons l'utiliser directement sur des chaînes aussi ! C'est génial pour tester nos motifs avant de les utiliser dans une requête.

SELECT 'MySQL' RLIKE 'SQL$';

Cela renverra 1 (vrai) car 'MySQL' se termine bien par 'SQL'.

Voici un exemple fun :

SELECT 'Mississippi' RLIKE 's+is+';

Cela renvoie 1 car 'Mississippi' contient un ou plusieurs 's' suivi par 'i' suivi par un ou plusieurs 's'. Il correspond à 'ssis' au milieu du mot.

Opérateur RLIKE utilisé avec un programme client

Maintenant, voyons comment nous pouvons utiliser RLIKE dans un scénario plus complexe. Imaginons que nous avons une table d'adresses e-mail, et que nous voulons trouver toutes les adresses Gmail. Voici comment nous pourrions le faire :

SELECT * FROM users WHERE email RLIKE '^[A-Za-z0-9._%+-]+@gmail\\.com$';

Whaou, cela a l'air compliqué ! Décomposons-le :

  • ^ : Début de la chaîne
  • [A-Za-z0-9._%+-]+ : Un ou plusieurs lettres, nombres ou caractères spéciaux autorisés dans les adresses e-mail
  • @ : Le symbole @
  • gmail\\.com : Littéralement "gmail.com" (nous devons échapper le point avec une barre oblique)
  • $ : Fin de la chaîne

Ce motif correspondra à n'importe quelle adresse Gmail standard.

Voici une petite histoire de mon expérience d'enseignement : J'ai eu un étudiant qui tentait de trouver tous les utilisateurs avec des adresses e-mail AOL dans une base de données. Il vérifiait manuellement chaque entrée (il y en avait des milliers !). Quand je lui ai montré comment le faire avec RLIKE, il était tellement excité qu'il a pratiquement dansé dans la classe !

Temps de pratique !

Terminons par un exercice amusant. Pouvez-vous écrire un motif RLIKE pour trouver tous les numéros de téléphone au format (XXX) XXX-XXXX ? Essayez-le, puis vérifiez la réponse ci-dessous !

SELECT * FROM contacts WHERE phone RLIKE '^\\\([0-9]{3}\\\) [0-9]{3}-[0-9]{4}$';

Ce motif correspond :

  • ^\\\( : Commence par une parenthèse ouverte (échappée deux fois parce qu'elle est spéciale dans à la fois regex et MySQL)
  • [0-9]{3} : Exactement trois chiffres
  • \\\) : Une parenthèse fermée
  • ` ` : Un espace
  • [0-9]{3} : Trois autres chiffres
  • - : Un tiret
  • [0-9]{4} : Quatre derniers chiffres
  • $ : Fin de la chaîne

Et voilà ! Vous êtes maintenant équipé de la puissance de RLIKE. Souvenez-vous, comme toute superpuissance, utilisez-la avec sagesse. Bonne chance pour vos requêtes, futurs magiciens de la base de données !

Credits: Image by storyset