Saltar al contenido principal

Tutorial de comparación de patrones SQL LIKE

Utiliza LIKE para filtrar registros SQL según coincidencias de cadenas específicas. Este tutorial te enseña a utilizar comodines, NOT, LOWER, UPPER y CASE WHEN con LIKE.
Actualizado 4 dic 2024  · 8 min de lectura

Te guste o no, el operador LIKE es esencial en SQL. Proporciona a los científicos e ingenieros de datos la capacidad de filtrar datos según coincidencias de cadenas específicas. Este artículo proporciona un tutorial rápido sobre LIKE para principiantes e intermedios.

El operador LIKE de SQL para la coincidencia de patrones

Nota: Para ejecutar fácilmente tú mismo todo el código de ejemplo de este tutorial, puedes crear un libro de trabajo gratuito de DataLab conSQL instalado y bases de datos con datos de ejemplo.

Supongamos que tienes una tabla employees y quieres encontrar todos los nombres que empiezan por ‘A’:

empleados

emp_no

birth_date

first_name

last_name

gender

hire_date

10001

1953-09-02T00:00:00.000Z

Georgi

Facello

M

1986-06-26T00:00:00.000Z

10002

1964-06-02T00:00:00.000Z

Bezalel

Simmel

F

1985-11-21T00:00:00.000Z

10003

1959-12-03T00:00:00.000Z

Parto

Bamford

M

1986-08-28T00:00:00.000Z

Podrías dedicar tiempo a revisar la tabla manualmente. Pero, ¿por qué harías eso cuando tienes el operador LIKE?

SELECT DISTINCT
	first_name
FROM employees
WHERE first_name LIKE 'A%'

La magia aquí está en la cláusula `WHERE first_name LIKE ‘A%’`, que significa "busca todos los first_name que empiecen por "A" y acaben con cualquier número de caracteres". El `A%` se conoce aquí como patrón de concordancia. 

El `%` no es el único comodín que puedes utilizar junto con el operador LIKE. También puedes utilizar el signo de subrayado `_`,:

  • `%` coincide con cualquier número de caracteres.
  • `_` coincide con cualquier carácter.

La sintaxis es fácil de recordar. Sencillamente:

column_name LIKE pattern

Puedes utilizar LIKE para conseguir una gran variedad de coincidencias de patrones. He aquí cómo:

Ejemplos SQL LIKE para principiantes

A continuación, te presentamos algunos ejemplos prácticos de cómo puedes utilizar la declaración LIKE y los resultados de nuestro conjunto de datos de muestra. 

1. Utiliza LIKE para la coincidencia exacta de cadenas

Si quieres realizar una coincidencia exacta de cadenas, utiliza LIKE sin ‘%’ o ‘_’

SELECT
    first_name, last_name
FROM employees
WHERE first_name LIKE 'Barry' -- the same as WHERE first_name = ‘Barry’

2. Utiliza "%" para coincidir con cualquier número de caracteres 

‘%’ puede utilizarse para hacer coincidir cualquier número (incluso cero) de caracteres: un número, un alfabeto o un símbolo.

Supongamos que quieres encontrar a todos los empleados cuyo nombre empiece por ‘Adam’; puedes utilizar el patrón ‘Adam%’

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name LIKE 'Adam%'

Para encontrar nombres que acaben en "z" prueba el patrón ‘%z’. También puedes utilizar varios ‘%’ en un mismo patrón. Por ejemplo, si quieres encontrar nombres que contengan "z", utiliza ‘%z%’.

3. Utiliza "_" para que coincida con un (y sólo un) carácter

Como en el juego del Ahorcado, en el signo de subrayado _ sólo cabe un carácter.

¿De cuántas formas se puede escribir Le_n? El patrón coincidiría con cualquier cosa, desde "Lexn", "LeAn", "Le3n" o "Le-n".

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name LIKE 'Le_n'

¿Cuáles son los diferentes nombres con sólo tres caracteres? Podemos averiguarlo utilizando tres guiones bajos consecutivos ___ como patrón.

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name LIKE '___'

