0Pricing
SQL Academy · Lección

Empleados y responsables

Un ejemplo clásico de jerarquía

Empleados y responsables es una lección gratuita de SQL Academy 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 SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué es una autounión?

Una autounión consiste en unir una tabla consigo misma. Puede parecer extraño, pero resulta extremadamente útil cuando las filas de una tabla tienen una relación con otras filas de esa misma tabla.

El ejemplo clásico es una tabla employees en la que cada empleado puede tener un gerente, y ese gerente también es un empleado almacenado en la misma tabla.

La tabla employees

Vamos a crear una tabla sencilla de employees. Cada empleado tiene un id, un name y un manager_id que apunta a otra fila de la misma tabla.

Cuando manager_id es NULL, el empleado no tiene gerente: se encuentra en la parte superior de la jerarquía (por ejemplo, el CEO).

CREATE TABLE employees (
  id         INT PRIMARY KEY,
  name       VARCHAR(100) NOT NULL,
  manager_id INT REFERENCES employees(id)
);

Insertar datos de ejemplo

Vamos a rellenar la tabla con una pequeña jerarquía empresarial. Alice es la CEO (no tiene gerente). Bob y Carol reportan a Alice. Dave y Eve reportan a Bob.

INSERT INTO employees (id, name, manager_id) VALUES
  (1, 'Alice',   NULL),
  (2, 'Bob',     1),
  (3, 'Carol',   1),
  (4, 'Dave',    2),
  (5, 'Eve',     2),
  (6, 'Frank',   3);

Consultar sin una unión

Si simplemente seleccionamos todas las filas, vemos los valores numéricos sin procesar de manager_id, pero no los nombres de los gerentes. Esto resulta difícil de leer y no es útil para los usuarios finales.

SELECT id, name, manager_id
FROM employees;

Escribir la autounión

Para mostrar el nombre del gerente junto a cada empleado, unimos la tabla employees consigo misma. Asignamos un alias diferente a cada copia: e para el empleado y m para el gerente.

La condición de unión vincula el manager_id del empleado con el id del gerente.

SELECT
  e.name   AS employee,
  m.name   AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;

Incluir empleados sin gerente

El INNER JOIN anterior oculta a Alice porque su manager_id es NULL: no hay ninguna fila coincidente en el lado derecho. Para incluir a todos, incluso al empleado de nivel superior, use un LEFT JOIN.

Alice aparecerá con NULL en la columna del gerente.

SELECT
  e.name              AS employee,
  m.name              AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

Usar COALESCE para mejorar la legibilidad

Un valor NULL en la columna del gerente puede resultar confuso. Puede usar COALESCE para reemplazar NULL por una etiqueta legible como 'Sin gerente', lo que hace que el resultado sea más claro en los informes.

SELECT
  e.name                              AS employee,
  COALESCE(m.name, 'No Manager')      AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
ORDER BY manager, employee;

Buscar subordinados directos

Podemos invertir la consulta para preguntar: ¿quién reporta a un gerente específico? Esto se denomina buscar subordinados directos. Aquí buscamos todos los empleados que reportan directamente a Alice (id = 1).

SELECT e.name AS direct_report
FROM employees e
WHERE e.manager_id = 1;

Contar los subordinados por gerente

Combinar una autounión con GROUP BY y COUNT permite ver cuántos subordinados directos tiene cada gerente. Esto resulta útil para analizar la carga de trabajo.

SELECT
  m.name          AS manager,
  COUNT(e.id)     AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;

Dos niveles de profundidad

Para ver dos niveles de la jerarquía a la vez —el empleado, su gerente y el gerente de su gerente— podemos unir la tabla una tercera vez. Cada unión añade otro nivel de la jerarquía.

SELECT
  e.name   AS employee,
  m.name   AS manager,
  gm.name  AS grand_manager
FROM employees e
LEFT JOIN employees m  ON e.manager_id  = m.id
LEFT JOIN employees gm ON m.manager_id  = gm.id;

Cuándo tienen límites las autouniones

Las autouniones funcionan bien para jerarquías fijas y poco profundas (de 1 a 3 niveles). Si la profundidad es desconocida o ilimitada, como en un organigrama empresarial que puede tener 10 niveles, necesita CTE recursivas.

Para la mayoría de las consultas prácticas sobre empleados y gerentes, el enfoque de autounión explicado en esta lección es la herramienta adecuada.

Comprobación rápida

Compruebe que entiende las autouniones y la jerarquía de empleados y gerentes.

Resumen de la lección

En esta lección ha aprendido a usar una autounión para modelar y consultar una jerarquía clásica de empleados y gerentes almacenada en una sola tabla.

Ideas clave:

  • Una autounión une una tabla consigo misma mediante dos alias diferentes.
  • La condición de unión vincula manager_id con id en la misma tabla.
  • Use INNER JOIN para ver solo los empleados que tienen gerente y LEFT JOIN para incluirlos a todos.
  • COALESCE puede reemplazar los valores NULL del gerente por una etiqueta legible.
  • Para jerarquías de profundidad ilimitada, considere usar CTE recursivas.

Preguntas frecuentes

¿La lección «Empleados y responsables» es gratis?

Sí — el texto completo de «Empleados y responsables» 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 SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Empleados y responsables»?

Un ejemplo clásico de jerarquía Practicas SQL Academy 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 SQL Academy?

No se requiere experiencia previa. SQL Academy 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 «Empleados y responsables»?

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 SQL Academy?

Sí. Cada lección de SQL Academy 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. Qué es un self join
  2. Empleados y responsables
  3. Comparación de filas de la misma tabla
  4. Limitaciones de los self joins
← Volver a SQL Academy