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