4. Utiliza tanto "%" como "_" para coincidir con cualquier patrón

Por supuesto, puedes utilizar tanto ‘%’ como ‘_’ para crear patrones interesantes. 

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name LIKE '%ann_'

El patrón ‘%ann_’ coincide con una cadena que empieza con cualquier número de caracteres y acaba con "ann" y otro carácter.

5. Utiliza NOT para encontrar cadenas que no coincidan con un patrón

¿Y si quieres encontrar todas las filas que no cumplen un criterio específico? Puedes utilizar el operador NOT LIKE. Por ejemplo, para encontrar todos los títulos excepto "Personal", podemos utilizar la sintaxis

`WHERE title NOT LIKE ‘Staff’`

Esto es exactamente equivalente a la sintaxis

`WHERE title != ‘Staff’`
SELECT DISTINCT
    title
FROM titles
WHERE title NOT LIKE 'Staff'

Por supuesto, puedes utilizar NOT LIKE con cualquiera de los patrones que hemos descrito.

SELECT DISTINCT
    title
FROM titles 
WHERE title NOT LIKE '%engineer'

6. Utiliza LOWER (o UPPER) con LIKE para la coincidencia de patrones sin distinción entre mayúsculas y minúsculas

Puedes utilizar la siguiente sintaxis si necesitas realizar una concordancia de patrones pero no estás seguro de si la cadena está almacenada en minúsculas, mayúsculas o mixtas.

`LOWER(column_name) LIKE pattern`

La función LOWER() devuelve todas las cadenas en minúsculas, independientemente de si están almacenadas en mayúsculas, minúsculas o mixtas. 

Cuando utilices la sintaxis, ¡asegúrate de escribir el patrón en minúsculas! De lo contrario, es posible que no obtengas ninguna coincidencia.

También podrías sustituir LOWER por UPPER en la sintaxis anterior. Asegúrate de escribir el patrón en mayúsculas.

`UPPER(column_name) LIKE PATTERN`

Por ejemplo, para saber si el nombre de un empleado es "Joanne", "JoAnne", "Joanna" o "JoAnna", prueba cualquiera de las siguientes opciones:

SELECT DISTINCT
    first_name
FROM employees
WHERE lower(first_name) LIKE 'joann_'
SELECT DISTINCT
    first_name
FROM employees
WHERE UPPER(first_name) LIKE 'JOANN_'

7. SQL LIKE con varios valores utilizando OR/AND

También puedes combinar varias condiciones utilizando la sintaxis LIKE

Por ejemplo, utiliza la condición OR para encontrar resultados que satisfagan al menos uno de los múltiples patrones LIKE.

SELECT DISTINCT
    first_name
FROM employees
WHERE
first_name LIKE 'Ad_l' OR
first_name LIKE 'Ad_m'

Por otra parte, para encontrar una cadena que coincida con varias condiciones LIKE, utiliza la palabra clave AND.

SELECT DISTINCT
    first_name
FROM employees
WHERE
first_name LIKE '%am%' AND
first_name LIKE '%me%'

La sintaxis LIKE puede aplicarse a varias columnas siempre que su tipo de variable sea un carácter de longitud variable (varchar). Sabiendo que podemos encontrar los nombres de los empleados cuyas iniciales son "Z. Z."

SELECT DISTINCT
    first_name, last_name
FROM employees
WHERE
first_name LIKE 'Z%' AND
last_name LIKE 'Z%'

8. Utiliza LIKE en la cláusula SELECT CASE WHEN 

Hasta ahora, nos hemos centrado en utilizar LIKE como condición para seleccionar registros en la cláusula WHERE. También utilizamos LIKE en la cláusula SELECT. Por ejemplo, ¿podemos saber cuántos empleados llamados "Adán" hay en nuestra base de datos?

SELECT
    COUNT(CASE WHEN first_name LIKE 'Adam' THEN 1 END) num_employees_adam
FROM employees

Por otra parte, ¿cuántos empleados tienen las iniciales "A.Z."?

SELECT
    COUNT(CASE WHEN first_name LIKE 'A%' AND last_name LIKE 'Z%' THEN 1 END) num_employees
