web-dev-qa-db-fra.com

Quelle est la différence entre "LIKE" et "=" en SQL?

Y a-t-il une différence entre:

SELECT * FROM users WHERE username="davyjones"

et

SELECT * FROM users WHERE username LIKE "davyjones"

(Je pense que j'ai raté la syntaxe ... excusez-moi,
Je suis surtout un gars de développement d'applications de bureau)

38
aviraldg

Selon le standard SQL, la différence est le traitement des espaces de fin dans les colonnes CHAR. Exemple:

create table t1 ( c10 char(10) );
insert into t1 values ('davyjones');

select * from t1 where c10 = 'davyjones';
-- yields 1 row

select * from t1 where c10 like 'davyjones';
-- yields 0 rows

Bien sûr, en supposant que vous exécutiez ceci sur un SGBD conforme aux normes. BTW, c'est l'une des principales différences entre les CHAR et les VARCHAR.

30
Milan Babuškov

LIKE permet la correspondance partielle/l'utilisation de caractères génériques, alors que = vérifie les correspondances exactes.

Par exemple

SELECT * FROM test WHERE field LIKE '%oom';

Renverra les lignes où la valeur du champ est l’un des suivants:

Zoom, Boom, Loom, Groom
38
code_burgar

Dans ce cas, il n'y a aucune différence dans les résultats. Cependant, il utilise une méthode différente pour la comparaison, et le "LIKE" serait beaucoup plus lent.

Découvrez ceci pour des exemples de LIKE: http://www.techonthenet.com/sql/like.php

Dans ce cas, vous voulez toujours utiliser les égaux.

Update: notez qu'il existe une différence cruciale en ce qui concerne les colonnes de type CHAR dans lesquelles les résultats seront différents. Voir cette réponse pour plus de détails. Lorsque vous utilisez VARCHAR (vraisemblablement la norme), les éléments ci-dessus sont équivalents et égaux sont à privilégier.

12
Erich
create table A (id int,name varchar(30))

insert into A values(4,'subhash')

Utilisez les espaces finaux pour rechercher le champ du nom:

select * from A where name='Subhash '
--Yields 1 row
select * from A where name like 'Subhash '
--Yields 0 row
4
subhash

LIKE autorise les caractères génériques tels que % (un nombre quelconque de caractères ici) et _ (un caractère ici).

SELECT * FROM users WHERE username LIKE 'joe%'

Sélectionne tous les noms d'utilisateur commençant par joe.

4
T.J. Crowder

LIKE cherche un motif.

/* Returns all users whose username starts with "d" */
SELECT * FROM users WHERE username LIKE 'd%'

/* Returns all users whose username contains "dav" */
SELECT * FROM users WHERE username LIKE '%dav%'
3
Larsenal

Cela vous donnera le même résultat. Cependant, LIKE autorise les caractères génériques, par exemple ...

SELECT * FROM users WHERE username LIKE 'davy%'

Le seul problème de syntaxe était les guillemets doubles au lieu de guillemets simples

2
Richard

LIKE prend en charge les caractères génériques. Il utilise généralement le caractère% ou _ pour le caractère générique.

L'utilisation de l'opérateur LIKE sans caractère générique est identique à l'utilisation de l'opérateur =.

1
auujay

La condition LIKE vous permet d'utiliser des caractères génériques:

SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';

Voir plus d'exemples.

et Equals = est utilisé pour la correspondance d’égalité.

1
Daniel May

Comme est l'opérateur de correspondance de modèle et = est l'opérateur de correspondance exacte. c'est-à-dire où name comme W% cela signifie commencer par W et après cela, un ou plusieurs caractères et = c'est-à-dire où name ='James' c'est la correspondance exacte

1
P Sharma

Like vous permet de travailler avec des opérateurs génériques, vous pouvez l’utiliser dans votre cas pour like 'davyjon%' pour obtenir tous les résultats commençant par davyjon, et pour obtenir le résultat exact, vous pouvez placer 'davyjones' et vous pouvez également utiliser = dans ce cas. 

0
SQL Like

Equals '=' est juste pour l'égalité. De plus, LIKE prend en charge la correspondance générique SQL.

Donc, avec LIKE vous pouvez faire name like '%jones' pour obtenir tous les noms se terminant par jones. Avec LIKE, le caractère de pourcentage '%' correspond à n’importe quoi, à une longueur égale ou supérieure à zéro, et le caractère de soulignement, '_', correspond à n’importe quel caractère.

0
Jeremy Bourque

Autant que je sache, il n'y a pas de différence, mais un coût en temps pour les deux sélections que vous avez écrites. Habituellement, on utilise LIKE avec %, ce qui signifie «n'importe quelle chaîne». Je pense qu’il ya aussi un personnage qui peut être utilisé avec LIKE pour "n’importe quel personnage", ne sachant pas ce que c'est sans googler.

Mais à mesure que vos deux sélections disparaissent, la seule différence que je vois est un temps d’exécution différent, puisque LIKE est utilisé dans une sorte de regexp-of-of-fashion.

0
laura