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%';| nombre | precio |
|---|---|
| Cable USB-C a Lightning | 19.99 |
| Camiseta algodón básica | 24.99 |
| Camiseta técnica running | 34.99 |
| Cargador USB-C 65W | 35.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';| nombre | |
|---|---|
| Ricardo | ricardo.alonso@tienda.com |
| Sofía | sofia.mendez@tienda.com |
| Alberto | alberto.prieto@tienda.com |
| Natalia | natalia.herrera@tienda.com |
| Daniel | daniel.vargas@tienda.com |
| Patricia | patricia.cano@tienda.com |
| Raúl | raul.pena@tienda.com |
| Cristina | cristina.guerrero@tienda.com |
| Marcos | marcos.delgado@tienda.com |
| Inés | ines.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%';| nombre | precio |
|---|---|
| Cargador USB-C 65W | 35.99 |
| Cable USB-C a Lightning | 19.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___';| nombre | ciudad | codigo_postal |
|---|---|---|
| María | Madrid | 28001 |
| Pedro | Madrid | 28013 |
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%';| nombre | puesto |
|---|---|
| Natalia | Vendedora Senior |
| Daniel | Vendedor |
| Patricia | Vendedora |
| Raúl | Vendedor Junior |
| Cristina | Responsable de Almacén |
| Marcos | Operario de Almacén |
| Inés | Operaria 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:
En el siguiente artículo veremos IS NULL, el operador específico para trabajar con valores nulos.
Escrito por Eduardo Lázaro
