0Pricing
Coding Interview Prep · Lección

Subconsultas en la cláusula FROM (tablas derivadas)

Convierta una consulta en una tabla virtual y descubra por qué los alias son obligatorios

Subconsultas en la cláusula FROM (tablas derivadas) es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 2 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 una tabla derivada

Una subconsulta en la cláusula FROM se denomina tabla derivada (o vista en línea). En lugar de devolver un único valor, devuelve un conjunto de resultados completo que la consulta externa trata como si fuera una tabla real.

  • Puede tener muchas filas y muchas columnas.
  • Puede consultarla, combinarla y filtrarla como cualquier tabla.

Los entrevistadores utilizan las tablas derivadas para comprobar si puede dividir un problema en varias etapas.

Los alias son obligatorios

El principal escollo: una tabla derivada debe tener un alias. Sin uno, la mayoría de los motores rechaza la consulta.

  • MySQL: Every derived table must have its own alias.
  • Postgres: subquery in FROM must have an alias.

Asígnele un nombre (aquí dept_avg) y podrá hacer referencia a sus columnas mediante ese nombre.

SELECT dept_avg.dept_id, dept_avg.avg_salary
FROM (
  SELECT dept_id, AVG(salary) AS avg_salary
  FROM employees
  GROUP BY dept_id
) AS dept_avg;

Por qué preagregar en una tabla derivada

Un problema frecuente en las entrevistas es: muestre cada empleado junto al salario medio de su departamento. No se puede mezclar directamente la fila de detalle con una función de agregación sin encontrarse con problemas de agrupación.

El enfoque más claro consiste en calcular la media por departamento en una tabla derivada y después volver a combinarla con las filas de detalle. La tabla derivada se reduce primero a una fila por departamento.

SELECT e.name, e.salary, d.avg_salary
FROM employees e
JOIN (
  SELECT dept_id, AVG(salary) AS avg_salary
  FROM employees
  GROUP BY dept_id
) AS d ON e.dept_id = d.dept_id;

Filtrar según un resultado de agregación

Las tablas derivadas permiten filtrar según un agregado calculado sin complicar la consulta externa con HAVING. Supongamos que solo queremos los departamentos cuya media salarial supera 60000.

Agregamos dentro y después aplicamos un WHERE normal a la columna derivada fuera. Para la consulta externa, avg_salary es una columna ordinaria.

SELECT dept_id, avg_salary
FROM (
  SELECT dept_id, AVG(salary) AS avg_salary
  FROM employees
  GROUP BY dept_id
) AS d
WHERE avg_salary > 60000;

Dos niveles de agregación

Las tablas derivadas resultan especialmente útiles cuando necesita un agregado de otro agregado — una pregunta clásica de entrevista: ¿cuál es la media de los salarios medios por departamento?

No puede anidar directamente AVG(AVG(...)). La consulta interna produce una media por departamento; la consulta externa calcula la media de esas medias.

SELECT AVG(avg_salary) AS avg_of_dept_avgs
FROM (
  SELECT dept_id, AVG(salary) AS avg_salary
  FROM employees
  GROUP BY dept_id
) AS d;

Asignar nombres a las columnas calculadas

Cualquier expresión de una tabla derivada necesita un alias si desea hacer referencia a ella fuera. De lo contrario, salary * 12 tendría un nombre asignado por la base de datos en el que no se puede confiar.

Asigne siempre alias a las columnas calculadas — los entrevistadores se dan cuenta cuando hace referencia a una expresión sin alias y supone un nombre de columna que quizá no exista.

SELECT name, annual_salary
FROM (
  SELECT name, salary * 12 AS annual_salary
  FROM employees
) AS yearly
WHERE annual_salary > 100000;

Combinar dos tablas derivadas

Puede combinar varias tablas derivadas. Aquí comparamos el número de empleados de cada departamento con su nómina total uniendo dos subconsultas preagregadas.

Cada tabla derivada responde a una subpregunta; la unión las integra en el informe final. Este planteamiento por etapas es exactamente lo que se valora en las entrevistas de nivel intermedio.

