Recherche de motifs - LIKE

22 Sep 2019 22 Sep 2019 8742 vues ESSADDOUKI Mostafa 6 min de lecture

La clause LIKE en SQL

Définition

Parfois, nous pouvons exiger des enregistrements de la base de données qui correspondent à certains modèles. Par exemple, nous pouvons souhaiter extraire toutes les colonnes où les enregistrements commencent par la lettre "y" ou par "b" et se terminent par "a", ou même par des motifs de chaîne plus compliqués et restrictifs.

C'est ici que la clause LIKE vient nous sauver. Elle est souvent associée à la clause WHERE en SQL.

Les caractères génériques (wildcards)

Deux types de caractères génériques sont utilisés pour filtrer les résultats :

Le symbole %

Utilisé pour faire correspondre zéro, un ou plusieurs caractères (longueur variable).

Exemple : "a%" trouve tous les mots commençant par 'a'.

Le symbole _

Utilisé pour correspondre exactement à un caractère (longueur fixe).

Exemple : "a_" trouve les mots de 2 lettres commençant par 'a'.

Règles de correspondance des modèles

ModèleDescription
"a%"Chaînes qui commencent par "a"
"%a"Chaînes qui se terminent par "a"
"a%t"Chaînes qui commencent par "a" et se terminent par "t"
"%abc%"Chaînes qui contiennent la sous-chaîne "abc" à n'importe quelle position
"_abc%"Chaînes contenant "abc" à partir de la deuxième position
"_a%"Chaînes contenant "a" à la deuxième position
"a_%_%"Chaînes qui commencent par "a" et contiennent au moins 2 caractères supplémentaires

Table d'exemple

Pendant ce cours, nous allons travailler sur la table suivante :

Table - Employes

+----+---------+-----+---------+
| Id | Nom     | Age | Salaire |
+----+---------+-----+---------+
|  1 | Ismail  |  25 | 6000.00 |
|  2 | Mohamed |  30 | 8000.40 |
|  3 | Fatima  |  29 | 6000.00 |
|  4 | Dounia  |  31 | 9000.00 |
|  5 | Omar    |  30 | 7500.00 |
|  6 | Mostafa |  32 | 7000.00 |
+----+---------+-----+---------+

Exemples d'utilisation

  Exemple n°1

Rechercher les employés dont le nom commence par "Mo".

SELECT * FROM Employes WHERE Nom LIKE "Mo%";
Résultat
+----+---------+-----+---------+
| Id | Nom     | Age | Salaire |
+----+---------+-----+---------+
|  2 | Mohamed |  30 | 8000.40 |
|  6 | Mostafa |  32 | 7000.00 |
+----+---------+-----+---------+

Le symbole % signifie que n'importe quelle séquence de caractères peut suivre "Mo".

  Exemple n°2

Rechercher les employés dont le nom se termine par "a".

SELECT * FROM Employes WHERE Nom LIKE "%a";
Résultat
+----+---------+-----+---------+
| Id | Nom     | Age | Salaire |
+----+---------+-----+---------+
|  3 | Fatima  |  29 | 6000.00 |
|  4 | Dounia  |  31 | 9000.00 |
|  6 | Mostafa |  32 | 7000.00 |
+----+---------+-----+---------+

  Exemple n°3

Rechercher les employés dont le nom contient la lettre "m" (n'importe où).

SELECT * FROM Employes WHERE Nom LIKE "%m%";
Résultat
+----+---------+-----+---------+
| Id | Nom     | Age | Salaire |
+----+---------+-----+---------+
|  1 | Ismail  |  25 | 6000.00 |
|  2 | Mohamed |  30 | 8000.40 |
|  3 | Fatima  |  29 | 6000.00 |
|  5 | Omar    |  30 | 7500.00 |
|  6 | Mostafa |  32 | 7000.00 |
+----+---------+-----+---------+

Note : La recherche est sensible à la casse selon la configuration de la base de données. Ici, "m" minuscule trouve "Ismail", "Mohamed", "Fatima", "Omar", "Mostafa". Dounia n'a pas de 'm'.

  Exemple n°4

Rechercher les employés dont le nom correspond au modèle "%m_".

SELECT * FROM Employes WHERE Nom LIKE "%m_";
Résultat
+----+--------+-----+---------+
| Id | Nom    | Age | Salaire |
+----+--------+-----+---------+
|  3 | Fatima |  29 | 6000.00 |
+----+--------+-----+---------+

Ce modèle signifie :

  • % : n'importe quelle séquence de caractères avant
  • m : la lettre 'm'
  • _ : exactement un caractère après 'm'

Donc le nom doit avoir un 'm' suivi d'exactement un caractère à la fin. "Fatima" se termine par "ma" (m suivi d'un 'a'), donc correspond. "Mohamed" se termine par "ed" (pas de 'm' à la fin), etc.

  Exemple n°5

Rechercher les employés dont le nom a exactement 6 lettres.

SELECT * FROM Employes WHERE Nom LIKE "______";
Résultat
+----+--------+-----+---------+
| Id | Nom    | Age | Salaire |
+----+--------+-----+---------+
|  1 | Ismail |  25 | 6000.00 |
|  3 | Fatima |  29 | 6000.00 |
|  4 | Dounia |  31 | 9000.00 |
|  5 | Omar   |  30 | 7500.00 |
+----+--------+-----+---------+

6 underscores correspondent à exactement 6 caractères. "Mohamed" a 7 lettres, "Mostafa" a 7 lettres.

  Exemple n°6

Rechercher les employés dont le nom commence par une lettre quelconque, puis a "o" en deuxième position.

SELECT * FROM Employes WHERE Nom LIKE "_o%";
Résultat
+----+---------+-----+---------+
| Id | Nom     | Age | Salaire |
+----+---------+-----+---------+
|  2 | Mohamed |  30 | 8000.40 |
|  5 | Omar    |  30 | 7500.00 |
+----+---------+-----+---------+

"Mohamed" et "Omar" ont 'o' en deuxième lettre (Mo..., Om...).

  Exemple n°7

Rechercher les employés dont le nom commence par 'M' et contient au moins 5 lettres.

SELECT * FROM Employes WHERE Nom LIKE "M____%";
Résultat
+----+---------+-----+---------+
| Id | Nom     | Age | Salaire |
+----+---------+-----+---------+
|  2 | Mohamed |  30 | 8000.40 |
|  6 | Mostafa |  32 | 7000.00 |
+----+---------+-----+---------+

"M" suivi d'au moins 4 caractères (4 underscores) + possibilité de plus avec %.

 Exercice pratique

Utilisation de LIKE

 Niveau : Débutant

En utilisant la table Employes, écrivez les requêtes SQL pour :

  1. Trouver les employés dont le nom contient la lettre "a".
  2. Trouver les employés dont le nom se termine par "i".
  3. Trouver les employés dont le nom a exactement 7 lettres.
  4. Trouver les employés dont le nom commence par "F" et se termine par "a".
Points clés à retenir
  • LIKE est utilisé avec WHERE pour rechercher des motifs dans les chaînes.
  • % remplace une séquence de caractères (0 ou plusieurs).
  • _ remplace exactement un caractère.
  • Les motifs peuvent combiner % et _ pour des recherches précises.
  • La sensibilité à la casse dépend de la base de données (MySQL est insensible par défaut sur Windows, sensible sur Linux).
  • Pour rechercher les caractères % ou _ eux-mêmes, il faut les échapper (avec ESCAPE).

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.