2. LENGUAJE DE MANIPULACIÓN DE DATOS (DML, DATA MANAGEMENT LANGUAGE).
2.6. EL OPERADOR LIKE EN SQL
En el tutorial anterior aprendimos a utilizar el operador IN para comprobar si una fila coincidía con alguno de los valores de una lista específica. Sin embargo, existen casos donde necesitamos buscar coincidencias más flexibles, por ejemplo, cuando deseamos encontrar filas que cumplen con un patrón en una cadena de texto.
En estos casos, podemos utilizar los operadores LIKE y NOT LIKE, que permiten filtrar registros basándose en si el contenido de una columna coincide (o no) con un patrón determinado.
Por ejemplo, podemos transformar la instrucción en lenguaje natural:
"Encuentra todos los medicamentos cuyo nombre comienza con 'A' y termina en 'Y'" en una consulta SQL como:
WHERE drug LIKE 'A%Y'
Sintaxis de LIKE
SELECT columna1, columna2, ...
FROM nombre_tabla
WHERE columna LIKE patrón
AND/OR columna NOT LIKE patrón;
Uso de comodines
El operador LIKE se utiliza con comodines para definir los patrones de búsqueda:
- %: Representa cero o más caracteres.
- _: Representa un único carácter.
- El comodín % antes y después de "Relief" indica que pueden existir cualquier cantidad de caracteres antes y después de esa palabra.
- Así, la consulta devuelve todas las filas en las que la palabra "Relief" aparezca en cualquier posición del nombre del medicamento.
Estos comodines hacen que las búsquedas sean más dinámicas, permitiendo encontrar coincidencias sin tener que conocer el valor exacto completo.
Ejemplo práctico
Imagina que trabajas como analista de datos en CVS Pharmacy y tienes acceso a la tabla pharmacysales con información sobre las ventas de medicamentos. Un fragmento de los datos es el siguiente:
| prod_id | phsa_fabricante | phsa_droga | phsa_ventastotales |
|---|---|---|---|
| 61 | Biogen | Alivio varicose | 500,101.61 |
| 63 | Johnson & Johnson | Reductor de ácido Pepcid AC | 2,104,765.00 |
| 79 | AstraZeneca | Green Guard Stomach Relief | 3,560,527.35 |
| 80 | Biogen | Potasio de Losartán | 3,740,527.69 |
| 84 | Pfizer | Tranexamic Acid | 2,752,163.00 |
| 130 | Johnson & Johnson | Medi-Primer alivio del frío | 3,556,698.88 |
| 131 | Biogen | ESIKA | 1,540,350.32 |
Ahora supongamos que deseas seleccionar todas las drogas que contienen la palabra "Relief" en su nombre. La consulta sería:
En lugar de escribir múltiples condiciones con OR, puedes hacerlo de forma más concisa así:
SELECT prod_id, phsa_fabricante, phsa_drogaz
FROM pharmacysales
WHERE phsa_droga LIKE '%Relief%';
Explicación:
Salida esperada:
| phsa_fabricante | phsa_droga | phsa_ventastotales |
|---|---|---|
| AstraZeneca | Green Guard Stomach Relief | 3,560,527.35 |
Uso de comodines (wildcards) con LIKE en SQL
En la lección anterior aprendimos cómo el operador LIKE nos permite buscar registros que coincidan con un patrón específico dentro de una columna de texto. Para potenciar esta funcionalidad, SQL nos ofrece comodines (wildcards), que permiten realizar búsquedas mucho más flexibles.
El comodín %
El comodín % representa cero o más caracteres. Es decir, puede sustituir cualquier cantidad de letras (incluso ninguna) en la búsqueda.
Ejemplo práctico:
Imagina que deseas encontrar empleados cuyo nombre empiece con "Ke" y termine con "y", sin importar qué caracteres haya en el medio.
La consulta sería:
SELECT * FROM employees
WHERE first_name LIKE 'Ke%y';
Con esta consulta se obtendrán nombres como Kerry, Kenny o Kelsey.
El comodín _
El subrayado _ representa exactamente un carácter. Es útil para buscar palabras con una cantidad exacta de letras o con caracteres en posiciones específicas.
Ejemplo práctico:
Supongamos que deseas buscar todas las palabras de 4 letras en un diccionario que comiencen con "f" y tengan "c" como tercera letra:
SELECT * FROM dictionary_words
WHERE word LIKE 'f_c_';
Esto seleccionará palabras como face o fact.
Resumen de patrones con LIKE
A continuación, algunos patrones comunes que puedes utilizar como referencia rápida:
| Consulta | Definición |
|---|---|
| WHERE first_name LIKE 'a%' | Encuentra cualquier valor que comience con "a". |
| WHERE first_name LIKE '%a' | Encuentra cualquier valor que termine con "a". |
| WHERE first_name LIKE '%ae%' | Encuentra cualquier valor que contenga "ae" en medio. |
| WHERE first_name LIKE '_b%' | Encuentra cualquier valor con "b" en la segunda posición. |
| WHERE first_name LIKE 'a%o' | Encuentra cualquier valor que comience con "a" y termine con "o". |
| WHERE first_name LIKE 'a___' | Encuentra cualquier valor que comience con "a" y tenga exactamente 4 caracteres. |
Importancia de la práctica
El dominio del uso de LIKE con comodines solo se logra practicando. Combinar estos patrones de manera estratégica te permitirá realizar búsquedas mucho más eficientes y precisas en bases de datos.
SQL LIKE % Practico
Ejercicio de práctica de SQL LIKE
Problema de la práctica
Encuentra a todos los clientes cuyo nombre empice con 'S' y termine en 'X'
Ejercicio #1
Contexto: Búsqueda de productos con patrones (LIKE) – TechStore
La empresa TechStore cuenta con un inventario de más de 1.000 productos tecnológicos, y el equipo de análisis necesita encontrar ciertos artículos basándose en patrones de texto en sus nombres.
Requerimiento:
Escribe una consulta SQL que obtenga todos los productos cuyo:
1. Nombre comience con la letra "S", y
2. El modelo termine con las letras "X".
Estructura de la tabla:
| columna | tipodato |
|---|---|
| prod_id | INTEGER |
| prod_nombre | TEXT |
| prod_categoria | TEXT |
| prod_precio | NUMERIC |
| prod_stock | INTEGER |
| prod_fabricante | TEXT |
Datos de ejemplo:
| prod_id | prod_nombre | prod_categoria | prod_precio | prod_stock | prod_fabricante |
|---|---|---|---|---|---|
| 1 | Samsung Galaxy S23X | Smartphones | 3500.00 | 45 | Samsung |
| 2 | Sony Bravia 55X | Televisores | 2700.00 | 20 | Sony |
| 3 | HP Spectre Pro | Portátiles | 4900.00 | 10 | HP |
| 4 | SmartHome Hub MaxX | Domótica | 800.00 | 30 | SmartHome Inc. |
Ejercicio #2
Contexto: Uso de comodines con LIKE
Una pequeña empresa con sede en Australia almacena información de 1.000 clientes en su base de datos. El equipo de análisis necesita filtrar clientes basándose en un patrón específico en los nombres.
Requerimiento:
Escribe una consulta SQL que obtenga todos los clientes donde la segunda y tercera letra de su nombre sean "e".
Ejemplo:
Nombres como "Reece Smith" cumplen con este patrón.
Estructura de la tabla:
| columna | tipodato |
|---|---|
| clie_id | INTEGER |
| clie_nombre | TEXT |
| clie_genero | TEXT |
| clie_edad | INT |
| clie_codigopostal | INT |
| clie_ciudad | TEXT |
| clie_estadociudad | TEXT |
Datos de ejemplo:
| clie_id | clie_nombre | clie_genero | clie_edad | clie_codigopostal | clie_ciudad | clie_estadociudad |
|---|---|---|---|---|---|---|
| 1 | Ignacio Perez | Masculino | 30 | 5464 | Barranquilla | Atlántico |
| 2 | Graciela Espriella | Femenino | 69 | 8223 | Cartagena | Bolívar |
| 3 | Elberth Lopez | Masculino | 59 | 5661 | Santa Marta | Magdalena |
-------------------------------------------------------------------------------------------------------------
SIGUIENTE - FILTRO