SELECT c.dept_id, c.headcount, p.payroll
FROM (
  SELECT dept_id, COUNT(*) AS headcount
  FROM employees GROUP BY dept_id
) AS c
JOIN (
  SELECT dept_id, SUM(salary) AS payroll
  FROM employees GROUP BY dept_id
) AS p ON c.dept_id = p.dept_id;

Ámbito: la consulta externa no puede ver el interior

Una regla importante: la consulta externa solo puede hacer referencia a las columnas que la tabla derivada expone en su lista SELECT. Las columnas utilizadas únicamente dentro de la subconsulta son invisibles desde fuera.

Si la consulta interna selecciona dept_id y avg_salary, entonces salary o name no están disponibles fuera — la agregación las consumió. Los entrevistadores exploran este límite de ámbito.

SELECT dept_id, avg_salary
FROM (
  SELECT dept_id, AVG(salary) AS avg_salary
  FROM employees GROUP BY dept_id
) AS d;

Tabla derivada frente a CTE

Una tabla derivada y una expresión de tabla común (CTE) suelen generar el mismo plan. Los entrevistadores pueden preguntar por qué elegiría una u otra:

  • Tabla derivada: integrada en línea, adecuada para un uso puntual.
  • CTE (WITH): con nombre al principio, legible y reutilizable si se referencia varias veces.

Para una lógica muy anidada, una secuencia de CTE se lee de arriba abajo; una tabla derivada se lee de dentro hacia fuera.

WITH dept_avg AS (
  SELECT dept_id, AVG(salary) AS avg_salary
  FROM employees GROUP BY dept_id
)
SELECT * FROM dept_avg WHERE avg_salary > 60000;

LATERAL / subconsulta correlacionada en FROM

Normalmente, una subconsulta de FROM no puede hacer referencia a las filas de la consulta externa. LATERAL (Postgres) o CROSS APPLY (SQL Server) elimina esa restricción y permite que la tabla derivada se ejecute para cada fila externa.

Esto permite realizar búsquedas top-N por fila. Conocer la existencia de esta palabra clave demuestra una visión propia de un perfil sénior incluso en una entrevista de nivel intermedio.

SELECT d.dept_name, top_emp.name, top_emp.salary
FROM departments d
CROSS JOIN LATERAL (
  SELECT name, salary FROM employees e
  WHERE e.dept_id = d.id
  ORDER BY salary DESC LIMIT 1
) AS top_emp;

Respuesta breve para entrevistas

Si le preguntan por las subconsultas en la cláusula FROM, diga: «Una tabla derivada es una subconsulta en FROM que devuelve un conjunto de resultados que la consulta externa utiliza como si fuera una tabla. Debe tener un alias; la consulta externa solo puede ver las columnas que selecciona y es ideal para hacer una preagregación antes de una combinación o para agregar sobre una agregación.»

Añada que LATERAL permite hacer referencia a las filas externas y habrá cubierto todos los aspectos.

Comprobación rápida

Seleccione la afirmación que siempre es necesaria para una subconsulta en la cláusula FROM.

Repaso

Tablas derivadas, conceptos claros:

  • Una subconsulta en FROM devuelve una tabla virtual — muchas filas y muchas columnas.
  • Debe tener un alias; la consulta externa solo ve las columnas que selecciona.
  • Úsela para hacer una preagregación antes de una combinación, filtrar por valores agregados o agregar sobre una agregación.
  • Una CTE es la alternativa con nombre y más legible; LATERAL/CROSS APPLY permiten hacer referencia a las filas externas.

A continuación: subconsultas de pertenencia a conjuntos con IN, ANY y ALL.

Preguntas frecuentes

¿La lección «Subconsultas en la cláusula FROM (tablas derivadas)» es gratis?

Sí — el texto completo de «Subconsultas en la cláusula FROM (tablas derivadas)» 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 «Subconsultas en la cláusula FROM (tablas derivadas)»?

Convierta una consulta en una tabla virtual y descubra por qué los alias son obligatorios 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 2 de 4.

¿Cuánto tiempo toma la lección «Subconsultas en la cláusula FROM (tablas derivadas)»?

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. Subconsultas escalares en SELECT y WHERE
  2. Subconsultas en la cláusula FROM (tablas derivadas)
  3. Subconsultas IN, ANY y ALL
  4. Rendimiento de EXISTS frente a IN
← Volver a Coding Interview Prep