Rechercher un motif dans un texte
Objectif : Retrouver des adhérents ou des œuvres à partir d’une partie de leur nom ou de leur titre, en construisant un motif avec LIKE.
Vous connaissez parfois un morceau du nom d’un adhérent ou du titre d’une œuvre, sans en connaître l’orthographe complète. Une égalité exacte ne répond pas à cette demande : il vous faut rechercher un texte à partir d’un motif. Avec LIKE, vous pouvez repérer les lignes dont une colonne textuelle correspond à ce motif.
Construire un motif avec LIKE
Vous avez déjà utilisé WHERE pour filtrer des lignes avec une condition. LIKE s’emploie dans cette même condition, à la place d’une comparaison exacte, et prend un motif entre apostrophes. Le joker % représente zéro, un ou plusieurs caractères ; placez-le avant, après ou autour du fragment que vous recherchez.
-- Les noms qui commencent par « mar »
SELECT nom, prenom
FROM adherents
WHERE nom LIKE 'Mar%';
-- Les titres qui contiennent « mer »
SELECT titre, type_oeuvre
FROM oeuvres
WHERE titre LIKE '%mer%';La première requête renvoie les adhérents dont le nom commence par « Mar », par exemple Martin. La seconde renvoie les œuvres dont le titre contient « mer » à n’importe quelle position, par exemple une œuvre intitulée « La mer calme ».La position de % détermine où le fragment doit se trouver : 'Mar%' cherche un début de texte, tandis que '%mer%' cherche le fragment partout dans la valeur. Vous pouvez aussi utiliser le joker _, qui représente exactement un caractère ; il est utile lorsqu’une seule position est inconnue.
-- « _ » remplace ici une lettre, sans changer les autres positions
SELECT nom, prenom
FROM adherents
WHERE prenom LIKE 'In_s';La requête trouve un prénom de quatre caractères commençant par « In » et finissant par « s », comme « Inès » si la comparaison de la base traite le caractère accentué comme équivalent à « e ». Le comportement exact des accents dépend de la collation configurée pour la base.Ajouter des recherches au projet
Pour le projet de médiathèque, ajoutez les requêtes suivantes à la fin de requetes.sql, après les requêtes déjà conservées. La première recherche un nom commençant par un fragment ; la deuxième cherche un fragment dans un titre ; la troisième utilise un caractère inconnu dans un prénom.
-- Rechercher les adhérents dont le nom commence par « Mar »
SELECT nom, prenom, courriel
FROM adherents
WHERE nom LIKE 'Mar%';
-- Rechercher les œuvres dont le titre contient « lune »
SELECT titre, type_oeuvre, annee_parution
FROM oeuvres
WHERE titre LIKE '%lune%';
-- Rechercher les prénoms de quatre caractères commençant par « In »
SELECT nom, prenom
FROM adherents
WHERE prenom LIKE 'In__';Les résultats dépendent des données présentes : une recherche sans correspondance renvoie simplement zéro ligne. MariaDB applique les règles de comparaison de la collation de la colonne, ce qui peut influer sur la sensibilité aux majuscules et aux accents ; vérifiez ces règles avant d’interpréter une recherche sans résultat.
À retenir
LIKErecherche les valeurs qui correspondent à un motif dans une colonne textuelle.%représente zéro, un ou plusieurs caractères ; sa position précise celle du fragment recherché._représente exactement un caractère.- Ajoutez des requêtes commentées dans
requetes.sqlet interprétez les résultats selon les données et la collation.