MySQL - Opérateur NOT REGEXP

Introduction à l'opérateur NOT REGEXP

Bonjour, futurs passionnés de bases de données ! Aujourd'hui, nous allons plonger dans le monde fascinant de l'opérateur NOT REGEXP de MySQL. En tant que votre enseignant bienveillant en informatique, je suis là pour vous guider à travers ce sujet avec la même excitation que j'ai ressentie lorsque j'ai découvert cela pour la première fois. Faites-moi confiance, à la fin de cette leçon, vous maîtriserez cet outil puissant comme un magicien de la base de données !

MySQL - NOT REGEXP Operator

Qu'est-ce que NOT REGEXP ?

Avant de rentrer dans le vif du sujet, comprendre ce que signifie réellement NOT REGEXP. En termes simples, NOT REGEXP est comme un vigile à l'entrée d'un club exclusif, mais au lieu de faire entrer des gens, il garde certains motifs hors de nos résultats de recherche.

REGEXP signifie Expression Régulière, ce qui est une séquence de caractères qui forme un motif de recherche. Lorsque nous ajoutons NOT avant, nous disons essentiellement : "Eh MySQL, montre-moi tout ce qui ne correspond pas à ce motif !"

L'opérateur NOT REGEXP en action

Mettons les mains dans le cambouis et voyons comment cela fonctionne en pratique. Imaginons que nous avons une table appelée book_club avec une colonne book_title. Nous voulons trouver tous les livres qui n'ont pas le mot "mystery" dans leurs titres.

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery';

Dans cet exemple, MySQL renverra tous les titres de livres qui ne contiennent pas le mot "mystery". C'est comme demander à votre bibliothécaire tous les livres qui ne sont pas des mystères - plutôt génial, non ?

Sensibilité à la casse

Une chose importante à noter est que par défaut, REGEXP (et NOT REGEXP) sont insensibles à la casse. Ainsi, 'mystery', 'Mystery', et même 'mYsTeRy' seraient tous exclus dans notre exemple précédent. Si vous souhaitez le rendre sensible à la casse, vous pouvez utiliser le mot-clé BINARY :

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP BINARY 'mystery';

Maintenant, seul 'mystery' (tout en minuscules) sera exclu, mais 'Mystery' ou 'MYSTERY' apparaîtra toujours dans nos résultats.

Patterns avancés avec NOT REGEXP

Reprenons de l'élan et regardons quelques motifs plus complexes. Souvenez-vous, NOT REGEXP est incroyablement polyvalent !

Exclure plusieurs mots

Que se passe-t-il si nous voulons exclure les livres avec "mystery" ou "thriller" dans le titre ?

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery|thriller';

Le symbole | agit comme un opérateur "ou". Cette requête renverra tous les livres qui ne contiennent ni "mystery" ni "thriller" dans leurs titres.

Exclure des mots au début ou à la fin

Peut-être que nous voulons trouver des livres qui ne commencent pas par "The" :

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP '^The';

Le symbole ^ ancrait le motif au début de la chaîne. De même, si nous voulons des livres qui ne se terminent pas par "Chronicles", nous pourrions utiliser :

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'Chronicles$';

Le symbole $ ancrait le motif à la fin de la chaîne.

Utilisation de l'opérateur NOT REGEXP dans un programme client

Maintenant, voyons comment nous pouvons utiliser NOT REGEXP dans un programme client. Je vais utiliser Python avec la bibliothèque MySQL Connector comme exemple, mais le concept est similaire dans d'autres langages.

import mysql.connector

# Établir la connexion
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="book_club_db"
)

mycursor = mydb.cursor()

# Exécuter la requête NOT REGEXP
mycursor.execute("SELECT book_title FROM book_club WHERE book_title NOT REGEXP 'fantasy|sci-fi'")

# Récupérer et afficher les résultats
for x in mycursor:
print(x)

Ce script se connecte à notre base de données, exécute une requête pour trouver tous les livres qui n'ont pas "fantasy" ou "sci-fi" dans leurs titres, puis imprime les résultats.

Patterns courants avec NOT REGEXP

Regardons quelques motifs courants que vous pourriez trouver utiles :

Motif Description Exemple
[^...] Correspond à n'importe quel caractère non dans les brackets '[^aeiou]' correspond à n'importe quel non-voyel
.* Correspond à n'importe quelle séquence de caractères 'not.*end' correspond aux chaînes avec "not" et "end" avec n'importe quoi entre les deux
\d Correspond à n'importe quel digit '\d' correspond à n'importe quel chiffre unique
\D Correspond à n'importe quel non-digit '\D' correspond à n'importe quel caractère non-digit
\s Correspond à n'importe quel caractère d'espacement '\s' correspond aux espaces, tabulations, nouvelles lignes
\S Correspond à n'importe quel non-caractère d'espacement '\S' correspond à n'importe quel caractère qui n'est pas un espace, une tabulation ou une nouvelle ligne

Conclusion

Et voilà, futurs gourous de la base de données ! Nous avons exploré l'opérateur NOT REGEXP, de son utilisation de base à ses motifs plus avancés. Souvenez-vous, comme avec tout outil puissant, il faut de la pratique pour le maîtriser. N'ayez pas peur d'expérimenter avec différents motifs et voyez quelles résultats vous obtenez.

Dans mes années d'enseignement, j'ai vu des élèves passer de l'incompréhension totale de NOT REGEXP à l'utilisation aisée dans des requêtes complexes. Vous êtes bien sur le chemin de les rejoindre !

Avant de me quitter, voici un peu d'humour de base de données pour vous : Pourquoi le développeur a-t-il démissionné ? Il ne pouvait pas TABLE la discussion sur son salaire ! (Compris ? TABLE ? Bon, je me sens sorti... )

Continuez à pratiquer, restez curieux, et bonnes requêtes !

Credits: Image by storyset