FULL OUTER JOIN es una instrucción usada para consultar dos tablas en las cuales se desea mostrar todos los registros coincidentes en ellas y los registros no coincidentes en las mismas. Bajo condiciones normales de diseño esto no debería ocurrir, sin embargo, hace muchos años me tocó migrar un sistema realizado en tablas Clarion TopSpeed en el cual las reglas de integridad la manejaban las aplicaciones.
Había una regla de negocio muy particular que indicaba que toda factura debía llevar un número de cliente pero que cuando se desconocieran los datos del cliente, el número del cliente (en la factura) debía ser cero. Por otro lado, el cliente cero en la base de datos no existía por lo que al migrar los datos a un esquema de base de datos relacional las reglas de integridad no lo permitían.
Utilizaremos esta situación para ilustrar el uso del FULL OUTER JOIN. En este caso se requiere:
- Mostrar los clientes con los datos de sus facturas.
- Mostrar los clientes sin facturas con los datos de las facturas en NULL.
- Mostrar los clientes inexistentes con sus datos en NULL (el cliente cero, en este caso) con los datos de las facturas generadas.
Usando el esquema de nuestras publicaciones anteriores, la consulta quedaría así:
SELECT * FROM
CLIENTE AS C FULL OUTER JOIN FACTURA AS F
ON C.ID_CLIENTE = F.ID_CLIENTE;
A esta consulta se le puede agregar una cláusula WHERE para ejecutar condiciones de búsqueda. Recordemos que el gestor de base de datos ejecutará primero las cláusulas OUTER y finalmente las cláusulas WHERE.
No hay comentarios:
Publicar un comentario