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)
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.
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
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.
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
.
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
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%'
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
la condition LIKE
vous permet d'utiliser des caractères génériques:
SELECT * FROM suppliers
WHERE supplier_name like 'Hew%';
et égale =
est utilisé pour l'égalité.
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
é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.
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.
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