Retour à la liste des articles Articles
7 minutes de lecture

Que font les opérateurs LIKE et NOT LIKE ?

Les opérateurs SQL LIKE et NOT LIKE sont utilisés pour trouver des correspondances entre une chaîne de caractères et un modèle donné. Ils font partie du langage SQL standard et fonctionnent dans tous les types de bases de données, ce qui en fait une connaissance essentielle pour tous les utilisateurs de SQL. Une bonne compréhension de ces opérateurs vous permettra d'écrire de meilleures requêtes et de démontrer aux employeurs potentiels que vous avez les compétences requises pour filtrer des ensembles de données étendus.

Le SQL LIKE est un opérateur logique qui vérifie si une chaîne de caractères contient ou non un modèle spécifié. Un exemple simple de ceci est lorsque vous essayez de trouver si une colonne de nom contient un nom de quatre lettres commençant par J (comme "John"). L'opérateur LIKE est souvent utilisé dans la clause WHERE des instructions SELECT, DELETE et UPDATE pour filtrer les données en fonction de modèles. En maîtrisant l'utilisation de l'opérateur LIKE, vous pourrez facilement parcourir de grandes bases de données et récupérer exactement les données dont vous avez besoin. Cet article vous permettra d'acquérir des bases solides sur l'opérateur LIKE. Si vous souhaitez approfondir vos compétences dans ce domaine, envisagez de vous inscrire à ce parcours d'apprentissage complet de LearnSQL.fr, où vous pratiquerez SQL JOINs, les agrégations avec GROUP BY, et d'autres sujets plus avancés.

Examinons comment nous pouvons utiliser l'opérateur LIKE pour filtrer les données renvoyées et ne récupérer ainsi que les enregistrements souhaités. Voici la syntaxe de l'opérateur LIKE:

SELECT column_1, column_2, ... column_n
FROM table_name
WHERE column_1 LIKE pattern

Appliquons cette syntaxe à un exemple pratique. Imaginons que nous ayons une table appelée person_info contenant des informations sur le prénom, le nom et l'âge des personnes.

FirstNameLastNameAge
TimSamuels46
JohnPeterson23
TomWaters42
SarahHenderson48
PaulJohnson34
AndrewWade39
SarahSmith30
LynnPeterson27

Utilisons l'opérateur LIKE pour extraire les informations relatives aux personnes dont le nom de famille est "Peterson".

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName LIKE 'Peterson'

L'exécution de cette requête SQL produirait l'ensemble de résultats suivant :

FirstNameLastNameAge
JohnPeterson23
LynnPeterson27

Il s'agit d'un cas d'utilisation simple de l'opérateur LIKE. Pour des cas simples comme celui-ci, nous aurions également pu écrire :

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName = 'Peterson'

Alors, quelle est la différence entre l'utilisation de LIKE et de equals ? Equals (=) est un opérateur de comparaison qui opère sur des nombres et des chaînes de caractères. Lorsqu'il compare des chaînes de caractères, l'opérateur equals compare des chaînes entières. En comparaison, LIKE compare caractère par caractère grâce à l'utilisation de caractères génériques, qui seront abordés en détail dans cet article.

Le LIKE SQL et les caractères génériques

En plus d'examiner l'utilisation de SQL LIKE et NOT LIKE, nous allons nous pencher sur deux caractères génériques : le pourcentage (%) et le trait de soulignement (_). Les caractères génériques sont utilisés pour remplacer un ou plusieurs caractères dans une chaîne de caractères :

  • Le caractère générique pourcentage (%) remplace un ou plusieurs caractères dans une chaîne de caractères.
  • Le caractère générique de soulignement (_) remplace exactement un caractère dans une chaîne.

Le caractère générique underscore (_)

Examinons d'abord le caractère générique souligné (_) et appliquons-le à notre table person_info table.

Imaginons que nous voulions récupérer, à partir de la table person_infoles prénoms des personnes répondant aux conditions suivantes :

  • Le nom FirstName doit commencer par la lettre "T",
  • La troisième lettre de FirstName doit être "m", et
  • La deuxième lettre de FirstName peut être n'importe quoi.

Nous pouvons utiliser la requête suivante :

SELECT FirstName
FROM person_info
WHERE FirstName LIKE 'T_m'

Le résultat de cette requête est :

SELECT FirstName
FROM person_info
WHERE FirstName LIKE 'T_m'

Le résultat de cette requête est : Le résultat de cette requête est :

FirstName
Tim
Tom

Remarquez que la deuxième lettre du nom peut être n'importe quoi. Notre requête SQL ignore cette lettre et recherche le modèle que nous avons spécifié.

Prenons un autre exemple. Cette fois, nous allons remplacer deux caractères par deux caractères génériques de soulignement (_).

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE 'Wa__'

L'exécution de cette requête permet de récupérer un seul enregistrement de notre table.

FirstNameLastName
AndrewWade

Remarquez que Andrew Wade correspond au modèle mais pas Tom Waters. En plaçant deux traits de soulignement après "Wa", nous spécifions explicitement que le LastName que nous recherchons comporte 4 caractères.

