Unión externa completa
Una unión externa completa es un método para combinar tablas de modo que el resultado incluya filas no coincidentes de ambas tablas.
Si se une a dos tablas y desea que el conjunto de resultados incluya filas no coincidentes de ambas tablas, utilice una cláusula FULL OUTER JOIN. El cotejo se basa en la condición de unión. Si alguna columna de la tabla de resultados no tiene un valor, esa columna tiene el valor nulo en la tabla de resultados.
La condición de unión para una unión externa completa debe ser una condición de búsqueda simple que compare dos columnas o una invocación de una función de conversión que tenga un nombre de columna como argumento.
Ejemplos de uniones exteriores completas
Para este ejemplo, supongamos que las tablas PARTES y PRODUCTOS contienen las siguientes filas:
PARTS table PRODUCTS table
PART PROD# SUPPLIER PROD# PRODUCT PRICE
======= ===== ============ ===== =========== =====
WIRE 10 ACWF 505 SCREWDRIVER 3.70
OIL 160 WESTERN_CHEM 30 RELAY 7.55
MAGNETS 10 BATEMAN 205 SAW 18.90
PLASTIC 30 PLASTIK_CORP 10 GENERATOR 45.75
BLADES 205 ACE_STEEL
La siguiente consulta realiza una unión externa completa de las tablas PARTES y PRODUCTOS:
SELECT PART, SUPPLIER, PARTS.PROD#, PRODUCT
FROM PARTS FULL OUTER JOIN PRODUCTS
ON PARTS.PROD# = PRODUCTS.PROD#;
La tabla de resultados de la consulta tiene un aspecto similar al siguiente:
PART SUPPLIER PROD# PRODUCT
======= ============ ===== ==========
WIRE ACWF 10 GENERATOR
MAGNETS BATEMAN 10 GENERATOR
PLASTIC PLASTIK_CORP 30 RELAY
BLADES ACE_STEEL 205 SAW
OIL WESTERN_CHEM 160 -----------
------- ------------ --- SCREWDRIVER
Ejemplo de unión externa completa utilizando COALESCE o VALUE
COALESCE es la palabra clave que especifica el estándar SQL como sinónimo de la función VALUE. Esta función, con cualquiera de los dos nombres, puede ser especialmente útil en operaciones de unión externa completa porque devuelve el primer valor no nulo del par de columnas de unión.
El número de producto en el resultado del ejemplo para la unión externa completa es nulo para SCREWDRIVER, aunque la tabla PRODUCTS contiene un número de producto para SCREWDRIVER. Si por el contrario selecciona PRODUCTS.PROD#, PROD# es nulo para OIL. Si selecciona tanto PRODUCTS.PROD # como PARTS.PROD #, el resultado contiene dos columnas, ambas con algunos valores nulos. Puede fusionar datos de ambas columnas en una única columna, eliminando los valores nulos, mediante la función COALESCE.
SELECT PART, SUPPLIER,
COALESCE(PARTS.PROD#, PRODUCTS.PROD#) AS PRODNUM, PRODUCT
FROM PARTS FULL OUTER JOIN PRODUCTS
ON PARTS.PROD# = PRODUCTS.PROD#;La tabla de resultados tiene un aspecto similar al siguiente:PART SUPPLIER PRODNUM PRODUCT
======= ============ ======= ===========
WIRE ACWF 10 GENERATOR
MAGNETS BATEMAN 10 GENERATOR
PLASTIC PLASTIK_CORP 30 RELAY
BLADES ACE_STEEL 205 SAW
OIL WESTERN_CHEM 160 -----------
------- ------------ 505 SCREWDRIVERLa cláusula AS (AS PRODNUM) proporciona un nombre para el resultado de la función COALESCE.