Ir al contenido principal

La Clausula Natural JOIN USING

La sintaxis para la clausula Natural JOIN USING es la siguiente:

SELECT tabla1.column, tabla2.colum
FROM tabla1
JOIN tabla2 USING (join_column1, join_column2…);

Mientras que el Natural Join Puro contiene la palabra NATURAL en su sintaxis, el JOIN … USING no lo hace. Un error es levantado si la palabra NATURAL y USING aparecen en la misma clausula JOIN. La clausula JOIN … USING permite  uno o más  columnas equijoins especificar explícitamente encerradas entre paréntesis depues de la palabra USING. Esto evita los defectos con el Natural Join Puro. Muchas situaciones demandan  que las tablas sean unidas solo con ciertas columnas. Este formato cumple con cierto requerimiento. Considere las siguientes consultas:

-- 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
JOIN countries c USING (country_id);

SELECT *
FROM   locations l
JOIN countries c USING (country_id);

La Consulta 1 especifica que la tabla LOCATIONS y COUNTRIES deben ser unidad mediante la columna COUNTRY_ID. Todas las columnas de estas tablas son recuperadas para las columnas que son columnas Join aparecen solo una vez. La notación dot no puede ser utilizada para columnas join deben ser nombradas 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 muestra la consulta anterior pero con la sintaxis tradicional.

-- Consulta 3
SELECT * FROM jobs j JOIN countries c USING;

La consulta 3 ilustra que un producto cartesiano no puede ser occidentalmente especificado con JOIN … USING ya que después de la palabra USING deben ser especificadas las columnas join.
Las columnas Join no pueden ser cualificadas utilizando el nombre de la tabla o el alias cuando son referenciadas mediantes estos. Desde que este tipo de unión excluye algunas columnas con nombres idénticos estas deben ser referenciadas.

SELECT employee_id, employee_id, e.job_id, e.department_id, jh.job_id, jh.department_id
FROM employees e

JOIN job_history jh USING(employee_id);

Comentarios