Esquema y datos
EMPLEADO(id, nombre, salario, depto)
| id | nombre | salario | depto |
|---|
| E1 | Ana Ruiz | 3500 | D1 |
| E2 | Luis Mesa | 2800 | D1 |
| E3 | Sara Díaz | 4200 | D2 |
| E4 | Juan Soto | 3100 | D1 |
| E5 | Elena Gil | 2500 | D3 |
DEPARTAMENTO(depto, nomdepto, ciudad)
| depto | nomdepto | ciudad |
|---|
| D1 | Ventas | Medellín |
| D2 | IT | Bogotá |
| D3 | Marketing | Cali |
El atributo depto de EMPLEADO es una clave ajena hacia DEPARTAMENTO, y es el
único atributo con el mismo nombre en ambas relaciones.
Enunciado
Escriba, usando álgebra relacional, una expresión que devuelva el nombre de
los empleados que trabajan en el departamento “Ventas” y ganan más de 3000.
- Escriba la expresión combinando selección (σ), proyección (π) y
concatenación natural (⋈).
- Muestre la relación intermedia que produce cada operador.
- Indique el resultado final.
Solución rápida — la idea clave sin formalismo
La idea clave
Los datos que necesitas están repartidos en dos tablas: el salario en EMPLEADO
y el nombre del departamento en DEPARTAMENTO. Entonces el plan es:
- Unir las dos tablas por su atributo común
depto (join natural ⋈).
- Filtrar con σ las filas donde el departamento es “Ventas” y el
salario es mayor a 3000.
- Quedarte solo con la columna
nombre usando π.
πnombre(σnomdepto=’Ventas’∧salario>3000(EMPLEADO⋈DEPARTAMENTO))
Truco para recordar el orden: primero junto, después filtro, al final elijo
columnas. Resultado: Ana Ruiz y Juan Soto.
Explicación completa — paso a paso, con visualizaciones
Expresión en álgebra relacional
πnombre(σnomdepto=’Ventas’∧salario>3000(EMPLEADO⋈DEPARTAMENTO))
La consulta necesita datos de dos relaciones (el salario está en EMPLEADO y el
nombre del departamento en DEPARTAMENTO), así que primero las combinamos y luego
filtramos y proyectamos.
Paso a paso
- Join natural EMPLEADO⋈DEPARTAMENTO. Como el único
atributo con el mismo nombre en ambas relaciones es
depto, el join natural
empareja cada empleado con la fila de su departamento por ese atributo (sin
duplicar la columna depto).
- Selección σnomdepto=’Ventas’∧salario>3000.
Sobre la relación combinada conservamos solo las tuplas de “Ventas” con salario
mayor a 3000. Luis Mesa se descarta por salario (2800); Sara Díaz y Elena Gil,
por departamento.
- Proyección πnombre. Nos quedamos únicamente con la columna
nombre
(la proyección también elimina tuplas duplicadas).
Evaluación interactiva
Avance paso a paso para ver cómo se transforma la relación con cada operador:
Resultado
Optimización: empujar la selección
El plan anterior une todo y luego filtra. Una expresión equivalente más
eficiente aplica cada selección antes del join (regla de selection
pushdown), reduciendo el tamaño de las relaciones que se combinan:
πnombre(σsalario>3000(EMPLEADO)⋈σnomdepto=’Ventas’(DEPARTAMENTO))
Ambas expresiones producen exactamente el mismo resultado; el álgebra relacional
permite reordenar estos operadores porque la selección es conmutativa con el
join cuando los predicados afectan a cada relación por separado.