FROM employees

Patrones comunes utilizados en SQL LIKE

Aquí tienes un resumen de los patrones que discutimos para una referencia rápida:

Patrón Descripción Ejemplo de uso
A% Coincide con las cadenas que empiezan por "A" Encontrar nombres que empiecen por "A
%z% Coincide con cadenas que contengan "z" Encontrar nombres que contengan "z"
Le_n Coincide con cadenas como "Len", "Leon", etc. Encontrar nombres con una sola variación de caracteres
%ann_ Coincide con cadenas acabadas en "ann" y un carácter adicional Encontrar nombres como "Joann", "Joanna"

Ejemplos intermedios de SQL LIKE

La función LIKE es muy similar en los distintos sabores de SQL (por ejemplo, PostgreSQL, MySQL, Redshift, etc.). Sin embargo, algunos tienen variaciones adicionales de la función LIKE que merece la pena mencionar. 

1. El operador ILIKE

Disponible en Redshift y PostgreSQL, ILIKE es la versión de LIKE que no distingue entre mayúsculas y minúsculas. Por tanto, todos los siguientes son equivalentes.

SELECT
  datacamp ILIKE ‘datacamp’, -- returns TRUE
  DATACAMP ILIKE ‘datacamp’, -- returns TRUE
  Datacamp ILIKE ‘datacamp’, -- returns TRUE
  datacamp ILIKE ‘DataCamp’, -- returns TRUE

2. Utilizar corchetes [] y [^] como caracteres comodín

Los usuarios de T-SQL o SQL Server disponen de caracteres comodín adicionales para una coincidencia de patrones más compleja.

La sintaxis de corchetes [] coincide con cualquier carácter específico dentro del rango o conjunto. Por ejemplo, todo lo siguiente devolverá TRUE.

SELECT
  ‘Carson’ LIKE ‘[C-K]arson’, -- returns TRUE because C is in the range C-K
  ‘Karson’ LIKE ‘[C-K]arson’, -- returns TRUE because K is in range
  ‘Larson’ LIKE ‘[CKL]arson’, -- returns TRUE because L is in the set [CKL]
  ‘Parson’ LIKE ‘[C-K]arson’ -- returns FALSE because P is out of range

El comodín caret-in-square-bracket [^] coincide con cualquier carácter que no esté dentro del rango o conjunto especificado. ¿Puedes ver el porqué de los siguientes resultados? 

SELECT
  ‘Carson’ LIKE ‘[^C-K]arson’ -- returns FALSE 
  ‘Parson’ LIKE ‘[^C-K]arson’ -- returns TRUE

Aquí, como "C" está dentro del rango de [C-K], el patrón ‘C’ no coincidirá con [^C-K]. Así, "Carson" no coincidirá con [^C-K]arson, pero "Parson" sí.

3. El operador RLIKE

Disponible en MySQL, el operador RLIKE reconoce expresiones regulares (RegEx) en el patrón. RegEx es una herramienta potente y versátil para la concordancia avanzada de patrones. 

No está de más tener nociones básicas de RegEx, sobre todo si tu versión de SQL admite RLIKE. Puedes aprender más sobre RegEx con nuestro curso Expresiones regulares en Python.

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name RLIKE 'Susann[a-e]'

4. El operador "~~

En PostgreSQL, ‘~~’ es completamente sinónimo de LIKE. También existen equivalentes de ILIKE, NOT LIKE, y NOT ILIKE.

Operario

Equivalente

~~

LIKE

~~*

ILIKE

!~~

NOT LIKE

!~~*

NOT ILIKE

Solución de problemas: Errores y equivocaciones comunes con LIKE

