La sintaxis
general para la clausula NATURAL JOIN es la siguiente:
SELECT
table1.column, table2.column
FROM table1
NATURAL JOIN
table2;
El Natural Join Puro identifica las columnas con nombres idénticos en
la tabla1 y la tabla2 e implícitamente une las tablas utilizando todas estas
columnas comunes o idénticas. Las columnas en la clausula SELECT pueden ser
cualificadas utilizando la notación dot a menos que una de ellas sea columna de
unión.
Ejemplos:
-- Consulta 1
SELECT l.location_id, l.street_address, l.postal_code, l.city,
l.state_province, country_id, c.country_name, c.region_id
FROM locations l NATURAL JOIN countries c;
El Natural Join identifica columnas con nombres idénticos en ambas
tablas. En la consulta 1 COUNTRY_ID aparece en las dos tablas y esta es la
columna de unión. Utilizando la sintaxis de Natural Join no podemos utilizar la
notación dot en columnas unión, estas las debemos de escribir solo por su
nombre.
-- Consulta 2
SELECT l.location_id, l.street_address, l.postal_code, l.city,
l.state_province, l.country_id, c.country_id, c.country_name, c.region_id
FROM locations l, countries c
WHERE l.country_id = c.country_id;
La consulta 2 está escrita con la sintaxis de Oracle Tradicional y
recupera las mismas filas que la consulta 1. En la sintaxis Oracle Tradicional
podemos utilizar la notación dot en la columnas unión. Natural Join debe ser
utilizado con mucha precaución ya que el join es desarrollado automáticamente.
-- Consulta 3
SELECT * FROM jobs NATURAL JOIN countries;
Desarrollar un Natural Join entre dos tablas que no comparten nombres
de columnas idénticos, resulta en un Producto Cartesiano.
-- Consulta 4
SELECT * FROM jobs, countries;
La consulta 4 devuelve un Producto Cartesiano pero con la sintaxis
Oracle Tradicional.
La sintaxis del Natural Join es simple pero propenso a una fundamental
debilidad. Sufre el riesgo que columnas
con el mismo nombre que no tengan ninguna relación unirse y puedan no tener incluso el mismo tipo de
dato.
Si desea unir dos tablas con nombres de columnas idénticos pero con diferentes tipos de datos esto
causara un error. Ya que Oracle no convierte implícitamente los tipos en este
caso.
Comentarios
Publicar un comentario