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 brouillé la syntaxe... pardonnez-moi pour cela,

Je suis surtout un développeur d'applications de bureau)

34
demandé sur Francisco Alvarado 2009-10-01 20:25:41

13 réponses

selon la norme SQL, la différence est le traitement des espaces de traînée dans les colonnes de 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 standard. BTW, c'est l'une des principales différences entre les CHARs et les VARCHARs.

26
répondu Milan Babuškov 2009-10-01 16:41:16

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

par exemple

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

retournera les lignes où la valeur du champ est l'une des suivantes:

Zoom, Boom, Loom, Groom
37
répondu code_burgar 2018-03-08 09:44:01

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

vérifiez ceci pour des exemples de comme: http://www.techonthenet.com/sql/like.php

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

Update : notez qu'il y a une différence cruciale quand il vient à type de caractères colonnes dans lesquelles les résultats sera sera différent. Voir cette réponse pour plus de détails. Lorsque vous utilisez VARCHAR (probablement la norme), les valeurs ci-dessus sont équivalentes et égales doivent être préférées.

11
répondu Erich 2017-05-23 12:17:54

LIKE permet les caractères génériques comme % (n'importe quel nombre de caractères ici) et _ (un caractère ici).

SELECT * FROM users WHERE username LIKE 'joe%'

sélectionne tous les noms d'utilisateur à partir de joe .

4
répondu T.J. Crowder 2009-10-01 16:27:21
create table A (id int,name varchar(30))

insert into A values(4,'subhash')

utilisez les espaces blancs pour rechercher le champ Nom:

select * from A where name='Subhash '
--Yields 1 row
select * from A where name like 'Subhash '
--Yields 0 row
4
répondu subhash 2011-06-17 14:58:21

comme recherche d'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
répondu Larsenal 2009-10-01 17:28:01

Qui vous donnera le même résultat. Cependant, comme permet 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 des guillemets simples

2
répondu Richard 2009-10-01 16:27:00

LIKE supporte les caractères génériques. Habituellement, il utilise le caractère % ou _ pour le Joker.

utiliser l'opérateur similaire sans jokers est la même chose qu'utiliser l'opérateur=.

1
répondu auujay 2009-10-01 16:26:57

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 égale = est utilisé pour l'égalité.

1
répondu Daniel May 2009-10-01 16:28:42

comme est l'opérateur d'appariement de motif et = est l'opérateur d'appariement exact. i.e. où nom comme W% il signifie commencer par W et après cela un ou plusieurs caractères et = c'est-à-dire où le nom ='James' correspond exactement

1
répondu P Sharma 2011-06-17 15:48:09

égale '=' est juste pour l'égalité. D'un autre côté, LIKE supporte la correspondance SQL wildcard.

donc, avec LIKE vous pouvez faire name like '%jones' pour obtenir tous les noms se terminant par jones. Avec LIKE , le pourcentage '%' est n'importe quoi, longueur zéro ou plus, et le caractère de soulignement, '_' , est n'importe quel caractère.

0
répondu Jeremy Bourque 2009-10-01 16:27:29

autant que je sache, il n'y a pas de différence mais un coût de temps pour les deux sélections que vous avez écrit. Habituellement, on utilise LIKE avec % , 'string'. Je pense qu'il y a aussi un caractère qui peut être utilisé avec LIKE pour "n'importe quel caractère", pas sûr de ce que c'est sans googler.

mais comme vos deux sélections vont, la seule différence que je vois est une durée d'exécution différente, puisque LIKE est utilisé dans un regexp-sort-of-fashion.

0
répondu laura 2011-06-17 15:48:40

Like vous permet de travailler avec des opérateurs wild card, vous pouvez l'utiliser dans votre cas pour like 'davyjon%' pour obtenir tous les résultats à partir de davyjon , et pour obtenir l'exacte vous pouvez placer 'davyjones' et vous pouvez également utiliser = dans ce cas

0
répondu SQL Like 2013-01-05 12:42:46