Aquí tienes algunos errores comunes que puedes encontrarte al utilizar LIKE, y cómo corregirlos:

  1. No hay resultados: Comprueba si se distingue entre mayúsculas y minúsculas. En algunos dialectos de SQL, LIKE distingue por defecto entre mayúsculas y minúsculas. Utiliza LOWER() o ILIKE (si es compatible) para la coincidencia sin distinción entre mayúsculas y minúsculas.
  2. Resultados inesperados con comodines: Asegúrate de que % y _ se utilizan correctamente. % coincide con cualquier número de caracteres, mientras que _ coincide exactamente con un carácter. Colocarlos mal puede provocar coincidencias inesperadas.
  3. Problemas de rendimiento: Si tu consulta es lenta, busca la dirección % en los patrones (por ejemplo, %pattern), que desactiva el uso de índices. Reescribe los patrones para que empiecen por una cadena concreta, si es posible. Consulta la sección siguiente para saber más sobre el rendimiento. 
  4. Errores de inyección SQL: Si utilizas la entrada del usuario en tu consulta, asegúrate de que está correctamente parametrizada para evitar errores de sintaxis o vulnerabilidades.
  5. Caracteres especiales en los patrones: Los símbolos comodín como % y _ en la cadena de búsqueda deben escaparse si se pretende que sean caracteres literales. Utiliza ESCAPE en tu consulta para definir un carácter de escape.
WHERE column_name LIKE '50\% OFF' ESCAPE '\'

Consideraciones de rendimiento al utilizar el operador LIKE

El operador LIKE es estupendo, pero puede afectar potencialmente al rendimiento de la consulta, sobre todo cuando se utiliza en grandes conjuntos de datos. He aquí algunas consideraciones para optimizar su uso:

  1. Índices: El operador LIKE funciona mejor cuando el patrón empieza por una cadena constante, como Adam%, porque la base de datos puede utilizar índices. Sin embargo, patrones como %Adam o %Adam% requieren un escaneo completo de la tabla, lo que puede resultar lento para tablas grandes.
  2. Evita los comodines iniciales: Empezar un patrón con %, como %pattern, desactiva el uso de índices, ya que la base de datos tiene que examinar cada registro.
  3. Intercalación y concordancia insensible a mayúsculas y minúsculas: Utilizar funciones como LOWER() o UPPER() en las columnas para realizar búsquedas que no distingan entre mayúsculas y minúsculas también puede impedir que se utilicen los índices. En su lugar, asegúrate de que la intercalación de la base de datos está configurada adecuadamente para realizar comparaciones sin distinguir mayúsculas de minúsculas.
  4. Enfoques alternativos: Para grandes conjuntos de datos, considera la posibilidad de utilizar la búsqueda de texto completo o funciones de búsqueda específicas de la base de datos, como los índices GIN en PostgreSQL o FULLTEXT en MySQL, cuando realices búsquedas de cadenas complejas o frecuentes.
  5. Consultas selectivas: Limita el alcance de tus consultas utilizando filtros adicionales, como intervalos de fechas o columnas numéricas, para reducir los datos procesados por el operador LIKE.

LIKE vs. Búsqueda de texto completo

La búsqueda de texto completo, disponible en bases de datos como MySQL, PostgreSQL y SQL Server, está optimizada para consultas de texto avanzadas, como la búsqueda de palabras clave, el manejo de variaciones lingüísticas y la clasificación de resultados por relevancia. Mientras que LIKE es estupendo para tareas básicas, la búsqueda de texto completo es mejor para búsquedas de texto escalables y sofisticadas.

Utiliza SQL LIKE con confianza

Dominar las funciones SQL es clave para tener éxito en la ciencia de datos, y el comando LIKE de SQL no es una excepción. Un buen dominio de SQL potenciará tu progreso analítico, ¡así que asegúrate de aprenderlo bien!

Para más recursos sobre SQL, asegúrate de consultar lo siguiente:

Conviértete en Ingeniero de Datos

Conviértete en un ingeniero de datos mediante el aprendizaje avanzado de Python
Empieza a Aprender Gratis

Preguntas frecuentes

¿Se puede utilizar el operador LIKE con tipos de datos numéricos?

No, el operador LIKE se utiliza específicamente para la concordancia de patrones con tipos de datos de cadena como CHAR,VARCHAR y TEXT. Para los tipos de datos numéricos, se utilizan otros operadores de comparación como =,<,>, etc.

