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);
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
Publicar un comentario