Volver a la lista de artículos Artículos
Lectura de 7 minutos

¿Qué hacen los operadores LIKE y NOT LIKE?

Los operadores LIKE y NOT LIKE de SQL se utilizan para encontrar coincidencias entre una cadena y un patrón determinado. Forman parte del SQL estándar y funcionan en todos los tipos de bases de datos, por lo que son conocimientos esenciales para todos los usuarios de SQL. Conocer estos operadores te permitirá escribir mejores consultas y demostrar a tus posibles empleadores que tienes las habilidades necesarias para filtrar conjuntos de datos extensos.

El SQL LIKE es un operador lógico que comprueba si una cadena contiene o no un patrón específico. Un ejemplo sencillo es cuando se intenta encontrar si una columna de nombre contiene algún nombre de cuatro letras que empiece por J (como "John"). El operador LIKE se utiliza a menudo en la cláusula WHERE de las sentencias SELECT, DELETE, y UPDATE para filtrar datos basados en patrones. Dominar el uso del operador LIKE le permitirá analizar grandes bases de datos con facilidad y recuperar exactamente los datos que necesita. Este artículo le dará una base sólida en el operador LIKE. Si desea seguir avanzando en sus conocimientos en este ámbito, considere la posibilidad de inscribirse en este completo curso de aprendizaje de LearnSQL.es, donde practicará SQL JOINs, agregaciones con GROUP BY, y otros temas más avanzados.

Examinemos cómo podemos utilizar el operador LIKE para filtrar los datos devueltos, recuperando así sólo los registros deseados. Esta es la sintaxis del operador LIKE:

SELECT column_1, column_2, ... column_n
FROM table_name
WHERE column_1 LIKE pattern

Apliquemos esta sintaxis a un ejemplo práctico. Imaginemos que tenemos una tabla llamada person_info que contiene información sobre el nombre, el apellido y la edad de las personas.

FirstNameLastNameAge
TimSamuels46
JohnPeterson23
TomWaters42
SarahHenderson48
PaulJohnson34
AndrewWade39
SarahSmith30
LynnPeterson27

Utilicemos el operador LIKE para extraer la información de las personas con el apellido "Peterson".

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName LIKE 'Peterson'

La ejecución de esta consulta SQL produciría el siguiente conjunto de resultados:

FirstNameLastNameAge
JohnPeterson23
LynnPeterson27

Este es un caso de uso simple para el operador LIKE. Para casos sencillos como éste, también podríamos haber escrito:

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName = 'Peterson'

Entonces, ¿cuál es la diferencia entre usar LIKE e igual? Equals (=) es un operador de comparación que opera con números y cadenas. Cuando se comparan cadenas, el operador equals compara cadenas enteras. En comparación, LIKE compara carácter por carácter mediante el uso de comodines, que se discutirán en detalle en este artículo.

El LIKE de SQL y los comodines

Además de examinar el uso de SQL LIKE y NOT LIKE, veremos dos caracteres comodín: el porcentaje (%) y el guión bajo (_). Los caracteres comodín se utilizan para sustituir uno o más caracteres en una cadena de patrones:

  • El comodín de porcentaje (%) sustituye a uno o más caracteres de una cadena.
  • El guión bajo (_) sustituye exactamente un carácter de una cadena.

El comodín de guión bajo (_)

Veamos primero el comodín de guión bajo (_) y apliquémoslo a nuestra tabla person_info tabla.

Imaginemos que queremos recuperar, de la tabla person_infolos nombres de las personas con las siguientes condiciones:

  • El FirstName debe comenzar con la letra "T",
  • La tercera letra de FirstName debe ser "m", y
  • La segunda letra de FirstName puede ser cualquier cosa.

Podemos utilizar la siguiente consulta:

SELECT FirstName
FROM person_info
WHERE FirstName LIKE 'T_m'

El resultado de esta consulta es:

SELECT FirstName
FROM person_info
WHERE FirstName LIKE 'T_m'

El resultado de esta consulta es:

FirstName
Tim
Tom

Fíjate en que la segunda letra del nombre puede ser cualquier cosa. Nuestra consulta SQL ignora esa letra y busca el patrón que hemos especificado.

Veamos otro ejemplo. Esta vez, sustituiremos dos caracteres por dos caracteres comodín de subrayado (_).

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE 'Wa__'

La ejecución de esta consulta recupera un único registro de nuestra tabla.

FirstNameLastName
AndrewWade

Observe que Andrew Wade coincide con el patrón, pero no Tom Waters. Al colocar dos guiones bajos después de "Wa", especificamos explícitamente que el LastName que buscamos tiene 4 caracteres.

El comodín del guión bajo puede colocarse en cualquier lugar del patrón que se busca. "_om", "T_m", o "To_", son todos patrones válidos.

El comodín de porcentaje (%)

