LIKE

El operador LIKE busca patrones en cadenas de texto. A diferencia del operador =, que compara valores exactos, LIKE permite usar comodines para encontrar coincidencias parciales. Es la herramienta básica para búsquedas de texto en MySQL.

Sintaxis

SELECT columnas
FROM tabla
WHERE columna LIKE patron;

El patrón puede contener dos tipos de comodines:

  • %: representa cero o más caracteres cualesquiera.
  • _: representa exactamente un carácter cualquiera.

El comodín %

El porcentaje es el comodín más utilizado. Coincide con cualquier secuencia de caracteres, incluyendo una cadena vacía.

Empieza por

Productos cuyo nombre empieza por "Ca":

SELECT nombre, precio
FROM productos
WHERE nombre LIKE 'Ca%';
nombreprecio
Cable USB-C a Lightning19.99
Camiseta algodón básica24.99
Camiseta técnica running34.99
Cargador USB-C 65W35.99

El patrón 'Ca%' coincide con cualquier cadena que empiece por "Ca" seguida de cualquier cosa. La comparación no distingue mayúsculas y minúsculas por defecto.

Termina por

Empleados cuyo email termina en "@tienda.com":

SELECT nombre, email
FROM empleados
WHERE email LIKE '%@tienda.com';
nombreemail
Ricardoricardo.alonso@tienda.com
Sofíasofia.mendez@tienda.com
Albertoalberto.prieto@tienda.com
Natalianatalia.herrera@tienda.com
Danieldaniel.vargas@tienda.com
Patriciapatricia.cano@tienda.com
Raúlraul.pena@tienda.com
Cristinacristina.guerrero@tienda.com
Marcosmarcos.delgado@tienda.com
Inésines.pascual@tienda.com

Todos los empleados tienen email de la tienda. Si hubiera empleados con correos de otro dominio, no aparecerían.

Contiene

Productos cuyo nombre contiene la palabra "USB":

SELECT nombre, precio
FROM productos
WHERE nombre LIKE '%USB%';
nombreprecio
Cargador USB-C 65W35.99
Cable USB-C a Lightning19.99

El patrón '%USB%' tiene un % a cada lado, por lo que coincide con cualquier cadena que contenga "USB" en cualquier posición.

Múltiples comodines

Puedes usar varios % en un mismo patrón:

SELECT nombre, precio
FROM productos
WHERE nombre LIKE '%a%a%';

Esta consulta encuentra productos cuyo nombre contiene al menos dos letras "a" (en cualquier posición). Coincidirían "Samsung Galaxy S24", "Camiseta algodón básica", "Mancuernas ajustables", etc.

El comodín _

El guion bajo representa exactamente un carácter. Es útil cuando conoces la longitud exacta o la posición de los caracteres:

SELECT nombre, telefono
FROM clientes
WHERE telefono LIKE '61%'
  AND telefono LIKE '________8';

Clientes cuyo teléfono empieza por "61" y termina en "8". El segundo patrón usa 8 guiones bajos seguidos de "8", lo que exige exactamente 9 caracteres en total.

Un ejemplo más claro con los códigos postales:

SELECT nombre, ciudad, codigo_postal
FROM clientes
WHERE codigo_postal LIKE '28___';
nombreciudadcodigo_postal
MaríaMadrid28001
PedroMadrid28013

El patrón '28___' coincide con cualquier código postal que empiece por "28" y tenga exactamente 5 caracteres en total. Los tres guiones bajos representan los tres dígitos restantes.

Combinación de % y _

Puedes mezclar ambos comodines:

SELECT nombre
FROM categorias
WHERE nombre LIKE '_o%';
nombre
Cocina
Portátiles
Novelas

El patrón '_o%' busca nombres cuyo segundo carácter sea "o", sin importar el primero (_) ni lo que venga después (%).

LIKE sin comodines

Si usas LIKE sin % ni _, se comporta como una comparación exacta, igual que =:

SELECT nombre, ciudad
FROM clientes
WHERE ciudad LIKE 'Madrid';

Esto devuelve lo mismo que WHERE ciudad = 'Madrid'. No hay razón práctica para usar LIKE sin comodines, pero conviene saber que funciona.

NOT LIKE

NOT LIKE devuelve las filas que no coinciden con el patrón:

SELECT nombre, puesto
FROM empleados
WHERE puesto NOT LIKE '%Director%';
nombrepuesto
NataliaVendedora Senior
DanielVendedor
PatriciaVendedora
RaúlVendedor Junior
CristinaResponsable de Almacén
MarcosOperario de Almacén
InésOperaria de Almacén

Todos los empleados cuyo puesto no contiene "Director", lo que excluye a Ricardo, Sofía y Alberto.

Escape de caracteres especiales

Si necesitas buscar literalmente un % o un _ en los datos (no como comodín), debes "escaparlos" con una barra invertida:

-- Buscar valores que contienen el carácter % literal
SELECT * FROM productos WHERE nombre LIKE '%\%%';
 
-- Buscar valores que contienen el carácter _ literal
SELECT * FROM productos WHERE nombre LIKE '%\_%';

También puedes definir tu propio carácter de escape con la cláusula ESCAPE:

SELECT * FROM productos WHERE nombre LIKE '%!%%' ESCAPE '!';

Aquí ! es el carácter de escape, así que !% significa un % literal.

LIKE y rendimiento

LIKE con un patrón que empieza por % (como '%USB%') no puede usar índices eficientemente. MySQL tiene que examinar cada fila de la tabla para evaluar el patrón, lo que se convierte en un full table scan. En tablas pequeñas esto no es problema, pero en tablas con millones de filas puede ser lento.

Los patrones que empiezan con un texto fijo (como 'Ca%') sí pueden aprovechar índices, porque MySQL sabe por dónde empezar a buscar en el índice.

Para búsquedas de texto avanzadas en tablas grandes, MySQL ofrece búsqueda Full-Text (MATCH ... AGAINST), que veremos en una sección posterior del tutorial. Full-Text está diseñado específicamente para buscar palabras dentro de textos largos y es mucho más eficiente que LIKE '%palabra%'.

LIKE y collation

La comparación de LIKE respeta la collation de la columna. Con la collation por defecto (utf8mb4_0900_ai_ci), las búsquedas no distinguen mayúsculas ni minúsculas, ni acentos:

SELECT nombre FROM productos WHERE nombre LIKE '%samsung%';

Encuentra "Samsung Galaxy S24" aunque el patrón está en minúsculas. Si necesitas una búsqueda que distinga mayúsculas, puedes forzar una collation binaria:

SELECT nombre FROM productos WHERE nombre LIKE BINARY '%Samsung%';

Ahora solo coincide si la capitalización es exacta.

Practica con LIKE

Usa el editor para buscar patrones en los datos. Prueba con % y _ para distintos tipos de coincidencia:

Simulador SQL
Ctrl+Enter para ejecutar

En el siguiente artículo veremos IS NULL, el operador específico para trabajar con valores nulos.

Escrito por Eduardo Lázaro