La clause LIKE en SQL
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 :
Utilisé pour faire correspondre zéro, un ou plusieurs caractères (longueur variable).
Exemple : "a%" trouve tous les mots commençant par 'a'.
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èle | Description |
|---|---|
"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%";+----+---------+-----+---------+ | 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";+----+---------+-----+---------+ | 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%";+----+---------+-----+---------+ | 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_";+----+--------+-----+---------+ | Id | Nom | Age | Salaire | +----+--------+-----+---------+ | 3 | Fatima | 29 | 6000.00 | +----+--------+-----+---------+
Ce modèle signifie :
%: n'importe quelle séquence de caractères avantm: 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 "______";+----+--------+-----+---------+ | 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%";+----+---------+-----+---------+ | 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____%";+----+---------+-----+---------+ | 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 %.
Utilisation de LIKE
En utilisant la table Employes, écrivez les requêtes SQL pour :
- Trouver les employés dont le nom contient la lettre "a".
- Trouver les employés dont le nom se termine par "i".
- Trouver les employés dont le nom a exactement 7 lettres.
- Trouver les employés dont le nom commence par "F" et se termine par "a".
- Noms contenant "a" :
SELECT * FROM Employes WHERE Nom LIKE "%a%";Résultat : Fatima, Dounia, Mostafa, Ismail, Mohamed (tous sauf Omar).
- Noms se terminant par "i" :
SELECT * FROM Employes WHERE Nom LIKE "%i";Résultat : Ismail (se termine par 'l', pas 'i') - en fait aucun nom ne se termine par 'i' dans notre table. Vérifiez les données.
- Noms de 7 lettres :
SELECT * FROM Employes WHERE Nom LIKE "_______";Résultat : Mohamed, Mostafa (7 lettres).
- Noms commençant par "F" et terminant par "a" :
SELECT * FROM Employes WHERE Nom LIKE "F%a";Résultat : Fatima.
- 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.