Rechercher par motif avec LIKE

WHERE genre = 'Science-fiction' ne trouve que cette valeur exacte. Mais comment trouver tous les films dont le titre contient 'guerre', ou tous les emails d'un même domaine ? L'égalité stricte ne suffit pas — il faut filtrer sur un motif.

Quand = ne suffit plus

Tu sais déjà filtrer avec WHERE genre = 'Drame'. L'égalité fonctionne parfaitement quand on connaît la valeur exacte. Mais que faire quand on ne la connaît qu'en partie ?

Imaginons qu'on veuille tous les films dont le genre commence par la lettre C. Notre table en contient deux : Crime et Comédie. On ne peut pas écrire WHERE genre = 'C' — ce n'est le nom d'aucun genre. Et si on tente WHERE genre = 'C%', voici ce que donne cette requête :

Table films

titreanneegenre
Inception2010SF
Le Parrain1972Drame
Pulp Fiction1994Crime
Amélie Poulain2001Comédie
SELECT titre, genre FROM films WHERE genre = 'C%'

↑ zéro ligne : = cherche une valeur exactement égale à « C% »

SQL interprète 'C%' comme un nom de genre à la lettre près. Ce nom n'existe pas dans notre table, donc aucune ligne ne ressort. L'égalité ne connaît pas les jokers. Pour filtrer par motif plutôt que par valeur exacte, SQL propose un autre opérateur : LIKE.

LIKE et le joker %

Avec LIKE, on décrit un motif que la valeur doit respecter. À l'intérieur du motif, le symbole % joue le rôle de joker (*wildcard* en anglais) : il représente n'importe quelle suite de caractères, même une suite vide.

Le motif se place entre apostrophes, comme tout texte en SQL. Et le % peut se mettre au début, à la fin, ou des deux côtés des lettres fixes qu'on cherche. Mis à la fin : 'C%' signifie « commence par C, puis n'importe quoi ». Mis au début : '%ain' signifie « n'importe quoi, puis se termine par ain ». Mis des deux côtés : '%ul%' signifie « ul peut apparaître n'importe où dans la valeur ».

On va voir chacune de ces trois formes.

Commence par : 'X%'

Le % placé à la fin du motif signifie : commence par les lettres fixes, puis n'importe quoi. C'est la forme la plus courante de LIKE.

Récupérons tous les films dont le genre commence par C :

La requête
SELECT titre, genre FROM films WHERE genre LIKE 'C%'
Résultat · 2 lignes
titregenre
Pulp FictionCrime
Amélie PoulainComédie

Deux films ressortent : Crime et Comédie débutent tous les deux par C. Le % a accepté tout ce qui suit — « rime » pour l'un, « omédie » pour l'autre. On n'avait besoin de connaître aucun des genres en entier.

Finit par : '%X'

Le % placé au début du motif signifie : n'importe quoi devant, puis les lettres fixes à la fin.

Par exemple, les films dont le titre se termine par ain :

La requête
SELECT titre FROM films WHERE titre LIKE '%ain'
Résultat · 2 lignes
titre
Le Parrain
Amélie Poulain

Deux films se terminent par ain : Parrain et Poulain. Piège à retenir : si on oublie le % au début et qu'on écrit WHERE titre LIKE 'ain', SQL ne cherche plus un motif mais une valeur exacte — un titre qui s'appellerait littéralement « ain ». Résultat : zéro ligne.

Contient : '%X%'

Quand le % entoure le motif des deux côtés, SQL cherche si la séquence apparaît n'importe où dans la valeur : au début, au milieu, ou à la fin.

Par exemple, les films dont le titre contient la séquence ul :

La requête
SELECT titre FROM films WHERE titre LIKE '%ul%'
Résultat · 2 lignes
titre
Pulp Fiction
Amélie Poulain

Pulp Fiction est immédiat : Pulp contient ul. Amélie Poulain l'est moins : c'est Poulain qui contient les deux lettres, au milieu du mot. Un rappel utile — LIKE '%X%' cherche vraiment partout dans la chaîne, même là où on ne l'aurait pas cherché d'instinct.

Récapitulatif

En résumé, pour filtrer par motif avec LIKE :

📌 Rechercher par motif — l'essentiel
LIKE 'X%'→ commence par X
LIKE '%X'→ se termine par X
LIKE '%X%'→ contient X, n'importe où
% = joker→ n'importe quelle suite de caractères, même vide
Exemple complet
SELECT titre, genre FROM films WHERE genre LIKE 'C%'

💡 Bon à savoir : par défaut, LIKE est sensible à la casse en PostgreSQL — 'crime' et 'Crime' ne donnent pas les mêmes résultats. Pour ignorer la casse, PostgreSQL propose ILIKE à la place. C'est un outil que tu rencontreras plus loin dans le cursus.

Passe à la pratique

Cette leçon t'a montré la théorie. Pour maîtriser SQL, rien ne vaut la pratique : accède aux exercices et au bac à sable PostgreSQL réel.

← Tous les cours SQL