2009-10-01 15 views
32

¿Hay alguna diferencia entre:¿Cuál es la diferencia entre "LIKE" y "=" en SQL?

SELECT * FROM users WHERE username="davyjones" 

y

SELECT * FROM users WHERE username LIKE "davyjones" 

(creo que he claudiqué hasta la sintaxis ... Perdón por eso,
soy sobre todo una aplicación de escritorio chico desarrollo)

+0

posible duplicado de [Iguales (=) frente a LIKE] (http://stackoverflow.com/questions/543580/equals-vs-like) –

Respuesta

24

Según el estándar SQL, la diferencia es el tratamiento de los espacios en blanco al final en las columnas CHAR. Ejemplo:

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 

Por supuesto, asumiendo que ejecutar esto en un DBMS compatible con el estándar. Por cierto, esta es una de las principales diferencias entre CHARs y VARCHARs.

+0

¿por qué el segundo ejemplo daría 0 filas? Estos dos estados me parecen equivalentes dados sus datos de prueba –

+1

porque 'prueba' se almacena como 'prueba' + 4 espacios. El estándar SQL dice que LIKE no debería coincidir con eso, mientras que = debería. Para las columnas VARCHAR no hay diferencia. –

+8

Otra razón más para no utilizar nunca el tipo de datos de caracteres, a menos que siempre tenga ese número exacto de caracteres. – HLGEM

35

LIKE permite a juego/uso parcial de comodines, mientras = cheques para coincidencias exactas.

Por ejemplo

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

Will devolver filas, donde el valor del campo es cualquiera de los siguientes:

Zoom, Boom, Loom, Groom 
+1

No devolverá esas filas si la columna es CHAR (5) en lugar de VARCHAR (5) –

+0

@Milan: Lo encontrará en MySQL –

+0

@codeburger: MySQL tiene años antes de ser casi compatible con el estándar SQL;) –

1

LIKE admite comodines. Por lo general, usa el carácter% o _ para el comodín.

Usando el operador LIKE sin comodines es el mismo que utilizar el operador =.

2

que le dará el mismo resultado. Sin embargo, como permite comodines, por ejemplo ...

SELECT * FROM users WHERE username LIKE 'davy%' 

El único problema era la sintaxis de comillas dobles en lugar de comillas simples

4

LIKE permite comodines como % (cualquier número de caracteres aquí) y _ (un carácter aquí).

SELECT * FROM users WHERE username LIKE 'joe%' 

Selecciona todos los nombres de usuario a partir de joe.

11

En ese caso, no hay ninguna diferencia que vendría en los resultados. Sin embargo, utiliza un método diferente para la comparación, y el "LIKE" sería mucho más lento.

Salida esto para ejemplos de como: http://www.techonthenet.com/sql/like.php

En este caso, usted todavía desea utilizar los iguales.

actualización: Tenga en cuenta que hay una diferencia crucial cuando se trata de columnas de tipo CHAR en el que los resultados serán ser diferentes. Ver this answer para más detalles. Cuando se usa VARCHAR (presumiblemente la norma), los anteriores son equivalentes e iguales es preferible.

+1

Potencialmente en un procedimiento almacenado; sin embargo, en las pruebas en SQL Server mediante SQL dinámico, me he dado cuenta de que no optimiza esto También realicé una prueba en Oracle, y no parece optimizar Dynamic SQL. – Erich

+1

Me parece sorprendente cómo las respuestas incorrectas a menudo son aceptadas en SO. :( –

+0

¿De qué manera diría que mi respuesta es incorrecta? En esta situación, LIKE y '=' tienen una funcionalidad idéntica. Realmente quiere decir '=', y por lo tanto debería. También señalé un poco de documentación sobre cómo debería utilizarse LIKE ... Estoy seguro de que he respondido a la pregunta tanto como a los demás – Erich

0

Igual '=' es sólo por la igualdad. Por otro lado, LIKE admite la coincidencia de comodines de SQL.

Por lo tanto, con LIKE puede hacer name like '%jones' para obtener todos los nombres que terminen en jones. Con LIKE, el carácter de porcentaje '%' es nada, longitud cero o más, y el carácter de subrayado, '_', es cualquier carácter.

1

La condición LIKE permite el uso de comodines:

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

See more examples.

y es igual a = se utiliza para la adaptación de la igualdad.

3

LIKE busca un patrón.

/* 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%' 
0

Por lo que yo sé, no hay diferencia, pero un costo de tiempo para los dos seleccionados que escribió. Por lo general, uno usa LIKE junto con %, que significa 'cualquier cadena'. Creo que también hay un personaje que se puede usar con LIKE para 'cualquier personaje', sin estar seguro de qué es eso sin googlear.

Pero como sus dos selectores van, la única diferencia que veo es un tiempo de ejecución diferente, ya que LIKE se usa en un regexp-tipo-de-moda.

0

Like que se pone a trabajar con los operadores de comodín, puede usarlo en su caso para like 'davyjon%' para obtener todos los resultados empezando por el davyjon, y para obtener el exacto que puede colocar 'davyjones' y también se puede usar = en este caso

1

Me gusta el operador de concordancia de patrones y = es el operador que coincide exactamente. es decir, donde nombre como W% que significa empezar con W y después de que uno o más caracteres y = es decir, donde nombre ='James' esto es coincidencia exacta de

4
create table A (id int,name varchar(30)) 

insert into A values(4,'subhash') 

Uso del espacios en blanco finales para buscar el campo nombre:

select * from A where name='Subhash ' 
--Yields 1 row 
select * from A where name like 'Subhash ' 
--Yields 0 row 
Cuestiones relacionadas