0Pricing
Coding Interview Prep · Lección

Escribir su primer CTE

Conozca la sintaxis básica de WITH y cuándo un CTE mejora la legibilidad frente a una subconsulta

Escribir su primer CTE es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Coding Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Coding Interview Prep incluye 4 lecciones en total.

Qué es realmente una CTE

Una expresión de tabla común (CTE) es un conjunto de resultados temporal con nombre, definido con la palabra clave WITH, que existe únicamente durante una sola consulta. A los entrevistadores les encantan las CTE porque revelan si sabe estructurar la lógica con claridad.

Piense en una CTE como una forma de poner nombre a una subconsulta para poder referenciarla como una tabla en la sentencia principal que aparece a continuación. No crea un objeto permanente y desaparece en cuanto termina la consulta.

Sintaxis básica de WITH

Cada CTE comienza con WITH, un nombre, la palabra clave AS y una consulta entre paréntesis. Después del paréntesis de cierre, escriba una sentencia normal que use la CTE por su nombre.

  • WITH cte_name AS ( ... ) define el bloque.
  • La consulta que aparece justo después del paréntesis es la consulta principal.
  • El nombre de la CTE se comporta como una tabla desde la que puede hacer SELECT.
WITH recent_orders AS (
    SELECT *
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT *
FROM recent_orders;

¿Por qué no usar simplemente una subconsulta?

La misma lógica puede escribirse como una subconsulta en línea en la cláusula FROM. Entonces, ¿por qué los entrevistadores preguntan por las CTE?

  • Legibilidad: un paso con nombre se lee de arriba abajo como una receta.
  • Reutilización: puede referenciar la misma CTE varias veces en lugar de repetir una subconsulta.
  • Depuración: puede hacer SELECT únicamente sobre la CTE para inspeccionarla.

La respuesta correcta en una entrevista suele ser: use una CTE cuando haga que la consulta sea más fácil de leer y mantener.

Ejemplo práctico: filtrar y después agregar

Suponga que la pregunta es: encuentre los ingresos totales de los pedidos realizados este año. Una CTE permite aislar el paso de filtrado y después agregar sobre el resultado con nombre.

La consulta principal trata recent_orders como si fuera una tabla real, lo que mantiene la agregación clara y evidente.

WITH recent_orders AS (
    SELECT amount
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT SUM(amount) AS total_revenue
FROM recent_orders;

Asignación de nombres a las columnas de salida

Puede cambiar el nombre de las columnas que expone una CTE enumerándolas justo después del nombre de la CTE. Esto resulta útil cuando la consulta interna produce expresiones o cuando desea nombres más claros en los pasos posteriores.

Si proporciona una lista de columnas, debe coincidir con el número de columnas que devuelve la consulta interna; de lo contrario, la base de datos generará un error.

WITH revenue (region, total) AS (
    SELECT region, SUM(amount)
    FROM orders
    GROUP BY region
)
SELECT region, total
FROM revenue
ORDER BY total DESC;

Una CTE no es más que una consulta con nombre

Un modelo mental que impresiona a los entrevistadores: una CTE equivale lógicamente a sustituir su definición en línea. La base de datos puede decidir integrarla en línea o materializarla, pero semánticamente el resultado es el mismo que si pegara la subconsulta.

Esto significa que todo lo que sea válido en un SELECT normal también lo es dentro de una CTE: JOIN, GROUP BY, WHERE, funciones de ventana y mucho más.

Ejemplo más avanzado: una CTE con un JOIN

Las CTE resultan especialmente útiles cuando necesita preparar de antemano un lado de un JOIN. Aquí construimos primero un recuento de pedidos por cliente y después lo unimos de nuevo a la tabla de clientes para que cada fila de cliente incluya su total.

Observe cómo la consulta principal se lee casi como una frase: desde los clientes, una sus respectivos recuentos de pedidos.

WITH order_counts AS (
    SELECT customer_id, COUNT(*) AS num_orders
    FROM orders
    GROUP BY customer_id
)
SELECT c.name, oc.num_orders
FROM customers c
JOIN order_counts oc
    ON oc.customer_id = c.id;

Dónde se encuentra una CTE en la consulta

El bloque WITH debe aparecer antes de la sentencia que lo utiliza. La CTE solo está disponible para la única sentencia que sigue inmediatamente a su definición.

  • No puede referenciar una CTE en una consulta posterior e independiente.
  • Una CTE definida para un SELECT no puede reutilizarse en otro SELECT ejecutado después.
  • El ámbito termina con el punto y coma que finaliza la sentencia.

Las CTE funcionan con INSERT, UPDATE y DELETE

Una pregunta de seguimiento frecuente: las CTE no se limitan a SELECT. En la mayoría de las bases de datos modernas también puede asociar una cláusula WITH a sentencias de modificación de datos.

Esto permite calcular una vez un conjunto de filas y después operar sobre él, lo que resulta mucho más claro que una subconsulta anidada dentro de la cláusula WHERE.

WITH stale AS (
    SELECT id
    FROM sessions
    WHERE last_seen < NOW() - INTERVAL '30 days'
)
DELETE FROM sessions
WHERE id IN (SELECT id FROM stale);

Errores comunes de principiantes

Los entrevistadores prestan atención a estos fallos:

  • Olvidar la consulta principal después de la CTE; un bloque WITH por sí solo no es una sentencia completa.
  • Poner un punto y coma entre la CTE y la consulta principal.
  • Esperar que la CTE persista entre varias sentencias.
  • Hacer que la lista opcional de nombres de columna no coincida con las columnas de la consulta interna.

Cómo hablar de las CTE en una entrevista

Cuando le pidan refactorizar una subconsulta complicada, explique su razonamiento: Voy a extraer esta subconsulta de filtrado a una CTE llamada recent_orders para que la agregación se lea con claridad.

Demostrar que elige las CTE por su claridad y reutilización, y no de forma automática, transmite madurez de nivel intermedio. Mencione que una CTE no hace que una consulta sea más rápida por sí misma; su principal valor es la legibilidad.

Comprobación rápida

Compruebe su comprensión de la sintaxis y el ámbito básicos de los CTE.

Repaso: su primer CTE

Ha aprendido que un CTE utiliza WITH name AS ( ... ) para asignar un nombre a un conjunto de resultados temporal y después hacer referencia a él como a una tabla en la instrucción siguiente.

  • Los CTE mejoran la legibilidad, la reutilización y la facilidad de depuración frente a las subconsultas insertadas directamente.
  • Su ámbito se limita a una sola instrucción; después desaparecen.
  • Funcionan con SELECT y también con INSERT/UPDATE/DELETE.
  • No mejoran el rendimiento por sí solos.

A continuación: encadenar varios CTE en un flujo.

Preguntas frecuentes

¿La lección «Escribir su primer CTE» es gratis?

Sí — el texto completo de «Escribir su primer CTE» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Coding Interview Prep, actualiza a CoddyKit PRO. El curso de Coding Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Escribir su primer CTE»?

Conozca la sintaxis básica de WITH y cuándo un CTE mejora la legibilidad frente a una subconsulta Practicas Coding Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Coding Interview Prep?

No se requiere experiencia previa. Coding Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Escribir su primer CTE»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Coding Interview Prep?

Sí. Cada lección de Coding Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Escribir su primer CTE
  2. Encadenar varios CTE
  3. CTE frente a subconsulta frente a tabla temporal
  4. Refactorizar consultas anidadas en CTE
← Volver a Coding Interview Prep