Les bases de données sont utilisées afin de stocker des informations que l’on peut consulter et récupérer dès que l’on en a besoin. Plusieurs manières peuvent être mises en place afin d’interroger une base de données et la commande SQL LIKE figure parmi celles-ci.

Vous verrez dans cet article comment utiliser cette commande et ces différents modèles de recherches.

SQL LIKE : définition

L’opérateur Like est utilisé en SQL pour effectuer une requête de recherche suivant un modèle basé sur les valeurs d’une colonne. Vous pouvez par exemple faire une recherche des enregistrements dont la valeur d’une colonne commence par une lettre quelconque donnée.  La commande SQL Like est utilisée avec la clause WHERE et les modèles de recherche sont multiples.

SQL LIKE : syntaxe

La commande s’utilise de la manière suivante :

SELECT * FROM une_table
WHERE une_colonne LIKE un_modele;

Avec la présence de l’opérateur LIKE, la requête SQL  va sélectionner les enregistrements qui se trouvent dans la table nommée une_table dont la valeur de la colonne une_colonne respecte le modèle de recherche un_modele

Les caractères Jokers

L’opérateur Like va de pair avec les caractères jokers (wildcards). Le rôle de ces caractères est de se substituer à tout autre caractère au sein d’une chaîne de caractères. Il existe deux types de caractères joker à savoir :

  • Joker % : le pourcentage qui remplace zéro, un ou plusieurs caractères ;
  • Joker _ : l’underscore qui représente un seul et unique caractère.

Les différents modèles de recherches

Il n’y a pas un nombre exact pour les modèles de recherche. Grâce à votre imagination, vous avez la possibilité d’utiliser un modèle de votre choix et cela en fonction de votre besoin. Voici quelque exemple de modèle de recherche : 

  • Like “a%” : cela indique qu’il faut rechercher les chaînes de caractères qui commencent par le caractère a ;
  • Like “%a” : cela indique qu’il faut rechercher les chaînes de caractères qui se terminent par le caractère a ;
  • Like “%a%” : cela indique qu’il faut rechercher les chaînes de caractères qui contiennent au moins un caractère a ;
  • Like “a%b” : cela indique qu’il faut rechercher les chaînes de caractères qui commencent par le caractère a et se termine par le caractère b ; 
  • Like “a__” : cela indique qu’il faut rechercher les chaînes de caractères ne comportant que trois caractères et qui commencent par le caractère a ;
  • Like “_a%” : cela indique qu’il faut rechercher les chaînes de caractères où le caractère a se trouve en deuxième position.

Pour bien comprendre le fonctionnement de l’opérateur Like passons par un exemple. Considérons la table nommée clients qui contient les données suivantes : 

table-clients

Pour rechercher les clients dont l’adresse email termine par @yeah.com, il faut exécuter la requête suivante :

SELECT * FROM clients WHERE email LIKE "%@yeah.com";

Le résultat obtenu est le suivant :

resultat-sql-like

Et si l’on souhaite rechercher les clients dont le code postal commence par 77, on peut choisir entre les deux requêtes suivantes :

SELECT * FROM client WHERE cp LIKE "77%";
SELECT * FROM client WHERE cp LIKE "77__";

Le résultat de ces deux requêtes ci-dessus est le même :

resultat-sql-like-e

Pour rechercher les clients dont le prénom contient au moins un E, voici la requête à exécuter :

SELECT * FROM client WHERE prenom LIKE "%e%";
sql-like-exemple

Pour rechercher les clients dont le prénom comporte exactement 4 caractères :

SELECT * FROM client WHERE prenom LIKE "____";
like-caractere

Et voici la requête pour rechercher les clients dont le prénom comporte un E en deuxième position :

SELECT * FROM client WHERE prenom LIKE "_e%";
like-position

Utilisation de l’opérateur NOT avec SQL LIKE

NOT est l’un des opérateurs qui peuvent être employés avec la commande LIKE. Reprenons notre table afin d’illustrer cela.

Nous allons dans ce cas rechercher tous les clients dont les noms ne contiennent pas la lettre “o” : 

SELECT * FROM client WHERE nom NOT LIKE '%o%';
not-sql-like

Vous pouvez constater que les noms que l’on retrouve dans le résultat ne contiennent pas de « o ».

Exemple de caractère générique [liste de caractère]

En mettant une liste de caractères dans un crochet par exemple [ABC], cela s’apparente à un unique caractère à rechercher dans la chaîne de caractère. L’exemple suivant retourne tous les clients qui ont pour premier caractère de nom “a” ou “r” :

SELECT * FROM client WHERE nom  LIKE '[ar]%';

Exemple de caractère générique [caractère-caractère]

L’expression [caractère-caractère] représente une plage de caractère. Donc la requête doit rechercher les chaînes de caractère ayant un caractère compris dans cette plage.  Par exemple, la requête ci-dessous va rechercher les clients qui ont pour premier caractère de leur nom la lettre comprise dans la plage [M-O].

SELECT * FROM client WHERE nom  LIKE '[M-O]%';

Exemple de caractère générique [^ Liste ou plage de caractères]

Le signe ^ suivi d’une plage de caractère ou d’un caractère représente un unique caractère qui ne se trouve pas dans la plage ou la liste de caractère spécifiée. La requête suivante donne en retour les noms des clients dont le premier caractère n’est pas une lettre se trouvant dans la plage [M-O] :

SELECT * FROM client WHERE nom  LIKE '[^M-O]%';

Utilisation de SQL Like avec ESCAPE

Pour bien comprendre cette partie, nous allons considérer une autre table nommée vente ayant les données suivantes : 

