Databases
T01-009-03 Composiciones externas
Enunciado
En ocasiones, en una consulta multitabla, nos interesará mostrar registros de una de las tablas aunque no esten relacionados con ningún registro de la segunda tabla. En esas ocasiones utilizaremos las composiciones externas.
SELECT tabla1.columna1, tabla1.columna2, …, tabla2.columna1, tabla2.columna2, …
FROM tabla1
[LEFT | RIGHT | FULL OUTER JOIN tabla2 ON (tabla1.columna=tabla2.columna)];
LEFT | RIGHT | FULL JOINEn función de la cláusula que acompañe al
JOIN, se mostrarán todos los registros de la tabla de la izquierda o derecha que cumplan las restricciones, aunque no tengan ningún registro relacionado en la otra tabla.Ejemplo:
En el siguiente ejemplo, vamos a intentar demostrar los cambios que se producen por la utilización de
LEFToRIGHT JOINen una consulta.Comenzaremos haciendo una consulta en la que se muestren los países cuyo nombre comienza por 'N'.
SELECT *
FROM HR.COUNTRIES
WHERE COUNTRY_NAME LIKE 'N%'
COUNTRY_ID COUNTRY_NAME REGION_ID NG Nigeria 4 NL Netherlands 1 Podemos observar que hay 2 países que cumplen esa restricción. Sin embargo, si ese resultado lo combinamos, mediante una composición interna, con los registros relacionados de la tabla HR.locations, la información correspondiente a Nigeria desaparece, al no existir ningún registro en la tabla locations que esté situado en ese país.
SELECT COUNTRY_NAME, STREET_ADDRESS
FROM HR.LOCATIONS JOIN HR.COUNTRIES USING (COUNTRY_ID)
WHERE COUNTRY_NAME LIKE 'N%'
COUNTRY_NAME STREET_ADDRESS Netherlands Pieter Breughelstraat 837 El resultado cambia, si simplemente añadimos la cláusula
RIGHTantes delJOIN, haciendo que reaparezca Nigeria aunque no tenga ningún registro de la tabla locations relacionado. Observa que utilizamosRIGHTporque la tabla de países se nombra a laDERECHAdelJOIN.
SELECT COUNTRY_NAME, STREET_ADDRESS
FROM HR.LOCATIONS RIGHT JOIN HR.COUNTRIES USING (COUNTRY_ID)
WHERE COUNTRY_NAME LIKE 'N%'
COUNTRY_NAME STREET_ADDRESS Nigeria - Netherlands Pieter Breughelstraat 837 Ejercicio
Muestra las direcciones (HR.locations) que se encuentran en el país cuyo código es 'UK', junto con los nombres de los departamentos que se encuentran en dicha dirección, en el caso de que algún departamento se encuentre en dicha dirección.
Ordena el resultado alfabéticamente por la ciudad.
Tipo
Solución
SELECT COUNTRY_ID, STREET_ADDRESS, CITY, DEPARTMENT_NAME
FROM HR.DEPARTMENTS RIGHT JOIN HR.LOCATIONS USING (LOCATION_ID)
WHERE COUNTRY_ID = 'UK'
ORDER BY CITY
Prueba
LibrerÃas (Onfly databases)

