2. LENGUAJE DE MANIPULACIÓN DE DATOS (DML, DATA MANAGEMENT LANGUAGE).
2.4. USO DEL OPERADOR BETWEEN EN SQL
En lecciones anteriores se explicó cómo utilizar la cláusula WHERE junto con el operador OR para filtrar datos según múltiples condiciones. En este módulo, exploraremos una forma más concisa y eficiente de aplicar filtros dentro de un rango: el operador BETWEEN.
¿Qué es el operador BETWEEN?
El operador BETWEEN es un operador lógico que permite seleccionar valores dentro de un rango determinado. Este rango puede aplicarse a números, fechas o incluso valores de texto. Para funcionar correctamente, BETWEEN debe combinarse con el operador AND.
Sintaxis básica:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN valor_inicial AND valor_final;
Nota: El operador BETWEEN es inclusivo, lo que significa que los valores extremos sí están incluidos en los resultados.
Ejemplo aplicado:
Supongamos que un periodista está elaborando un informe sobre los medallistas de oro en los Juegos Olímpicos entre los años 2000 y 2010. Podría usar la siguiente consulta:
SELECT * FROM medallas
WHERE tipo = 'ORO'
AND anio BETWEEN 2000 AND 2010;
Esta consulta devolverá todos los registros de medallas de oro ganadas entre los años 2000 y 2010, incluyendo ambos años.
¿Por qué usar BETWEEN y no múltiples OR?
Podríamos escribir la misma consulta de una manera más extensa utilizando OR, así:
SELECT * FROM medallas
WHERE tipo = 'ORO'
AND (anio = 2000 OR anio = 2004 OR anio = 2008);
Aunque esta forma es válida, el uso de BETWEEN es más conciso, legible y eficiente, especialmente cuando el rango es amplio.
¿Es BETWEEN inclusivo?
Sí, en SQL el operador BETWEEN incluye los límites del rango. Por ejemplo:
SELECT * FROM product_sales
WHERE price BETWEEN 10000 AND 20000;
Esta consulta seleccionará productos con precios mayores o iguales a 10.000 y menores o iguales a 20.000.
En contraste, si quisieras excluir el valor mínimo, deberías usar:
SELECT * FROM product_sales
WHERE price > 10000
AND price <= 20000;
Ambas consultas son correctas, pero producen resultados distintos por la inclusión o exclusión de los límites.
Ejercicio de práctica – SQL BETWEEN
Escenario:
Eres un analista de datos en TechStore, y deseas analizar la venta de medicamentos por parte de diferentes fabricantes.
Objetivo:
Utiliza el operador BETWEEN para consultar todos los medicamentos que:
- Se hayan vendido en cantidades entre 100.000 y 105.000 unidades, y
- Hayan sido fabricados por Biogen, AbbVie o Eli Lilly.
Consulta esperada:
SELECT * FROM ventas_medicamentos
WHERE unidades BETWEEN 100000
AND 105000
AND fabricante IN ('Biogen', 'AbbVie', 'Eli Lilly');
Salida esperada:
| fabricante | medicamento | unidades |
|---|---|---|
| AbbVie | Lidocaína Hidrocloruro + Epinefrina | 101102 |
| AbbVie | Hidralazina Hidrocloruro | 104368 |
| Biogen | Quetiapina Fumarato | 103246 |
| Eli Lilly | Androgel | 102027 |
Ejercicio de práctica de SQL
Problemas de la práctica
Encuentre todos los medicamentos que vendieron entre 100mil y 105k unidades, fabricados por Biogen, AbbVie o Eli Lilly.
Ejercicio #1
Contexto: Uso de BETWEEN, AND, OR y WHERE
Imagina que eres un analista de datos que trabaja para CVS Pharmacy y tienes acceso a la base de datos de ventas de medicamentos. Tu objetivo es identificar ciertos medicamentos que cumplan con condiciones específicas de ventas y fabricante.
Requerimiento:
Utiliza el operador BETWEEN junto con las cláusulas WHERE, AND y OR para consultar información sobre los medicamentos:
1. Que hayan vendido entre 100.000 y 105.000 unidades, y
2. Que hayan sido fabricados por alguno de los siguientes laboratorios: Biogen, AbbVie o Eli Lilly.
La consulta debe mostrar los siguientes campos:
* Fabricante
* Nombre del Medicamento
* Unidades Vendidas
Sugerencia profesional:
Este ejercicio requiere comprender cómo combinar condiciones múltiples en una consulta SQL. Si se te dificulta, intenta escribir primero la condición del rango con BETWEEN, y luego añade las condiciones del fabricante utilizando OR. Tambien se recomienda usar los operadores vistos en los tutoriales anteriores OR, AND, y WHERE.
Estructura de la tabla:
| columna | tipodato |
|---|---|
| prod_id | INTEGER |
| unidades | INTEGER |
| ventastotales | INTEGER |
| descuentos | NUMERIC |
| fabricante | TEXT |
| drogas | TEXT |
Datos de ejemplo:
| prod_id | unidades | ventastotales | descuentos | fabricante | drogas |
|---|---|---|---|---|---|
| 1 | 120 | 2400.50 | 150.00 | PharmaPlus | Paracetamol 500mg |
| 2 | 80 | 3200.00 | 200.00 | BioSalud | Ibuprofeno 400mg |
| 3 | 50 | 1250.75 | 75.50 | MediCare | Amoxicilina 500mg |
| 4 | 200 | 5000.00 | 300.00 | SaludVida | Vitamina C 1g |
| 5 | 150 | 3750.00 | 250.00 | PharmaPlus | Omeprazol 20mg |
| 6 | 90 | 2700.40 | 180.00 | BioSalud | Loratadina 10mg |
| 7 | 60 | 1800.00 | 120.00 | MediCare | Diclofenaco 50mg |
| 8 | 40 | 1600.00 | 100.00 | SaludVida | Azitromicina 500mg |
| 9 | 37410 | 293452 | 208876.01 | Eli Lilly | Zyprexa |
| 10 | 75 | 1875.50 | 90.00 | BioSalud | Losartán 50mg |
| 34 | 94698 | 600997.19 | 521182.16 | AstraZeneca | Surmontil |
| 61 | 77023 | 500101.61 | 419174.97 | Biogená | Alivio varicose |
| 136 | 144814 | 1084258 | 1006447.73 | Biogená | Burkhart |
-------------------------------------------------------------------------------------------------------------
SIGUIENTE - SQL IN