373 votes

Equals(=) vs LIKE

Lorsque vous utilisez SQL, y a-t-il des avantages de l’utilisation de dans un article au lieu de `` ?

Sans n’importe quel opérateur spécial, et sont les mêmes, droite ?

368voto

mehaase Points 6824

COMME l'égalité et la sont deux totalement différents opérateurs.

EQUALS compare deux ensembles de données octet par octet. Cela signifie que la validation des équivalents dans les différents encodages peuvent ne pas être égaux, même s'ils ont le même aspect à l'œil.

COMME compare les chaînes de caractères, et il prend en compte le codage de chaque chaîne afin de ne pas se laisser berner par les différents encodages de la même contenu.

Il n'y a pas d'avantage en termes de vitesse, parce que les opérateurs ont des fins différentes!! C'est comme demander qui est plus rapide: une mise à jour ou une suppression? C'est un non-sens de la question.

L'utilisation de l'opérateur qui est correct pour votre cas d'utilisation, qui, pour la comparaison de chaînes va être l'opérateur LIKE dans 99% des cas.

Références:

  1. MySQL manuel de la section 11.4.1.
  2. http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt (section 8.5)

188voto

achinda99 Points 2799

Le signe égal (=) l'opérateur est un "opérateur de comparaison compare deux valeurs pour l'égalité." En d'autres termes, dans une instruction SQL, il ne reviendra pas vrai, à moins que les deux côtés de l'équation sont égaux. Par exemple:

SELECT * FROM Store WHERE Quantity = 200;

L'opérateur LIKE "met en œuvre une correspondance de modèle de comparaison" qui essaie de faire correspondre une "chaîne de valeur par rapport à un modèle de chaîne de caractères contenant des caractères génériques." Par exemple:

SELECT * FROM Employees WHERE Name LIKE 'Chris%';

COMME est généralement utilisé uniquement avec des cordes et des égaux (je crois) est plus rapide. L'opérateur = traite wild-card caractères que les caractères littéraux. La différence dans les résultats obtenus sont comme suit:

SELECT * FROM Employees WHERE Name = 'Chris';

Et

SELECT * FROM Employees WHERE Name LIKE 'Chris';

Renvoie le même résultat, mais en utilisant COMME prennent généralement plus de temps car c'est un motif de match. Cependant,

SELECT * FROM Employees WHERE Name = 'Chris%';

Et

SELECT * FROM Employees WHERE Name LIKE 'Chris%';

Serait de retour à des résultats différents, où à l'aide de "=" seuls les résultats avec "Chris%" retournée, et l'opérateur LIKE sera de retour tout ce qui commence par "Chris".

Espérons que cela aide. Quelques bonnes infos peuvent être trouvées ici.

23voto

WalterJ89 Points 598

comme et = sont différents. Comme c'est ce que vous utiliseriez dans une requête de recherche. il permet également des caractères génériques comme _ et%.

= devrait être utilisé si vous voulez des correspondances exactes. et ce sera plus rapide.

Ce site explique comme

16voto

ISW Points 4427

Une différence - à part la possibilité d'utiliser des caractères génériques avec LIKE - est dans les espaces de fin: L'opérateur = ignore l'espace de fin, mais LIKE ne le fait pas.

11voto

ʞɔıu Points 15907

Cela dépend du système de base de données.

Généralement sans caractères spéciaux, oui, = et LIKE sont les mêmes.

Cependant, certains systèmes de base de données peuvent traiter différemment les paramètres de classement avec les différents opérateurs.

Par exemple, dans MySQL, les comparaisons avec = sur les chaînes sont toujours insensibles à la casse par défaut, donc LIKE sans caractères spéciaux est le même. Sur d'autres LIKE de SGBDR est insensible à la casse alors que = ne l'est pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X