En SQL, le LIKE
L'opérateur vous permet d'effectuer une correspondance de modèle. Il détermine si une chaîne de caractères spécifique correspond à un modèle spécifié.
Un modèle peut inclure des caractères normaux et des caractères génériques.
Tableau des sources
Le tableau suivant est utilisé pour les exemples sur cette page.
SELECT * FROM Owners;
Résultat :
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Exemple
Voici un exemple pour montrer comment le LIKE
l'opérateur fonctionne.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com';
Résultat :
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
Dans cet exemple, j'ai utilisé le LIKE
opérateur en conjonction avec le %
opérateur générique pour renvoyer les propriétaires dont les adresses e-mail se terminent par .com
.
LIKE
peut également être utilisé avec d'autres opérateurs de chaîne, tels que _
, []
, et [^]
.
Le %
Opérateur générique
Le %
L'opérateur générique correspond à n'importe quelle chaîne de zéro caractère ou plus. Il peut être utilisé comme préfixe ou suffixe, et il peut également être utilisé au milieu d'une chaîne.
Il a tendance à être plus couramment utilisé comme suffixe et son utilisation est limitée au milieu de modèles, bien qu'il existe des cas d'utilisation valides pour l'utiliser au milieu d'un modèle, comme les suivants :
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';
Résultat :
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | +-------------+------------+------------------+
Dans ce cas, nous ne connaissions pas l'adresse e-mail de Bart, mais nous savions qu'elle commençait par [email protected]
et se terminait par .com
. Par conséquent, nous avons pu utiliser LIKE
en conjonction avec le %
opérateur générique pour remplir le reste.
Gardez à l'esprit que cette technique peut renvoyer de nombreuses lignes non pertinentes, en fonction des données et de la manière dont vous construisez votre instruction SQL.
Le _
Opérateur générique
Le trait de soulignement (_
) l'opérateur générique correspond à n'importe quel caractère unique.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt';
Résultat :
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+------------------+
Le []
Opérateur générique
Les parenthèses ([]
) l'opérateur générique correspond à n'importe quel caractère unique dans la plage ou l'ensemble spécifié qui est spécifié entre crochets.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%';
Résultat :
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Boris | Trump | NULL | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Ici, j'ai combiné le caractère générique entre parenthèses avec le signe de pourcentage pour renvoyer tous les propriétaires dont le prénom commence par b
ou h
.
Notez que l'opérateur parenthèses n'est pas largement adopté dans les SGBD. Il est pris en charge dans SQL Server, mais pas dans MySQL, Oracle, DB2 et SQLite. Consultez la documentation de votre SGBD pour voir s'il prend en charge cet opérateur.
Le [^]
Opérateur générique
Le caractère caret (^
) peut être utilisé pour annuler les résultats lors de l'utilisation de l'opérateur parenthèses.
Nous modifions donc l'exemple précédent pour ne renvoyer que les propriétaires dont le prénom ne correspond pas commencer par b
ou h
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';
Résultat :
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
Valeurs NULLES
Le pourcentage (%
) le caractère générique correspond à n'importe quoi - presque. Une chose qui ne correspond pas est NULL
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%';
Résultat :
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Dans notre tableau, il y a deux lignes avec NULL
dans le Email
colonne, mais ceux-ci ne sont pas renvoyés ici.
Performances
Requêtes contenant le LIKE
L'opérateur peut s'exécuter beaucoup plus lentement que les autres requêtes, et vous devriez probablement éviter d'utiliser le LIKE
opérateur sauf si vous en avez vraiment besoin. Utilisation du %
l'opérateur en tant que préfixe peut être particulièrement lent.
Cela ne veut pas dire que vous ne devriez pas l'utiliser du tout. Le LIKE
L'opérateur fait partie intégrante de SQL, et vous rencontrerez de nombreux scénarios où ce sera la seule option (ou du moins, la meilleure option).