¿Cuáles son las 7 fases del diseño de bases de datos?

SQL BETWEEN: Filtra Datos Fácilmente

Valoración: 4.88 (4845 votos)

Cuando trabajas con bases de datos, una tarea común es encontrar registros que se encuentran dentro de un determinado intervalo de valores. Ya sea que busques ventas entre dos fechas, productos con precios en un rango específico o empleados con un cierto nivel de experiencia, necesitas una forma eficiente de realizar esta tarea. Aquí es donde entra en juego el operador SQL BETWEEN, una herramienta poderosa y elegante diseñada precisamente para simplificar este tipo de filtros en tus consultas.

El operador BETWEEN es una forma concisa y legible de especificar que un valor debe estar dentro de un rango definido, incluyendo ambos extremos del rango. Se utiliza comúnmente dentro de la cláusula `WHERE` de una sentencia `SELECT`, aunque también puede ser útil en otras cláusulas que acepten condiciones.

¿Qué es between en base de datos?
El operador SQL BETWEEN es una herramienta para filtrar valores dentro de un rango determinado. Se incluye en la declaración SELECT para simplificar y mejorar la legibilidad de la consulta.
Índice de Contenido

¿Qué es el Operador SQL BETWEEN y Por Qué Deberías Usarlo?

En esencia, el operador BETWEEN evalúa si una expresión (generalmente el valor de una columna) se encuentra entre un valor inicial y un valor final. La característica clave de BETWEEN es que es inclusivo, lo que significa que tanto el valor inicial como el valor final especificados en el rango son considerados parte del resultado si coinciden con el valor de la columna.

La principal razón para usar BETWEEN es la legibilidad y la simplificación de tus consultas. En lugar de combinar múltiples operadores de comparación (`>=` y `<=`) unidos por un `AND`, BETWEEN te permite expresar la misma condición de rango de una manera más directa y fácil de entender.

Considera la siguiente condición: necesitas encontrar todos los productos cuyo precio está entre 10 y 50 (ambos incluidos). Sin BETWEEN, escribirías:

WHERE precio >= 10 AND precio <= 50;

Usando BETWEEN, la misma condición se escribe de forma más compacta:

WHERE precio BETWEEN 10 AND 50;

Aunque ambas consultas producen el mismo resultado, la segunda es generalmente más fácil de leer y comprender de un vistazo, especialmente a medida que las consultas se vuelven más complejas.

Sintaxis del Operador BETWEEN

La sintaxis básica del operador BETWEEN es la siguiente:

SELECT nombre_columna(s)
FROM nombre_tabla
WHERE nombre_columna BETWEEN valor_inicial AND valor_final;

  • nombre_columna(s): Las columnas que deseas recuperar.
  • nombre_tabla: La tabla de la que deseas recuperar los datos.
  • nombre_columna: La columna sobre la cual aplicarás el filtro de rango.
  • valor_inicial: El límite inferior del rango (inclusivo).
  • valor_final: El límite superior del rango (inclusivo).

Es crucial que valor_inicial y valor_final sean del mismo tipo de dato que nombre_columna (o que el sistema de base de datos pueda realizar una conversión implícita compatible). Además, para que el rango funcione como se espera, valor_inicial debe ser menor o igual que valor_final en el orden de clasificación del tipo de dato.

Usando BETWEEN con Diferentes Tipos de Datos

BETWEEN con Números

Este es uno de los usos más directos de BETWEEN. Puedes usarlo con cualquier tipo de dato numérico (entero, decimal, flotante, etc.) para filtrar valores dentro de un rango numérico.

Ejemplo: Encontrar todos los pedidos con una cantidad de artículos entre 5 y 20.

SELECT id_pedido, fecha_pedido, cantidad_articulos
FROM Pedidos
WHERE cantidad_articulos BETWEEN 5 AND 20;

Esto devolverá pedidos con 5, 6, ..., 20 artículos.

BETWEEN con Fechas y Horas

Uno de los usos más comunes y potentes de BETWEEN es con tipos de datos de fecha y hora (DATE, TIME, DATETIME, TIMESTAMP, etc.). Te permite filtrar registros que ocurrieron dentro de un período de tiempo específico.

Ejemplo: Encontrar todas las ventas realizadas en el mes de diciembre de 2023.

SELECT id_venta, fecha_venta, total_venta
FROM Ventas
WHERE fecha_venta BETWEEN '2023-12-01' AND '2023-12-31';