table-vente

Maintenant, on va par exemple essayer de rechercher 30% dans la colonne de commentaire avec la requête suivante :

SELECT  id,  commentaire FROM  vente WHERE   commentaire LIKE '%30%';
sql-like-vente

Mais nous voyons que le résultat n’est pas ce à quoi nous nous attendions. On voit que 30USD est aussi renvoyé par la requête. C’est dans le but de pallier à ce problème que l’on doit avoir recours à la clause ESCAPE. Réécrivons la requête de la manière suivante :

SELECT  id,  commentaire FROM  vente WHERE   commentaire LIKE '%30!%%' ESCAPE ‘!’;
sql-like-escape

Grâce au caractère “!”, la clause ESCAPE permet à la commande Like de traiter l’opérateur % comme une chaîne littérale, mais pas comme un caractère générique.

Utilisation de Regex dans SQL

Une séquence de caractère qui sert à rechercher et localiser d’autres séquences de caractère correspondant à un modèle est appelée Regex ou expression régulière

Si vous voulez par exemple rechercher les adresses mail d’une entreprise, Regex vous permettra de le faire. Avec Regex, vous pouvez définir un modèle en vous servant des Méta caractères et des comparateurs. Il faut utiliser ~* et % pour définir le modèle comme ceci :

SELECT * FROM Email Addresses
WHERE Email Address ~* '%@chartio.com'

Voici une liste de méta caractère pour vous aider à définir des modèles :

Méta caractèreDescriptionExempleExemple de correspondance
^indique que les caractères à considérer se trouve au début de la chaîne^c%chien, car
|indique une alternancec(a|o)%camera, cause, coupe
()regroupe les éléments en un seul élément logiquec(a|o)%camera, cause, coupe
_s’utilise avec LIKE et SIMILAE TO et indique tout caractère uniquec_ca, pics
%s’utilise avec LIKE et SIMILAR TO et indique toute la chaînec%cadre, article
.s’utilise avec POSIX et indique tout caractère uniquec.fico, mico
.*s’utilise avec POSIX et indique toute la chaînec.*caisse, articulation
+répétition de l’élément suivantcO+cool

Les comparateurs

Il y a en tout trois façons d’utiliser les comparateurs de Regex en SQL :

  • LIKE
  • SIMILAR TO
  • POSIX 

LIKE et SIMILAR TO sont utilisés pour effectuer les différentes comparaisons basées sur la recherche de chaine de caractère correspondante.

Cependant, il existe une petite différence entre ces deux comparateurs. SIMILAR TO se base sur la définition de SQL99 des expressions régulières tandis que LIKE se base sur la définition PSQL des expressions régulières.

POSIX est différent de LIKE et SIMILAR TO, car il n’est pas utilisé directement dans une requête SQL. En effet, il s’agit d’un ensemble de correspondance et de non-équivalence. C’est l’une des méthodes les plus puissantes pour utiliser Regex en SQL.

Regex ne se sert pas de = et != pour effectuer les comparaisons mais plutôt des comparateurs POSIX suivant :

  1. ~ : Il est sensible à la casse et permet de comparer deux chaînes. Il donne en retour True si la première chaîne se trouve dans la deuxième chaîne.
  2. ~*: Insensible à la casse, il permet de comparer deux chaînes et donne en retour True si la première chaîne se trouve dans la deuxième chaîne.
  3. !~ : Il permet de comparer deux chaînes, et donne en retour False si la première chaîne se trouve dans la deuxième chaîne. Il est également sensible à la casse ;
  4. !~* : Insensible à la casse, il permet de comparer deux chaînes, et donne en retour False si la première chaîne se trouve dans la deuxième chaîne.

On peut se servir de ces différents comparateurs dans une requête pour localiser ou exclure quelques données.

Exemple de comparateur de Regex dans les requêtes SQL

OpérationDescriptionComparaisonSortie
~correspondance, sensible à la casse‘Timmy’ ~ ‘T%’
‘Timmy’ ~ ‘t%’
True
False
~*correspondance, insensible à la casse‘Timmy’ ~* ‘T%’
‘Timmy’ ~* ‘t%’
True
True
!~pas de correspondance, sensible à la casse‘Timmy’ !~ ‘T%’
‘Timmy’ !~ ‘t%’
False
True
!~*pas de correspondance, insensible à la casse‘Timmy’ !~* ‘T%’
‘Timmy’ !~* ‘t%’
True
True

Par exemple, si vous souhaitez rechercher dans une base de données toutes les entrées contenant le mot “feu”, il suffit d’utiliser : ~* ”feu”. Ainsi, vous aurez toutes les lignes contenant ce mot.

SELECT (nom_colonne) FROM (nom_table) WHERE (nom_colonne) ~* 'feu';

Et si vous souhaitez lister seulement les entrées qui commencent par le mot “Feu”, la requête ressemblera à ceci :

SELECT (nom_colonne) FROM (nom_table) WHERE (nom_colonne) ~* '^feu';

Voilà, nous terminons cet article sur ce dernier exemple. Dans cet article, vous avez exploré la fonction SQL Like pour effectuer des recherches en se servant des différentes conditions. Il faut aussi retenir que LIKE est compatible avec la recherche générique de caractères Unicode et ASCII. Lors des traitements de données de type Unicode, l’espace de droite est significatif.

Si vous souhaitez apprendre d’autres commandes SQL, vous pouvez consulter la catégorie base de données de notre blog. Nous vous invitons également à télécharger cette formation sur Spark avec Scala afin d’étendre vos connaissances en Big Data.


Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

>