SQL LIKE : rechercher un motif dans du texte
L'égalité = ne trouve que les textes identiques. Pour chercher les noms qui commencent par une lettre, les e-mails qui contiennent un domaine ou les produits qui se terminent par un mot, on utilise LIKE avec des caractères jokers.
Syntaxe
WHERE colonne LIKE 'motif'Comment ça marche
Le motif de LIKE peut contenir deux jokers :
| Joker | Remplace | Exemple | Trouve |
|---|---|---|---|
% | n'importe quelle suite de caractères (même vide) | 'B%' | Benali, Bonnet, B |
_ | exactement un caractère | '_ade' | Jade, Wade |
Les motifs les plus courants : 'abc%' (commence par), '%abc' (se termine par) et '%abc%' (contient).
En SQLite, LIKE ignore les majuscules pour les lettres sans accent : 'b%' trouve aussi « Bernard ». Ce comportement varie selon les bases : PostgreSQL est sensible à la casse (il propose ILIKE), MySQL dépend de la collation.
Schéma
| prenom | nom |
|---|---|
| Léa | Benali |
| Hugo | Martin |
| Inès | Bonnet |
| Adam | Roux |
| prenom | nom |
|---|---|
| Léa | Benali |
| Inès | Bonnet |
Schéma simplifié pour illustrer le principe. Les exemples ci-dessous utilisent la vraie base d'exercices de SQL Quest (une boutique en ligne fictive : voir le schéma complet).
Exemples avec leurs résultats
1. Commence par
Les clients dont le nom commence par « B ».
SELECT prenom, nom
FROM clients
WHERE nom LIKE 'B%'
LIMIT 8; Essayer dans le bac à sable| prenom | nom |
|---|---|
| Léa | Blanc |
| Sarah | Benali |
| Lucas | Blanc |
| Léa | Benali |
| Karim | Bernard |
| Sarah | Blanc |
| Chloé | Bonnet |
| Emma | Bernard |
8 lignes au total
2. Contient
Les produits dont le nom contient « de ».
SELECT nom, categorie
FROM produits
WHERE nom LIKE '%de%'; Essayer dans le bac à sable| nom | categorie |
|---|---|
| Tapis de yoga | Sport |
| Gourde inox | Sport |
| Corde à sauter | Sport |
| Ballon de foot | Sport |
| Guide SQL | Livres |
| Livre de cuisine | Livres |
6 lignes au total
3. Se termine par
Les produits dont le nom se termine par « e ».
SELECT nom
FROM produits
WHERE nom LIKE '%e'; Essayer dans le bac à sable| nom |
|---|
| Clavier mécanique |
| Bougie parfumée |
| Cafetière |
| Vase céramique |
| Raquette |
| BD aventure |
| Livre de cuisine |
| Huile d'olive |
8 lignes au total
4. Un caractère précis avec _
Les prénoms de 4 lettres qui finissent par « a ».
SELECT DISTINCT prenom
FROM clients
WHERE prenom LIKE '___a'; Essayer dans le bac à sable| prenom |
|---|
| Emma |
| Lina |
2 lignes au total
Les erreurs fréquentes
Oublier le joker %
Sans %, LIKE 'B' cherche exactement le texte « B » et ne trouve rien.
SELECT * FROM clients WHERE nom LIKE 'B';SELECT * FROM clients WHERE nom LIKE 'B%';Utiliser = avec un joker
Le signe = ne comprend pas les jokers : il cherche littéralement le caractère %.
SELECT * FROM clients WHERE nom = 'B%';SELECT * FROM clients WHERE nom LIKE 'B%';Chercher sans tenir compte des accents
LIKE ne remplace pas « é » par « e ». '%Lea%' ne trouve pas « Léa ».
SELECT * FROM clients WHERE prenom LIKE 'Lea';SELECT * FROM clients WHERE prenom LIKE 'Léa';Exercices
Essayez d'écrire la requête vous-même avant d'ouvrir la solution.
Défi 1. Affichez les clients dont l'adresse e-mail contient « martin ».
Voir une solution
SELECT prenom, nom, email FROM clients WHERE email LIKE '%martin%';| prenom | nom | |
|---|---|---|
| Samir | Martin | samir.martin2@mail.com |
| Lucas | Martin | lucas.martin41@mail.com |
| Théo | Martin | theo.martin62@mail.com |
| Hugo | Martin | hugo.martin75@mail.com |
| Lina | Martin | lina.martin82@mail.com |
| Omar | Martin | omar.martin100@mail.com |
| Théo | Martin | theo.martin107@mail.com |
7 lignes au total
Essayer dans le bac à sableDéfi 2. Affichez les produits dont le nom commence par « C ».
Voir une solution
SELECT nom, prix FROM produits WHERE nom LIKE 'C%';| nom | prix |
|---|---|
| Clavier mécanique | 15 |
| Casque gaming | 98 |
| Coussin | 10,86 |
| Cafetière | 47,62 |
| Corde à sauter | 43,19 |
| Café en grains | 21,79 |
| Chocolat noir | 22,31 |
7 lignes au total
Essayer dans le bac à sableLes exercices interactifs sont corrigés automatiquement, avec un prof qui explique vos erreurs. Une leçon résumée reste affichée à côté de l'éditeur.
Questions fréquentes
LIKE est-il sensible aux majuscules ?
En SQLite, non pour les lettres sans accent. En PostgreSQL, oui (utilisez ILIKE pour l'ignorer). En MySQL, cela dépend de la collation de la colonne.
Comment chercher un vrai caractère % ?
Avec la clause ESCAPE : LIKE '%10\%%' ESCAPE '\' cherche les textes contenant « 10% ».
LIKE '%mot%' est-il lent ?
Sur de grosses tables, oui : un motif qui commence par % empêche d'utiliser un index. Pour de la recherche de texte avancée, les bases proposent des index plein texte.