Consideración Importante con Fechas/Horas: La precisión del tipo de dato es fundamental. Si tu columna `fecha_venta` incluye información de hora (DATETIME, TIMESTAMP), la condición BETWEEN '2023-12-01' AND '2023-12-31' incluirá todos los registros desde el inicio del día '2023-12-01' hasta el inicio del día '2023-12-31' (00:00:00). Para incluir *todo* el último día, podrías necesitar especificar la última hora y minuto, o usar el inicio del día siguiente como límite superior (dependiendo del sistema de base de datos y si maneja bien la exclusión del límite superior en otros operadores, pero con BETWEEN es inclusivo, así que el inicio del día siguiente NO funcionaría directamente para incluir todo el día anterior). Una forma más segura para incluir todo el día final es:

WHERE fecha_venta BETWEEN '2023-12-01 00:00:00' AND '2023-12-31 23:59:59';

(La precisión exacta de segundos o milisegundos puede variar según el sistema de base de datos). Siempre verifica el formato de fecha/hora esperado por tu base de datos.

BETWEEN con Texto (Strings)

Aunque menos común, BETWEEN también puede usarse con tipos de datos de texto (VARCHAR, TEXT, etc.). En este caso, el rango se basa en el orden alfabético (o el conjunto de caracteres y la intercalación definidos para la columna).

Ejemplo: Encontrar todos los clientes cuyos apellidos comienzan con las letras 'M', 'N', u 'O'.

SELECT id_cliente, nombre, apellido
FROM Clientes
WHERE apellido BETWEEN 'M' AND 'Ozzzzzzzz';

Aquí, 'Ozzzzzzzz' es usado como un límite superior que asegura incluir todos los apellidos que comienzan con 'O'. El valor exacto del límite superior puede depender del conjunto de caracteres y la longitud máxima esperada de los datos.

Combinando BETWEEN con Otros Operadores

Puedes combinar BETWEEN con otros operadores lógicos como AND, OR, y NOT para crear condiciones de filtrado más complejas.

Usando NOT BETWEEN

El operador NOT BETWEEN se utiliza para encontrar registros que *no* están dentro del rango especificado. Es el opuesto lógico de BETWEEN.

Sintaxis:

SELECT nombre_columna(s)
FROM nombre_tabla
WHERE nombre_columna NOT BETWEEN valor_inicial AND valor_final;

Ejemplo: Encontrar todos los productos cuyo precio no está entre 10 y 50.

SELECT id_producto, nombre, precio
FROM Productos
WHERE precio NOT BETWEEN 10 AND 50;

Esto devolverá productos con precio < 10 o > 50.

Combinando con AND/OR

Puedes usar AND u OR para combinar una condición BETWEEN con otras condiciones.

Ejemplo: Encontrar pedidos de un cliente específico realizados en un rango de fechas.

SELECT id_pedido, fecha_pedido, total
FROM Pedidos
WHERE id_cliente = 101 AND fecha_pedido BETWEEN '2023-01-01' AND '2023-12-31';

Ejemplo: Encontrar productos con precio en dos rangos diferentes.

SELECT id_producto, nombre, precio
FROM Productos
WHERE precio BETWEEN 0 AND 10 OR precio BETWEEN 100 AND 200;

BETWEEN vs. Uso de >= y <=

Como mencionamos, una condición usando BETWEEN es lógicamente equivalente a usar `>=` y `<=` combinados con AND. La elección entre uno y otro a menudo se reduce a preferencia personal o a lo que haga la consulta más clara en un contexto particular.

La equivalencia es:

WHERE columna BETWEEN valor1 AND valor2

es lo mismo que

WHERE columna >= valor1 AND columna <= valor2

Ambas formas generalmente tienen un rendimiento similar en la mayoría de los sistemas de bases de datos modernos, ya que el optimizador de consultas las trata de manera equivalente. La ventaja principal de BETWEEN es la concisión y la claridad para expresar una condición de rango simple.

CaracterísticaOperador BETWEENUso con >= y <=
Sintaxiscolumna BETWEEN val1 AND val2columna >= val1 AND columna <= val2
Legibilidad para rangosGeneralmente más altaPuede ser menos directa al leer rápidamente
InclusividadSiempre inclusivo en ambos extremosExplicitamente definible (usando >= y <=)
ConcisiónAlta para rangos simplesMenor, requiere dos operadores y AND
FlexibilidadLimitado a un único rango simplePuede expresar rangos semiabiertos (>, <) o múltiples condiciones más complejas fácilmente

