Databases
T01-009-02 Composiciones internas con JOIN
Enunciado
CROSS JOINCreará un producto cartesiano de las filas de ambas tablas por lo que podemos olvidarnos de la cláusula
WHERE.Se puede utilizar, por ejemplo, para comparar valores que están en distintas filas.
Ejemplo:
¿Qué empleados cobran más del doble de algún de los empleados del departamento 80?
SELECT
BIENPAGADO.LAST_NAME AS "APELLIDO BIENPAGADO",
BIENPAGADO.SALARY AS "SALARIO BIENPAGADO",
MALPAGADO.LAST_NAME AS "APELLIDO MALPAGADO",
MALPAGADO.SALARY AS "SALARIO MALPAGADO"
FROM HR.employees BIENPAGADO CROSS JOIN HR.employees MALPAGADO
WHERE BIENPAGADO.SALARY >= MALPAGADO.SALARY * 2 AND MALPAGADO.DEPARTMENT_ID = 80
ORDER BY MALPAGADO.LAST_NAME
APELLIDO BIENPAGADO SALARIO BIENPAGADO APELLIDO MALPAGADO SALARIO MALPAGADO King 24000 Abel 11000 Russell 14000 Ande 6400 De Haan 17000 Ande 6400 Kochhar 17000 Ande 6400 King ... ... ... Debemos fijarnos en que, como hemos utilizado dos veces la misma tabla, debemos crearle un alias por cada uso que hacemos de ella para poder referirnos correctamente a los atributos cuyos valores queremos utilizar.
Ejercicio
¿Que empleado, que tiene como jefe (MANAGER_ID) al empleado 100, tiene una comisión del doble o más que alguno de los compañeros que tienen ese mismo jefe?
Tipo
Solución
SELECT
BIENPAGADO.LAST_NAME AS "APELLIDO BIENPAGADO",
BIENPAGADO.COMMISSION_PCT AS "COMISION BIENPAGADO",
MALPAGADO.LAST_NAME AS "APELLIDO MALPAGADO",
MALPAGADO.COMMISSION_PCT AS "COMISION MALPAGADO"
FROM HR.employees BIENPAGADO CROSS JOIN HR.employees MALPAGADO
WHERE BIENPAGADO.COMMISSION_PCT >= MALPAGADO.COMMISSION_PCT * 2
AND MALPAGADO.MANAGER_ID = 100
AND BIENPAGADO.MANAGER_ID = 100
ORDER BY MALPAGADO.LAST_NAME
Prueba
LibrerÃas (Onfly databases)

