Uniones De Tablas en Postgresql
Unir tablas, es una de las tareas fundamentales en la consulta de bases de datos. Todo el concepto de relaciones entre tablas se utiliza para justificar este hecho y toda el álgebra relacional está creada para poder analizar, explicar y justificar matemáticamente la capacidad de unir tablas.
La unión de tablas se define en términos de conjuntos los cuales se relacionan a través de llaves. Estas llaves además pueden ser utilizadas para definir restricciones dentro de las tablas y para indicar el tipo de relación y cardinalidad de ésta dentro del esquema de la base de datos.
Existen diferentes tipos de uniones los cuales exploraremos a continuación:
Left Inner join
El join a la izquierda es el mas común de los tipos de unión en bases de datos, por lo que usualmente, cuando uno habla de uniones, se refiere a este tipo y es utilizado como el default si se utiliza sólo la palabra join
.
Los inner joins son intersecciones entre dos conjuntos, se pueden hacer al conjunto de la izquierda como un LEFT JOIN o al de la derecha como un RIGHT JOIN. El conjunto resultado es la intersección de los campos a unir.
SELECT c.make, c.model, c.year, t.tr_type FROM cars c LEFT INNER JOIN transmissions t ON c.tr_id = t.id;
Right Inner join
SELECT c.make, c.model, c.year, t.tr_type FROM cars c LEFT INNER JOIN transmissions t ON c.tr_id = t.id;
Left Outer join
Los left outer joins regresan todos los elementos del conjunto de la izquierda y los elementos que intersectan del conjunto de la derecha. Todos los elementos de la izquierda que no intersecten, tendrán un NULL en el campo correspondiente a las columnas de la derecha.
SELECT c.make, c.model, c.year, t.tr_type FROM cars c LEFT INNER JOIN transmissions t ON c.tr_id = t.id;
Right Outer join
Es la versión opuesta al left outer join pero usando como base el conjunto de la derecha.
SELECT c.make, c.model, c.year, t.tr_type FROM cars c LEFT INNER JOIN transmissions t ON c.tr_id = t.id;
Full join
El full outer join regresa todas las columnas de ambas tablas, si existe una intersección esta se mostrará llena pero si no existe, se mostrarán nulos en los campos de la izquierda así como en los campos de la derecha.
SELECT c.make, c.model, c.year, t.tr_type FROM cars c LEFT INNER JOIN transmissions t ON c.tr_id = t.id;