¿Cómo es el rendimiento de LIKE en comparación con otros operadores SQL?

El operador LIKE puede ser menos eficaz, especialmente con patrones que empiecen por %, ya que requiere un escaneo completo de la tabla. La indexación no puede utilizarse eficazmente en estos casos, lo que podría ralentizar las consultas en grandes conjuntos de datos.

¿Existe algún problema de seguridad al utilizar LIKE en SQL?

Aunque LIKE en sí no es intrínsecamente inseguro, utilizar entradas de usuario directamente en consultas SQL puede dar lugar a ataques de inyección SQL. Limpia siempre las entradas y considera el uso de consultas parametrizadas para mitigar este riesgo.

¿Cómo gestionarías las búsquedas que distinguen entre mayúsculas y minúsculas en una versión de SQL que no admite ILIKE?

En las versiones de SQL sin ILIKEpuedes utilizar LOWER(column_name) LIKE LOWER(pattern) o UPPER(column_name) LIKE UPPER(pattern) para realizar búsquedas que no distingan entre mayúsculas y minúsculas.

¿Se puede utilizar LIKE con caracteres no ASCII?

Sí, LIKE puede utilizarse con caracteres no ASCII siempre que la codificación de la base de datos admita esos caracteres. Esto incluye UTF-8, que se utiliza habitualmente para admitir una amplia gama de caracteres.

¿Cómo modificarías una consulta LIKE para buscar un carácter comodín literal (por ejemplo, % o _)?

Para buscar un literal % o _, debes utilizar un carácter de escape. Por ejemplo, en SQL Server, puedes utilizar LIKE 'A[%]%' ESCAPE '%' para buscar cadenas que contengan un literal %.

¿Puedes combinar LIKE con otras funciones SQL para mejorar las capacidades de búsqueda?

Sí, combinar LIKE con funciones como CONCAT o SUBSTRING puede ayudar a refinar los patrones de búsqueda. Por ejemplo, utilizando CONCAT puedes construir dinámicamente patrones basados en los valores de otras columnas.

¿Cómo se puede utilizar LIKE junto con las operaciones JOIN?

LIKE se puede aplicar en las condiciones deJOIN para hacer coincidir patrones entre columnas de diferentes tablas. Por ejemplo, ON table1.col1 LIKE table2.col2 || '%' puede utilizarse para unir tablas en las que table1.col1 empiece por table2.col2.

¿Cuáles son algunas alternativas a LIKE para la concordancia de patrones complejos?

Para patrones más complejos, se pueden utilizar versiones de SQL que admitan expresiones regulares, como RLIKEde MySQL o SIMILAR TO de PostgreSQL . Proporcionan una sintaxis más rica para la concordancia avanzada de patrones.

¿Cómo gestiona LIKE los valores nulos en las columnas?

Cuando una columna contiene valores nulos, LIKE no coincidirá con estos registros, ya que los nulos no se consideran iguales a ninguna cadena o patrón. Para incluir nulos, utiliza una condición como OR column IS NULL.

Temas

Más información sobre SQL

Certificación disponible

curso

Introducción a SQL

2 hr
919K
Aprende a crear y consultar bases de datos relacionales utilizando SQL en sólo dos horas.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

6 min

tutorial

Tutorial de Comparación de cadenas difusas en Python

En este tutorial, aprenderás a hacer coincidir aproximadamente cadenas y a determinar su similitud repasando varios ejemplos.
Kurtis Pykes 's photo

Kurtis Pykes

11 min

tutorial

Función SQL COALESCE

COALESCE() es una de las funciones más útiles de SQL. Lee este tutorial para aprender a dominarlo.
Travis Tang 's photo

Travis Tang

4 min

tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

9 min

tutorial

CALIFICAR: La sentencia de filtrado SQL que nunca supo que necesitaba

Conozca la cláusula SQL QUALIFY, un método de filtrado esencial aunque poco conocido en SQL. Comprender su sintaxis, usos y en qué se diferencia de otros métodos de filtrado SQL.
Kurtis Pykes 's photo

Kurtis Pykes

8 min

See MoreSee More