Veamos ahora el comodín de porcentaje (%) en detalle y apliquémoslo a nuestra tabla person_info.

El comodín de porcentaje (%) se utiliza para sustituir varios caracteres. Como ejemplo, imaginemos que queremos encontrar todas las personas cuyo apellido termine en "hijo". Para conseguirlo, podemos escribir simplemente la siguiente consulta:

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE '%son'

El resultado de esta consulta es:

FirstNameLastName
JohnPeterson
SarahHenderson
PaulJohnson
LynnPeterson

Observe que el número de caracteres antes de "hijo" no importa con este comodín.

Si el patrón que busca está incrustado en medio de otra cadena, puede utilizar el comodín de porcentaje al principio y al final del patrón. Por ejemplo, para encontrar todos los empleados cuyos apellidos contengan "er", utilice la siguiente consulta con el patrón '%er%'.

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE '%er%'

Al ejecutar esta consulta se obtiene el siguiente conjunto de resultados:

FirstNameLastName
JohnPeterson
TomWaters
SarahHenderson
LynnPeterson

Combinemos el uso de _ y %. Digamos que queremos encontrar todos los nombres cuyo segundo carácter sea la letra "a". Podemos hacerlo con la siguiente consulta:

SELECT FirstName, LastName
FROM person_info
WHERE FirstName LIKE '_a%'

La ejecución de esta consulta da como resultado este conjunto:

FirstNameLastName
SarahHenderson
PaulJohnson
PaulaSmith

El operador LIKE se suele utilizar junto con la cláusula WHERE. Sin embargo, se puede utilizar en cualquier lugar donde se utilice una expresión en SQL.

SQL NOT LIKE

El operador SQL NOT LIKE se comporta como es de esperar, devolviendo esencialmente lo contrario de lo que haría el operador LIKE. Sustituyamos LIKE por NOT LIKE en uno de nuestros ejemplos anteriores y veamos el efecto.

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName NOT LIKE 'Peterson'

Aquí está el conjunto de resultados:

FirstNameLastNameAge
TimSamuels46
TomWaters42
SarahHenderson48
PaulJohnson34
AndrewWade39
PaulaSmith30

Como puede ver, el uso de NOT LIKE niega el patrón especificado. Esto es similar a otros operadores NOT que se ven en SQL. En este caso, el operador NOT LIKE recupera los datos de todas las personas cuyo apellido no es Peterson.

Sensibilidad a las mayúsculas y minúsculas de SQL LIKE

En los ejemplos anteriores, el nombre "Peterson" se utilizó con mayúscula. Dependiendo de la variante de SQL que esté utilizando, el operador LIKE puede distinguir entre mayúsculas y minúsculas. MySQL, PostgreSQL y Oracle distinguen por defecto entre mayúsculas y minúsculas.

SQL Server puede ser un poco más complicado. Por defecto, SQL Server no distingue entre mayúsculas y minúsculas. Sin embargo, es posible crear una base de datos SQL Server que distinga entre mayúsculas y minúsculas e incluso hacer que las columnas de tablas específicas distingan entre mayúsculas y minúsculas.

LIKE y NOT LIKE Otros en una Cláusula WHERE

Es común ver LIKE y NOT LIKE utilizados en combinación con una cláusula WHERE. Sin embargo, el operador LIKE puede utilizarse en cualquier sentencia SQL válida, como SELECT, INSERT INTO, UPDATE o DELETE. Veamos esto con un ejemplo ejecutado contra nuestra tabla person_info tabla. Consideremos la siguiente consulta SQL:

SELECT FirstName, FirstName LIKE 'T%' AS starts_with_t
FROM person_info;

La sentencia SELECT no sólo recupera los datos de la columna FirstName. Junto con LIKE, la segunda columna seleccionada en esta consulta devuelve un valor booleano basado en FirstName para cada registro de la tabla. El patrón que hemos especificado es cualquier cadena que empiece por la letra "T", por lo que esta consulta comprueba cada FirstName para ver si empieza por la letra "T" y devuelve verdadero (1) si lo hace, falso (0) en caso contrario.

La ejecución de esta consulta genera el siguiente conjunto de resultados:

FirstNamestarts_with_t
Tim1
John0
Tom1
Sarah0
Paul0
Andrew0
Paula0
Lynn0

SQL LIKE y NOT LIKE son esenciales para filtrar datos

Hemos cubierto la mayoría de las situaciones para usar el operador LIKE. Entender el operador SQL LIKE es esencial, y si solicitas algún trabajo en el que se requiera el uso de SQL, puede ser una de las preguntas de la entrevista de SQL que te hagan. El dominio del operador LIKE y de estos dos caracteres comodín se consigue con la práctica, por lo que este curso interactivo de SQL de LearnSQL.es con 88 ejercicios distintos es un gran recurso para aquellos que buscan mejorar sus conocimientos en esta área.