Consideraciones Adicionales

  • Tipos de Datos Consistentes: Asegúrate de que los valores usados en BETWEEN (`valor_inicial` y `valor_final`) sean compatibles con el tipo de dato de la columna. Comparar un número con una fecha, por ejemplo, causará un error o resultados inesperados.
  • Orden de los Valores: Aunque algunas bases de datos pueden ser tolerantes, es una buena práctica y parte del estándar SQL que valor_inicial sea menor o igual que valor_final. Si están invertidos (e.g., `BETWEEN 50 AND 10`), la condición generalmente no devolverá resultados.
  • Valores NULL: Si la columna que estás filtrando contiene valores NULL, estos no serán incluidos en los resultados de una condición BETWEEN (ni tampoco con `>= AND <=`), ya que las comparaciones con NULL son desconocidas. Si necesitas incluir NULLs, debes agregar una condición explícita como `OR columna IS NULL`.

Ejemplos Prácticos Adicionales

Ejemplo 1: Filtrar por Rango de Precios con IVA

Imagina que tienes una tabla de productos y quieres encontrar aquellos cuyo precio *con IVA* (asumiendo un 21% de IVA) está entre 12.10 y 60.50.

SELECT nombre_producto, precio_base
FROM Productos
WHERE (precio_base * 1.21) BETWEEN 12.10 AND 60.50;

Aquí aplicamos una expresión aritmética antes de usar BETWEEN.

Ejemplo 2: Encontrar Empleados Contratados en un Trimestre Específico

Suponiendo que la columna `fecha_contratacion` es de tipo DATE.

SELECT nombre, apellido, fecha_contratacion
FROM Empleados
WHERE fecha_contratacion BETWEEN '2023-07-01' AND '2023-09-30';

Esto selecciona empleados contratados en el tercer trimestre de 2023.

Preguntas Frecuentes sobre BETWEEN

¿Es el operador BETWEEN inclusivo o exclusivo?
Es inclusivo. Siempre incluye tanto el valor inicial como el valor final del rango en los resultados, si coinciden con los datos de la columna.

¿Qué tipos de datos puedo usar con BETWEEN?
Puedes usar BETWEEN con tipos de datos numéricos, de fecha/hora y de texto (strings).

¿Cómo funciona BETWEEN con fechas que incluyen hora?
Funciona con la precisión completa del tipo de dato. BETWEEN '2023-12-01' AND '2023-12-31' en una columna DATETIME incluirá desde el inicio del primer día hasta el inicio del último día. Para incluir todo el último día, debes especificar la hora final (ej: '2023-12-31 23:59:59' o similar, dependiendo de la precisión).

¿Puedo usar NOT BETWEEN?
Sí, puedes usar NOT BETWEEN para seleccionar registros que no caen dentro del rango especificado.

¿Es BETWEEN más rápido que usar >= y <=?
Generalmente no hay una diferencia significativa en el rendimiento. La mayoría de los optimizadores de bases de datos tratan `BETWEEN valor1 AND valor2` y `>= valor1 AND <= valor2` de manera equivalente. La elección suele basarse en la legibilidad.

¿Qué pasa si el valor inicial es mayor que el valor final?
En la mayoría de los sistemas, si valor_inicial es mayor que valor_final, la condición BETWEEN no devolverá ningún resultado, ya que no hay valores que puedan estar simultáneamente mayores o iguales a un número grande Y menores o iguales a un número pequeño.

Conclusión

El operador SQL BETWEEN es una característica valiosa que mejora la claridad y concisión de las consultas al filtrar datos dentro de un rango. Es especialmente útil con datos numéricos y de fecha/hora. Aunque es lógicamente equivalente a una combinación de operadores de comparación (`>=` y `<=`) unidos por un `AND`, su sintaxis dedicada hace que las intenciones del filtro sean inmediatamente claras para quien lee la consulta. Dominar su uso, incluyendo cómo aplicarlo correctamente con diferentes tipos de datos y entender su naturaleza inclusiva, te permitirá escribir consultas SQL más limpias, eficientes y fáciles de mantener.

Si quieres conocer otros artículos parecidos a SQL BETWEEN: Filtra Datos Fácilmente puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir