Un nom qui commence par H, une adresse qui se termine par @ecole.be, une commune écrite avec ou sans majuscule : LIKE cherche un motif plutôt qu'une valeur exacte.
Tu cherches un élève dont le nom commence par D, mais tu as oublié la suite. Tu veux vérifier que toutes les adresses email se terminent par @ecole.be. Dans les deux cas, tu ne connais pas la valeur exacte, seulement une partie. Le signe = ne peut pas t'aider.
💡 Télécharge
mon-ecole-eleves.dbdans la sidebar, ouvre-la dans DB Browser for SQLite, puis va dans l'onglet Exécuter le SQL. Tape chaque requête dans la zone du haut et exécute-la avec ▶ ou Ctrl+Entrée.
À la fin de cet article, tu seras capable de :
LIKE ;% et _ ;NOT LIKE ;LIKE tient compte des majuscules et des accents ;LIKE pour retrouver une valeur mal encodée.La base contient une table eleve, avec une ligne par élève. Pour la lire, on écrit une requête : SELECT (sélectionne) donne les colonnes, FROM (depuis) donne la table, et WHERE (où) ne garde que les lignes qui remplissent une condition.
Première idée pour trouver les noms qui commencent par D :
SELECT prenom, nom
FROM eleve
WHERE nom = 'D%';
prenom | nom
-------+----
Aucune ligne. Le signe = compare exactement : il cherche un élève dont le nom est littéralement D%, et il n'y en a pas.
Remplace = par LIKE :
SELECT prenom, nom
FROM eleve
WHERE nom LIKE 'D%';
prenom | nom
-------+--------
Léa | Delvaux
LIKE veut dire comme, au sens de qui ressemble à. La condition se lit : « où le nom ressemble à D suivi de n'importe quoi ». Dans 'D%', le symbole % remplace n'importe quelle suite de caractères.
📖 Nouvelle notion : le motif
Un motif est un modèle de texte qui décrit une famille de valeurs, par exemple « commence par D ».
LIKE(comme) garde les lignes dont la valeur correspond au motif. Un motif s'écrit entre apostrophes, comme n'importe quel texte.En anglais : 🇬🇧 pattern.
Le % n'est pas le seul symbole spécial. LIKE en connaît deux.
| Joker | Remplace | Exemple | Correspond à |
|---|---|---|---|
% |
zéro, un ou plusieurs caractères | 'D%' |
D, Delvaux, Dubois |
_ |
exactement un caractère | 'G_rard' |
Gérard, Girard |
📖 Nouvelle notion : le joker
Un joker est un caractère qui, dans un motif, remplace d'autres caractères. Avec
LIKE,%remplace n'importe quelle suite de caractères, même vide, et_remplace exactement un caractère. Comme au jeu de cartes, le joker peut prendre la place de n'importe quelle carte.En anglais : 🇬🇧 wildcard.
La position du % change tout. Voici les noms qui se terminent par t :
SELECT prenom, nom
FROM eleve
WHERE nom LIKE '%t';
prenom | nom
-------+----------
Hugo | Englebert
Manon | Hubert
Sarah | Lambert
Avec un % de chaque côté, on cherche les noms qui contiennent er, n'importe où :
SELECT prenom, nom
FROM eleve
WHERE nom LIKE '%er%';
prenom | nom
-------+----------
Noah | Charlier
Hugo | Englebert
Manon | Hubert
Arthur | Kevers
Sarah | Lambert
Le _ compte les caractères un par un. Quatre _ à la suite trouvent les prénoms de quatre lettres exactement :
SELECT prenom, nom
FROM eleve
WHERE prenom LIKE '____';
prenom | nom
-------+----------
Emma | Bastin
Noah | Charlier
Hugo | Englebert
Les deux jokers peuvent se combiner. '_a%' veut dire : un caractère quelconque, puis un a, puis n'importe quoi. C'est-à-dire les prénoms dont la deuxième lettre est un a.
SELECT prenom, nom
FROM eleve
WHERE prenom LIKE '_a%';
prenom | nom
--------+--------
Nathan | Gérard
Manon | Hubert
Camille | Jacques
Sarah | Lambert
⚠️ L'étoile
*n'est pas un joker en SQL, même si tu l'as peut-être utilisée pour chercher des fichiers dans Windows.WHERE nom LIKE 'D*'cherche un nom qui est littéralementD*, et ne renvoie rien.
⚠️ Un
LIKEsans joker se comporte presque comme=.WHERE prenom LIKE 'Emm'ne trouve pas Emma : le motif ne dit pas qu'il peut y avoir quelque chose après.
Les motifs sont très utiles pour contrôler des adresses email. Vérifie qu'elles appartiennent toutes au domaine de l'école :
SELECT prenom, nom, email
FROM eleve
WHERE email LIKE '%@ecole.be';
prenom | nom | email
-------+-----------+------------------------
Lucas | Adam | lucas.adam@ecole.be
Emma | Bastin | emma.bastin@ecole.be
Léa | Delvaux | lea.delvaux@ecole.be
Hugo | Englebert | hugo.englebert@ecole.be
Nathan | Gérard | nathan.gerard@ecole.be
Manon | Hubert | manon.hubert@ecole.be
Louis | Istas | louis.istas@ecole.be
Arthur | Kevers | arthur.kevers@ecole.be
Sarah | Lambert | sarah.lambert@ecole.be
Neuf lignes, pas douze. Noah Charlier, Chloé Fontaine et Camille Jacques n'ont pas d'adresse email : leur case est vide, marquée NULL dans la base. Une case vide ne ressemble à aucun motif, donc la condition n'est jamais vraie pour eux.
Les adresses sont construites sur le modèle prenom.nom@ecole.be. Un motif peut donc retrouver les élèves dont le prénom commence par l :
SELECT prenom, nom, email
FROM eleve
WHERE email LIKE 'l%';
prenom | nom | email
-------+---------+---------------------
Lucas | Adam | lucas.adam@ecole.be
Léa | Delvaux | lea.delvaux@ecole.be
Louis | Istas | louis.istas@ecole.be
NOT LIKE (pas comme) garde les lignes qui ne correspondent pas au motif. Voici les noms qui ne contiennent pas la lettre e :
SELECT prenom, nom
FROM eleve
WHERE nom NOT LIKE '%e%';
prenom | nom
-------+-------
Lucas | Adam
Emma | Bastin
Nathan | Gérard
Louis | Istas
Gérard est dans la liste, alors qu'on y lit un é. C'est normal : pour LIKE, é et e sont deux caractères différents. La section suivante revient sur ce point.
Dans cette base, une faute s'est glissée : la commune de Sarah Lambert est écrite jodoigne, en minuscules, alors que les quatre autres élèves de la commune ont Jodoigne. Avec WHERE commune = 'Jodoigne', on n'obtient que quatre élèves.
Essaie avec LIKE, sans aucun joker :
SELECT prenom, nom, commune
FROM eleve
WHERE commune LIKE 'jodoigne';
prenom | nom | commune
-------+----------+---------
Lucas | Adam | Jodoigne
Léa | Delvaux | Jodoigne
Chloé | Fontaine | Jodoigne
Louis | Istas | Jodoigne
Sarah | Lambert | jodoigne
Les cinq élèves sont là. Dans SQLite, LIKE ne fait pas la différence entre majuscules et minuscules pour les lettres sans accent. LIKE 'JODOIGNE' donnerait exactement le même résultat.
Avec les lettres accentuées, c'est une autre histoire :
SELECT prenom, nom
FROM eleve
WHERE nom LIKE 'GÉRARD';
prenom | nom
-------+----
Aucune ligne. SQLite sait que G et g sont la même lettre, mais pas que É et é le sont. Écrit 'gérard', en minuscules avec le même accent, le motif trouve Nathan Gérard. Écrit 'Gerard', sans accent, il ne trouve rien non plus.
| Condition | Trouve Gérard ? | Pourquoi |
|---|---|---|
nom LIKE 'gérard' |
oui | seules les lettres sans accent changent de casse |
nom LIKE 'GÉRARD' |
non | É et é sont vus comme différents |
nom LIKE 'Gerard' |
non | e et é sont deux caractères différents |
nom LIKE 'G_rard' |
oui | le _ remplace le é |
🧠 Dans SQLite,
LIKEignore la différence entre majuscules et minuscules, mais seulement pour les 26 lettres sans accent. Un accent, lui, compte toujours.
ℹ️ Ce comportement dépend du logiciel. Dans PostgreSQL,
LIKEfait la différence entre majuscules et minuscules. Dans MySQL, cela dépend de la configuration de la table. Vérifie toujours avant de compter dessus.
Pour chaque exercice, écris la requête, exécute-la, puis vérifie que le résultat répond vraiment à la question.
Écris une requête qui affiche le prénom et le nom :
ou ;Sans exécuter, écris combien de lignes renvoie chaque requête. Exécute ensuite pour vérifier.
-- a)
SELECT prenom FROM eleve WHERE prenom LIKE 'L%';
-- b)
SELECT nom FROM eleve WHERE nom LIKE '_a%';
-- c)
SELECT prenom FROM eleve WHERE prenom LIKE 'léa';
-- d)
SELECT prenom FROM eleve WHERE prenom LIKE 'LÉA';
-- e)
SELECT email FROM eleve WHERE email NOT LIKE '%@ecole.be';
Pour la requête e), explique le résultat.
@ecole.be. Combien sont-ils ? Pourquoi pas douze ?gerard. Le nom de famille de l'élève contient-il un accent ? Et son adresse ?Chacune de ces requêtes provoque une erreur ou ne répond pas à la question. Pour chacune : exécute-la, observe, explique ce qui ne va pas, puis corrige-la.
-- a) Les noms qui commencent par H
SELECT nom FROM eleve WHERE nom LIKE 'H*';
-- b) Les noms qui commencent par H
SELECT nom FROM eleve WHERE nom = 'H%';
-- c) Les noms qui commencent par H
SELECT nom FROM eleve WHERE nom LIKE H%;
-- d) Nathan Gérard
SELECT prenom, nom FROM eleve WHERE nom LIKE 'Gerard';
-- e) Les prénoms de quatre lettres
SELECT prenom FROM eleve WHERE prenom LIKE '___';
WHERE commune = 'Jodoigne', puis par WHERE commune LIKE 'jodoigne'.LIKE (comme) compare une valeur à un motif, écrit entre apostrophes.% remplace zéro, un ou plusieurs caractères ; _ remplace exactement un caractère.'D%' commence par D, '%t' se termine par t, '%er%' contient er.NOT LIKE garde les lignes qui ne correspondent pas au motif.LIKE ignore la casse pour les lettres sans accent, mais pas pour les lettres accentuées.NULL) ne correspond à aucun motif, ni avec LIKE ni avec NOT LIKE.Les trois élèves sans adresse email échappent à LIKE comme à NOT LIKE. Pour comprendre ce que contiennent ces cases vides et comment les retrouver, passe à Les valeurs absentes : NULL.