Databases

T01-009-02 Composiciones internas con JOIN

Enunciado

CROSS JOIN

Creará 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

SELECT

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)