SQL ET POSTGRE 5.31 : Data restriction and output with "LIKE"
Jusqu'à présent, les filtres en SQL portaient sur une égalité stricte entre une colonne et une valeur. L'opérateur LIKE permet de rechercher des chaînes qui contiennent un motif partiel. Il s'accompagne de deux caractères jokers : le signe pourcentage (%) qui remplace un nombre indéfini de caractères (zéro, un ou plusieurs), et l'underscore (_) qui remplace exactement un seul caractère.
Filtrer avec % et underscore
Pour rechercher tous les acteurs dont le prénom commence par P, on écrit le motif entre apostrophes simples avec le % à la fin :
SELECT *
FROM acteur
WHERE prenom LIKE 'P%';
La requête renvoie Peter, Patrick, Per et toute valeur commençant par P, quelle que soit la longueur après. À l'inverse, 'P_' avec un seul underscore exigerait que le prénom fasse exactement deux caractères dont P en premier, ce qui ne renvoie probablement rien. 'Pe_' trouverait par exemple Per (trois lettres exactement, commençant par Pe).
Le joker peut aussi être placé en début de motif pour chercher un suffixe, ou de chaque côté pour chercher une sous-chaîne :
WHERE prenom LIKE '%r': tous les prénoms se terminant par rWHERE prenom LIKE '%r%': tous les prénoms contenant la lettre r n'importe oùWHERE prenom LIKE '%r_l%': un r suivi d'un caractère puis d'un l, comme Carla, Marlon, HarlanWHERE prenom LIKE '_a_l_': motif de longueur stricte avec a en 2e et l en 4e position, comme Carla
L'opérateur LIKE est précieux pour la recherche flexible : autocomplétion, filtres utilisateurs, recherche par initiale. Le % gère les longueurs variables tandis que l'underscore impose une longueur fixe, ce qui permet de combiner les deux pour des motifs précis.
Summary
Learn how to use the SQL LIKE operator to search for partial string matches and restrict data output in PostgreSQL. This lesson covers the two wildcard characters: the percent sign (%) which matches zero or more characters, and the underscore (_) which matches exactly one character. Through practical examples using an actors table, you'll master techniques for finding names that start with, end with, or contain specific characters.
Key points
- The LIKE operator is used with wildcards to search for pattern matches in WHERE clauses (e.g., WHERE firstname LIKE 'P%')
- The percent sign (%) matches any number of characters (including zero), useful for prefix searches (LIKE 'A%'), suffix searches (LIKE '%r'), or substring matches (LIKE '%ar%')
- The underscore (_) matches exactly one character in a specific position (e.g., 'P_' finds only 2-character names starting with P)
- Multiple wildcards can be combined in a single pattern (e.g., '%r_' matches any text containing 'r' followed by exactly one more character)
- LIKE is case-sensitive by default in PostgreSQL and complements the equality operator (=) when exact matching is not required
FAQ
What is the difference between % and _ in LIKE patterns?
The percent sign (%) matches zero or more characters of any length, while the underscore (_) matches exactly one character. For example, LIKE 'P%' finds all names starting with P regardless of length, but LIKE 'P_' only finds 2-character names starting with P.
Can I use multiple wildcards in a single LIKE pattern?
Yes, you can combine both % and _ in one pattern. For example, LIKE '%r%' finds all values containing the letter 'r' anywhere, and LIKE '%r_' finds values with 'r' followed by exactly one character. You can add as many wildcard characters as needed for your search.
How does LIKE differ from the equality operator (=)?
The equality operator (=) requires an exact match of the entire value, while LIKE allows pattern matching with wildcards for partial matches. Use = when you know the exact value, and LIKE when you need flexible string searching.