🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

Lección 9.3: Tablas Temporales

En la lección anterior, discutimos cómo crear tablas con CREATE TABLE. Ahora veamos un tipo especial de tabla: tablas temporales. Ayudan a almacenar datos intermedios dentro de una sesión o transacción y se utilizan a menudo en consultas analíticas, procesos ETL y procesamiento de datos en múltiples pasos.

A diferencia de las tablas regulares, las tablas temporales no están destinadas al almacenamiento permanente de datos. Se crean por un período limitado y luego se eliminan automáticamente o se vuelven no disponibles después de que finaliza la sesión.

Tablas Temporales

¿Qué es una Tabla Temporal?

Una tabla temporal es una tabla creada para el almacenamiento de datos a corto plazo mientras un usuario está trabajando o un script se está ejecutando.

Estas tablas son típicamente:

  • disponibles solo dentro de la conexión o transacción actual;
  • utilizadas para cálculos intermedios;
  • útiles para dividir lógica compleja en varios pasos más claros;
  • útiles cuando necesitas reutilizar un resultado intermedio en múltiples consultas.

En muchos SGBD, las tablas temporales se crean utilizando la palabra clave TEMPORARY o TEMP.

Sintaxis Básica

Una forma común de crear una tabla temporal se ve así:

CREATE TEMPORARY TABLE table_name (
    column1 data_type,
    column2 data_type,
    column3 data_type
);

Después de eso, puedes trabajar con la tabla temporal casi como con una regular: insertar datos, seleccionar de ella, actualizar filas y eliminar filas.

Ejemplo: Creando una Tabla Temporal

Supongamos que queremos almacenar una lista de clientes que realizaron más de 30 pagos:

CREATE TEMPORARY TABLE active_customers AS
SELECT customer_id, COUNT(*) AS payment_count
FROM payment
GROUP BY customer_id
HAVING COUNT(*) > 30;

Ahora podemos usar esta tabla temporal en consultas posteriores:

SELECT ac.customer_id, ac.payment_count, c.first_name, c.last_name
FROM active_customers ac
JOIN customer c ON ac.customer_id = c.customer_id
ORDER BY ac.payment_count DESC;

Resultado: obtenemos una lista de clientes activos y podemos reutilizar el conjunto de datos ya preparado sin volver a ejecutar la agregación original.


Cómo se Diferencia una Tabla Temporal de una Tabla Regular

Aunque las tablas temporales y las tablas regulares son estructuralmente similares, hay varias diferencias importantes.

1. Duración de Vida

  • Una tabla regular permanece en la base de datos de forma permanente hasta que la elimines explícitamente.
  • Una tabla temporal existe por un tiempo limitado, generalmente hasta el final de una sesión o transacción.

2. Propósito

  • Una tabla regular se utiliza para el almacenamiento permanente de datos comerciales.
  • Una tabla temporal se utiliza para datos intermedios, técnicos o preparatorios.

3. Alcance de Visibilidad

  • Una tabla regular está disponible para todos los usuarios con los permisos requeridos.
  • Una tabla temporal generalmente es visible solo dentro de la conexión actual.

4. Uso Práctico

  • Una tabla regular almacena clientes, pedidos, productos, pagos y otra información central.
  • Una tabla temporal almacena resultados de filtrado intermedio, agregación o preparación de datos para un informe.

Cuándo Son Especialmente Útiles las Tablas Temporales

Utiliza tablas temporales cuando:

  • una consulta es demasiado compleja y es más fácil dividirla en etapas;
  • se necesita el mismo resultado intermedio más de una vez;
  • necesitas almacenar temporalmente datos limpios o agregados;
  • deseas simplificar la legibilidad y el mantenimiento de un script SQL.

Por ejemplo, puedes primero construir una tabla temporal con películas seleccionadas y luego calcular métricas solo para ellas.

CREATE TEMPORARY TABLE expensive_films AS
SELECT film_id, title, rental_rate
FROM film
WHERE rental_rate >= 4.00;

SELECT COUNT(*) AS film_count, AVG(rental_rate) AS avg_rate
FROM expensive_films;

Resultado: la lógica se divide en dos pasos claros, preparación de datos y análisis.


Tabla Temporal vs. CTE Regular

En algunos casos, puedes usar un CTE (WITH) en lugar de una tabla temporal. La diferencia es que:

  • un CTE existe solo dentro de una única consulta;
  • una tabla temporal puede ser utilizada en múltiples consultas durante una sesión;
  • un CTE es conveniente para lógica compacta dentro de una declaración SQL;
  • una tabla temporal es conveniente cuando el resultado intermedio debe ser reutilizado.

Si un resultado se necesita solo una vez, un CTE a menudo es más simple. Si se necesita en múltiples pasos, una tabla temporal suele ser más conveniente.


Qué Tener en Cuenta

Al trabajar con tablas temporales, es útil tener en cuenta algunas reglas:

  • no las uses donde una consulta simple sea suficiente;
  • da a las tablas temporales nombres claros que reflejen su propósito;
  • presta atención a cuándo se elimina la tabla en tu SGBD;
  • no mantengas datos en tablas temporales más tiempo del necesario;
  • verifica las especificidades de sintaxis en tu SGBD, ya que el comportamiento de TEMPORARY TABLE puede diferir.

Cuando se utilizan bien, una tabla temporal hace que SQL complejo sea más legible y manejable.


Ejemplo Práctico

Imagina que necesitamos encontrar clientes que alquilaron películas de la categoría Acción y luego construir un informe separado para ellos.

CREATE TEMPORARY TABLE action_customers AS
SELECT DISTINCT r.customer_id
FROM rental r
JOIN inventory i      ON r.inventory_id = i.inventory_id
JOIN film_category fc ON i.film_id = fc.film_id
JOIN category c       ON fc.category_id = c.category_id
WHERE c.name = 'Action';

SELECT ac.customer_id, cu.first_name, cu.last_name
FROM action_customers ac
JOIN customer cu ON ac.customer_id = cu.customer_id
ORDER BY cu.last_name, cu.first_name;

Este enfoque es especialmente conveniente si, después de esta lista, necesitas ejecutar varias consultas analíticas adicionales.


Puntos clave de esta lección:

  • Las tablas temporales se utilizan para el almacenamiento a corto plazo de datos intermedios.
  • Generalmente existen solo dentro de la sesión o transacción actual.
  • En sintaxis y uso, son similares a las tablas regulares, pero no están destinadas al almacenamiento permanente de datos.
  • Las tablas temporales son especialmente útiles en consultas complejas de múltiples pasos y escenarios analíticos.
  • Si un resultado intermedio se necesita en solo una consulta, un CTE puede ser una mejor opción.

En la próxima lección, veremos cómo las tablas temporales se diferencian de las vistas y cuándo es mejor usar cada una de estas herramientas.