Web.SQL.Relaciones.
Joins.
Los Joins se utilizan para indicar el tipo de relación que tienen dos o más tablas a la hora de recuperar los datos de los registros.
INNER JOIN. Este tipo de joins lo que hace es mostrar los registros coincidentes de ambas tablas. Un ejemplo:
SELECT pedidos.id, personas.nombre
FROM pedidos
INNER JOIN personas ON pedidos.personaid = personas.id;
En este ejemplo lo que va a mostrar la factura y el persona que si han hecho pedidos, es decir, no mostrará aquellos clientes que no tienen pedidos, ya que no coinciden en las dos tablas.
Existen otras dos maneras de especificar un INNER JOIN en SQL:
JOIN USING. El resultado será el mismo pero la instrucción varía un poco;
SELECT pedidos.id, personas.nombre
FROM pedidos
JOIN personas USING (personaid);
El único que requisto es que deben llamarse igual los dos campos que vamos a usar para relacionar, es decir, la clave principal y la foránea.
NATURAL JOIN. En esta manera lo hace de forma natural, es decir, los campos deben llamarse igual, pero no hay que indicar nada en la instrucción, el gestor de base de datos se encarga de averiguar que campos son los que se llaman iguales para hacer la relación más lógica. Veamos como quedaría la instrucción;
SELECT pedidos.id, personas.nombre
FROM pedidos
NATURAL JOIN personas;
Automáticamente en este ejemplo, el gestor busca los campos que se llaman iguales en ambas tablas y los relaciona mostrando los resultados coincidentes. Como única inconveniente puede ser un poco mas lenta que las anteriores, ya que debe buscar en todas las tablas que intervienen en la consulta y eso conlleva un tiempo.
LEFT JOIN. Este tipo de joins lo que hace es mostrar todos los registros de la tabla izquierda y también los no coincidentes de la tabla de la derecha, que lo mostraría como un NULL. Un ejemplo:
SELECT personas.nombre, pedidos.id
FROM personas
LEFT JOIN pedidos ON personas.id = pedidos.personaid
ORDER BY personas.nombre;
RIGHT JOIN. Este tipo de joins lo que hace es mostrar todos los registros de la tabla derecha y también los no coincidentes de la tabla de la izquierda, que lo mostraría como un NULL. Un ejemplo:
SELECT personas.nombre, pedidos.id
FROM personas
LEFT JOIN pedidos ON personas.id = pedidos.personaid
ORDER BY personas.nombre;
FULL JOIN. Este tipo de joins lo que hace es el LEFT/RIGHT JOIN a la vez, de forma que los resultados pueden ser muy extensos.
SELECT personas.nombre, pedidos.id
FROM personas
FULL OUTER JOIN pedidos ON personas.id = pedidos.personaid
ORDER BY personas.nombre;
En este ejemplo devuelve todas las filas de la tabla personas y todas las filas de la tabla pedidos y aquellas que no coincidan en ambos lados, las rellenará con un NULL.
ALIAS. Se utiliza para darle un nombre coherente a las columnas, de forma que queda más vistoso y organizado a la hora de mostrar los datos. Un ejemplo:
SELECT pedidos.id AS Id, personas.nombre AS Nombre
FROM pedidos
INNER JOIN personas ON pedidos.personaid = personas.id;
De esta forma las columnas se llamarán Id y Nombre a la hora de mostrar los datos.
También se puede hacer con las propias tablas:
SELECT P.id, Pr.nombre
FROM pedidos AS P, personas AS Pr
WHERE Pr.edad>=18 AND Pr.pais=”Alemania”;
Usando los alias de esta forma, ahorraríamos código recortando un poco los nombres, sobre todo en consultas largas y complejas.