Database
 sql >> Base de données >  >> RDS >> Database

Opérateur SQL LIKE pour les débutants

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).