Ir al contenido principal

Joins Naturales


Los puntos discutidos hasta el momento han sido demostrados con dos tablas. No hay restricción sobre el número de tablas que pueden ser relacionadas utilizando Joins. La tercera forma normal consiste de un número de tablas conectadas atreves de una seria de llaves primarias y llaves foráneas.  Utilizando todas estas relaciones podemos obtener cualquier información de la base de datos. Cuando múltiples Joins existen en una sentencia, son evaluados de izquierda a derecha.

1 - CONSULTA

SELECT *
FROM   departments NATURAL JOIN locations
                   NATURAL JOIN regions;

En la consulta 1. La unión entre la tabla departments y locations se realiza mediante la columna location_id común en la dos tablas, esta unión produce un resultado interno de 27 filas. Este resultado es unido naturalmente con la tabla regions pero como no existe una columna común un producto cartesiano es desarrollado, el cual produce un resultado de 108 filas. Ya que la tabla tiene 4 filas estas son multiplicadas por las 27 filas producidas anteriormente.   

Las sintaxís JOIN … USING y JOIN … ON son mejores para joins múltiples que el JOIN NATURAL.
La siguiente consulta realiza un Join de Tablas utilizando la sintaxis JOIN NATURAL, esta consulta obtiene 27 filas.

SELECT region_id, country_id, c.country_name, l.city, d.department_name
FROM   departments d NATURAL JOIN locations l
                     NATURAL JOIN countries c
                     NATURAL JOIN regions r;

Esta consulta es realizada mediante la sintaxis  JOIN … ON , la cual encuentra las mismas 27 filas de resultado.

SELECT c.region_id, c.country_id, c.country_name, l.city, d.department_name
FROM   departments d JOIN locations l ON (d.location_id = l.location_id)
                     JOIN countries c ON (l.country_id = c.country_id)
                     JOIN regions r   ON (c.region_id = r.region_id);

La clausula JOIN … USING también puede ser utilizada para producir el mismo resultado.

SELECT region_id, country_id, c.country_name, l.city, d.department_name
FROM   departments d JOIN locations l USING (location_id)
                     JOIN countries c USING (country_id)
                     JOIN regions r   USING (region_id);


En la sintaxis JOIN … ON también podemos especificar otras condiciones similares a las que escribimos en la clausula WHERE para limitar el resultado. En el siguiente ejemplos se muestra.

-- CONDICION ESPECIFICADA MEDIANTE LA CLAUSULA WHERE
SELECT d.department_id, d.department_name, d.manager_id, l.location_id, l.city, l.country_id, l.postal_code, l.state_province, l.street_address
FROM   departments d
       JOIN locations l ON (d.location_id = l.location_id)
WHERE  L.city = 'Seattle';

-- MISMA CONDICION ESPECIFICADA MEDIANTE LA CLAUSULA JOIN ... ON
SELECT d.department_id, d.department_name, d.manager_id, l.location_id, l.city, l.country_id, l.postal_code, l.state_province, l.street_address
FROM   departments d
       JOIN locations l ON (d.location_id = l.location_id) AND (l.city = 'Seattle');

Tres formatos de Join Natural están disponibles. El Natural Join Puro utiliza la clausula NATURAL JOIN y dos tablas basadas en el mismo nombre de columna son unidas automáticamente si no  hay ninguna columna igual un Producto Cartesiano es ejecutado. Dos formatos joins mas están disponibles el JOIN … USING y JOIN … ON también son referidos como Joins Natural, estos no utilizan la clausula NATURAL. 

SELECT e.employee_id, e.last_name, e.first_name, d.department_name, l.city, c.country_name, r.region_name
FROM   employees e
       JOIN departments d ON (e.employee_id = d.department_id) AND (e.salary > 12000)
       JOIN locations l   ON (d.location_id = l.location_id)
       JOIN countries c   ON (l.country_id = c.country_id)
       JOIN regions r     ON (c.region_id = r.region_id);
 

Comentarios