Sintaxis JOIN
Resumen de las diferentes sintaxis para hacer joins.
Sintaxis FROM-WHERE:
-- Producto vectorial o cross join
SELECT * FROM Profesor, Departamento;
-- Equivalente a inner join
SELECT *
FROM Profesor p, Departamento d
WHERE p.CodigoDepartamento = d.Codigo;Sintaxis JOIN-ON:
Sirve para cualquier tipo de join (inner, outer, left, right...)
SELECT *
FROM Profesor p JOIN Departamento d
ON p.CodigoDepartamento = d.Codigo;También se pueden mezclar las dos sintaxis anteriores en un JOIN-WHERE:
SELECT *
FROM Profesor p JOIN Departamento d
WHERE p.CodigoDepartamento = d.Codigo;Sintaxis JOIN-USING:
Sólo se puede hacer cuando las columnas en ambas tablas tienen el mismo nombre (en la DB de Departamentos no se puede hacer, pero en Sakila sí):
SELECT *
FROM film JOIN film_actor
USING (film_id);
SELECT *
FROM film f JOIN film_actor fa
ON f.film_if = fa.film_id;
SELECT *
FROM film f JOIN film_actor fa
WHERE f.film_if = fa.film_id;Joins de múltiples tablas
Es recomendable esta sintaxis para hacer joins entre muchas tablas:
SELECT [...]
FROM t1 JOIN t2 ON [...]
JOIN t3 ON [...]
JOIN t4 ON [...]
WHERE [...];
SELECT [...]
FROM t1 JOIN t2 USING (...)
JOIN t3 USING (...)
JOIN t4 USING (...)
WHERE [...];De este modo en el WHERE quedan únicamente las condiciones finales que queramos aplicar, sin las condiciones para hacer los joins, que quedan dentro de los ON ....
Por ejemplo:
-- Recomendable
SELECT *
FROM Profesor p JOIN Departamento d ON p.CodigoDepartamento = d.Codigo
JOIN Ordenador o ON o.CodigoDepartamento = d.Codigo
WHERE d.codigo = 'INF';
-- Esto mezcla las condiciones de join y resto de condiciones deseadas
SELECT *
FROM Profesor p, Departamento d, Ordenador o
WHERE p.CodigoDepartamento = d.Codigo
AND o.CodigoDepartamento = d.Codigo
AND d.codigo = 'INF';Last updated