Diseño de base de datos, parte XI: JOIN

Los JOIN, uniones, son muy comúnes en las consultas de base de datos. Nos permiten enlazar dos o más tablas que comparten información en común. En SQL existen diferentes tipos de JOIN: INNER JOINLEFT JOINRIGHT JOINCROSS JOINGROUP JOINFULL JOIN y SELF JOIN (para esta entrada nos limitaremos a explicar los 3 primeros que son los más comunes).

Antes de comenzar, debemos revisar la teoría de cómo funcionan los JOIN. Para eso, debemos volver hacia atrás a nuestras clases de Probabilidad y Estadística (Diagramas de Venn).

Figura 1. Diagramas de Venn ejemplificando los JOIN

INNER JOIN

Sintaxis:

SELECT "tn1"."column_name1", "tn1"."column_name2", "tn2"."column_name3"
FROM "table_name1" AS "tn1"
INNER JOIN "table_name2" AS "tn2" ON "tn1"."column_name2" = "tn2"."column_name3";

La sentencia INNER JOIN es la sentencia JOIN por defecto, y consiste en combinar cada fila de una tabla con cada fila de la otra tabla, seleccionando aquellas filas que cumplan con una determinada condición.

Ejemplo:

SELECT ord.OrderNumber,
ord.TotalAmount,
cus.FirstName,
cus.LastName,
cus.City,
cus.Country
FROM [ORDER] ord
INNER JOIN Customer cus ON ord.CustomerId = cus.Id;
GO
/** Output **/
OrderNumber TotalAmount FirstName LastName City Country
——— ————————————— —————————————- —————————————- —————————————- —————————————-
542378 440.00 Paul Henriot Reims France
542379 1863.40 Karin Josephs Münster Germany
542380 1813.00 Mario Pontes Rio de Janeiro Brazil
542381 670.80 Mary Saveley Lyon France
542382 3730.00 Pascale Cartrain Charleroi Belgium
542383 1444.80 Mario Pontes Rio de Janeiro Brazil
542384 625.20 Yang Wang Bern Switzerland
542385 2490.50 Michael Holz Genève Switzerland

LEFT JOIN

Sintaxis:

SELECT "tn1"."column_name1", "tn1"."column_name2", "tn2"."column_name3"
FROM "table_name1" AS "tn1"
LEFT JOIN "table_name2" AS "tn2" ON "tn1"."column_name2" = "tn2"."column_name3";
GO

La sentencia LEFT JOIN combina los valores de la primera tabla con los valores de la segunda tabla. Siempre devolverá las filas de la primera tabla, incluso aunque no cumplan la condición.

Ejemplo:

SELECT ord.OrderNumber,
ord.TotalAmount,
cus.FirstName,
cus.LastName,
cus.City,
cus.Country
FROM Customer cus
LEFT JOIN [ORDER] ord ON cus.Id = ord.CustomerId
ORDER BY ord.TotalAmount;
GO
/** Output **/
OrderNumber TotalAmount FirstName LastName City Country
——— ————————————— —————————————- —————————————- —————————————- —————————————-
NULL NULL Diego Roel Madrid Spain
NULL NULL Marie Bertrand Paris France
542912 12.50 Patricio Simpson Buenos Aires Argentina
542937 18.40 Paolo Accorti Torino Italy
542897 28.00 Pascale Cartrain Charleroi Belgium
542716 28.00 Maurizio Moroni Reggio Emilia Italy
543028 30.00 Yvonne Moncada Buenos Aires Argentina

RIGHT JOIN

Sintaxis:

SELECT "tn1"."column_name1", "tn1"."column_name2", "tn2"."column_name3"
FROM "table_name1" AS "tn1"
RIGHT JOIN "table_name2" AS "tn2" ON "tn1"."column_name2" = "tn2"."column_name3"

La sentencia RIGHT JOIN combina los valores de la segunda tabla con los valores de la primera tabla. Siempre devolverá las filas de la segunda tabla, incluso aunque no cumplan la condición.

Ejemplo:

SELECT ord.TotalAmount,
cus.FirstName,
cus.LastName,
cus.City,
cus.Country
FROM [ORDER] ord
RIGHT JOIN Customer cus ON ord.CustomerId = cus.Id
WHERE ord.TotalAmount IS NULL;
GO
/** Output **/
TotalAmount FirstName LastName City Country
————————————- —————————————- —————————————- —————————————- —————————————-
NULL Diego Roel Madrid Spain
NULL Marie Bertrand Paris France

Bibliografía

Libros.-

  • Fehily, C. (2005). SQL: Visual Quickstart Guide, Third Edition. Peachpit Press.

Web.-

Otros.-

  • Curso SQL de Nectri

_____________________________________________________________
Síguenos en: FacebookInstagramTwitter y LinkedIn
¡No olvides seguirnos en Twitter!: @_ArCiGo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s