English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Opérateur LIKE SQL

Dans ce tutoriel, vous apprendrez à récupérer des données en fonction de correspondances partielles.

Correspondance de modèle

Jusqu'à présent, vous avez vu des conditions d'identification de chaînes exactes, par exemple WHERE name='Lois Lane'. Mais dans SQL, vous pouvez également utiliser l'opérateur LIKE pour effectuer une correspondance partielle ou un modèle.

L'opérateur LIKE vous permet de spécifier des jokers pour un ou plusieurs caractères pour fournir des mesures de correspondance de modèle. Vous pouvez utiliser les deux jokers suivants :

  • Pourcentage (%) - Correspond à un nombre quelconque de caractères, même zéro.

  • Underscore ( _) - Correspondance complète d'un caractère

Voici quelques exemples qui montrent comment utiliser l'opérateur LIKE avec les caractères génériques.

DéclarationSignificationValeur de retour
WHERE name LIKE 'Da%'

Recherchez les noms commençant par Da

David, Davidson
WHERE name LIKE '%th'Recherchez les noms se terminant parthles noms se terminant parElizabeth, Smith
WHERE name LIKE '%on%'

Recherchez les noms contenant on

Davidson, Toni
WHERE name LIKE 'Sa_'

Recherchez les noms commençant par Sa et se terminant par un caractère au plus

Sa
WHERE name LIKE '_oy'

Recherchez les noms se terminant par oy et contenant un caractère au plus

Joy, Roy
WHERE name LIKE '_an_'Recherchez les noms contenantanles noms, qui commencent et se terminent par un caractèreDana, Hans
WHERE name LIKE '%ar_'Recherchez les noms contenantarles noms, qui commencent par un nombre quelconque de caractères et se terminent par un caractère au plusRichard, Karl
WHERE name LIKE '_ar%'Recherchez les noms contenantarles noms, qui commencent par un caractère au plus et se terminent par un nombre quelconque de caractèresKarl, Mariya

En recherchant quelques enregistrements, nous allons appliquer la phrase discutée précédemment à la pratique.

Considérons-nousemployeesIl y a une table dans la base de données qui contient les enregistrements suivants :

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 | NULL |
|      6 | simons bistro | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

Maintenant, supposons que vous souhaitez trouver tous les employés commençant par la lettre S.

SELECT * FROM employees 
WHERE emp_name LIKE 'S%';

Après l'exécution de la requête, vous obtiendrez le résultat suivant :

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      6 | simons bistro | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

Dans MySQL, la comparaison des chaînes non binaires (CHAR, VARCHAR, TEXT) est par défaut insensible à la casse, tandis que la comparaison des chaînes binaires (BINARY, VARBINARY, BLOB) est sensible à la casse.

Cela signifie que si vous utilisez la recherche WHERE name LIKE 'S%', vous obtiendrez toutes les valeurs de colonnes commençant par S ou s (comme vous pouvez le voir, nous avons à la fois 'Sarah' et 'simons'). Cependant, si vous souhaitez que cette recherche soit sensible à la casse, vous pouvez utiliser l'opérateur BINARY de la manière suivante :

-- Syntaxe de base de données MySQL 
SELECT * FROM employees 
WHERE BINARY emp_name LIKE 'S%';

Maintenant, cette instruction ne retournera que les employés dont le nom commence par la lettre S en majuscule :

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
+--------+------------------+------------+--------+---------+

Attention :Si vous souhaitez toujours traiter les colonnes de manière sensible à la casse, utilisez une règle de tri sensible à la casse ou binaire pour les déclarer, afin d'éviter tout problème de performance.

Avis :Lorsque vous ne savez pas la forme exacte de la chaîne de recherche, la correspondance partielle est très utile. Vous pouvez également utiliser la correspondance partielle pour rechercher plusieurs lignes d'une colonne de table contenant des chaînes similaires.