Le caractère de soulignement peut être placé n'importe où dans le modèle que vous recherchez. "_om", "T_m" ou "To_" sont tous des modèles valables.

Le caractère générique pour cent (%)

Examinons maintenant en détail le caractère générique pour cent (%) et appliquons-le à notre table person_info.

Le caractère générique pour cent (%) est utilisé pour remplacer plusieurs caractères. Par exemple, imaginons que nous voulions trouver toutes les personnes dont le nom de famille se termine par "son". Pour y parvenir, nous pouvons simplement écrire la requête suivante :

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE '%son'

Le résultat de cette requête est :

FirstNameLastName
JohnPeterson
SarahHenderson
PaulJohnson
LynnPeterson

Remarquez que le nombre de caractères avant "son" n'a pas d'importance avec ce caractère générique.

Si le motif que vous recherchez est intégré au milieu d'une autre chaîne, vous pouvez utiliser le caractère générique pour cent au début et à la fin du motif. Par exemple, pour trouver tous les employés dont le nom de famille contient "er", utilisez la requête suivante avec le motif "%er%".

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE '%er%'

L'exécution de cette requête donne le jeu de résultats suivant :

FirstNameLastName
JohnPeterson
TomWaters
SarahHenderson
LynnPeterson

Combinons l'utilisation de _ et %. Disons que nous voulons trouver tous les prénoms dont le deuxième caractère est la lettre "a". Nous pouvons le faire avec la requête suivante :

SELECT FirstName, LastName
FROM person_info
WHERE FirstName LIKE '_a%'

L'exécution de cette requête donne cet ensemble :

FirstNameLastName
SarahHenderson
PaulJohnson
PaulaSmith

L'opérateur LIKE est le plus souvent utilisé en conjonction avec la clause WHERE. Cependant, il peut être utilisé partout où vous utilisez une expression en SQL.

SQL NOT LIKE

SQL NOT LIKE se comporte comme vous pouvez vous y attendre, en retournant essentiellement l'opposé de ce que l'opérateur LIKE ferait. Remplaçons LIKE par NOT LIKE dans l'un de nos exemples précédents et voyons l'effet.

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName NOT LIKE 'Peterson'

Voici l'ensemble des résultats :

FirstNameLastNameAge
TimSamuels46
TomWaters42
SarahHenderson48
PaulJohnson34
AndrewWade39
PaulaSmith30

Comme vous pouvez le constater, l'utilisation de NOT LIKE annule le motif que vous avez spécifié. C'est similaire aux autres opérateurs NOT que vous voyez en SQL. Dans ce cas, l'opérateur NOT LIKE récupère les données de toutes les personnes dont le nom de famille n'est pas Peterson.

Sensibilité à la casse de SQL LIKE

Dans les exemples ci-dessus, le nom "Peterson" a été utilisé avec une majuscule. Selon la variante de SQL que vous utilisez, l'opérateur LIKE peut être sensible à la casse. MySQL, PostgreSQL et Oracle sont tous sensibles à la casse par défaut.

Le cas de SQL Server est un peu plus délicat. Par défaut, SQL Server n'est pas sensible à la casse. Toutefois, il est possible de créer une base de données SQL Server sensible à la casse et même de rendre certaines colonnes de table sensibles à la casse.

LIKE et NOT LIKE autres que dans une clause WHERE

Il est courant de voir LIKE et NOT LIKE utilisés en combinaison avec une clause WHERE. Toutefois, l'opérateur LIKE peut être utilisé dans n'importe quelle instruction SQL valide, telle que SELECT, INSERT INTO, UPDATE ou DELETE. Voyons cela à l'aide d'un exemple exécuté sur notre table person_info table. Considérons la requête SQL suivante :

SELECT FirstName, FirstName LIKE 'T%' AS starts_with_t
FROM person_info;

L'instruction SELECT ne se contente pas de récupérer les données de la colonne FirstName. Associée à LIKE, la deuxième colonne sélectionnée dans cette requête renvoie une valeur booléenne basée sur FirstName pour chaque enregistrement de la table. Le modèle que nous avons spécifié est toute chaîne de caractères commençant par la lettre "T", cette requête vérifie donc chaque FirstName pour voir si elle commence par la lettre "T" et renvoie true (1) si c'est le cas, false (0) sinon.

L'exécution de cette requête génère le jeu de résultats suivant :

FirstNamestarts_with_t
Tim1
John0
Tom1
Sarah0
Paul0
Andrew0
Paula0
Lynn0

Les fonctions SQL LIKE et NOT LIKE sont essentielles pour filtrer les données

Nous avons couvert la plupart des situations d'utilisation de l'opérateur LIKE. Il est essentiel de comprendre l'opérateur SQL LIKE. Si vous postulez à un emploi dans lequel l'utilisation de SQL est requise, ce sera peut-être l'une des questions de l'entretien SQL qu'ils vous poseront. La maîtrise de l'opérateur LIKE et de ces deux caractères génériques s'acquiert avec la pratique. Ce cours SQL interactif de LearnSQL.fr, qui comporte 88 exercices distincts, est donc une excellente ressource pour ceux qui cherchent à améliorer leurs connaissances dans ce domaine.