Fundamentos de SQL - Consultas SELECT Multi-Tabla - Tipos de JOIN
Fundamentos de SQL - Consultas SELECT Multi-Tabla - Tipos de JOIN
Fundamentos de SQL - Consultas SELECT Multi-Tabla - Tipos de JOIN
En el anterior artículo de esta serie vimos cómo funcionan las consultas multi-tabla
basadas en JOIN. Ahora vamos a aprender más formas de realizar la unión de tablas
que nos permitirán controlar mejor los conjuntos de resultados que obtenemos.
La mejor forma de verlo es con un diagrama de Venn que ilustre en qué parte de la
relación deben existir registros:
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 1/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multitabla Tipos de JOIN
En este caso se devuelven los registros que tienen nexo de unión en ambas tablas. Por
ejemplo, en la relación entre las tablas de clientes y pedidos en Northwind, se
devolverán los registros de todos los clientes que tengan al menos un pedido,
relacionándolos por el ID de cliente.
Su sintaxis es:
FROM Tabla1 [INNER] JOIN Tabla2 ON Condiciones_Vinculos_Tablas
Así, para seleccionar los registros comunes entre la Tabla1 y la Tabla2 que tengan
correspondencia entre ambas tablas por el campo Col1, escribiríamos:
SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7
FROM Tabla1 T1 INNER JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
Por ejemplo, para obtener en Northwind los clientes que tengan algún pedido, bastaría
con escribir:
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 2/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multitabla Tipos de JOIN
SELECT OrderID, C.CustomerID, CompanyName, OrderDate
FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID
Que nos devolverá 830 registros. Hay dos pedidos en la tabla de Orders sin cliente
asociado, como puedes comprobar, y éstos no se devuelven por no existir la relación
entre ambas tablas.
Es decir, que nos permite seleccionar algunas 饬�las de una tabla aunque éstas no
tengan correspondencia con las 饬�las de la otra tabla con la que se combina. Ahora
lo veremos mejor en cada caso concreto, ilustrándolo con un diagrama para una mejor
comprensión.
FROM Tabla1 [LEFT/RIGHT/FULL] [OUTER] JOIN Tabla2 ON Condiciones_Vinculos_Tablas
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 3/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multitabla Tipos de JOIN
Así, para seleccionar todas las 饬�las de la Tabla1, aunque no tengan correspondencia
con las 饬�las de la Tabla2, suponiendo que se combinan por la columna Col1 de ambas
tablas escribiríamos:
SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7
FROM Tabla1 T1 LEFT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
SELECT OrderID, C.CustomerID, CompanyName, OrderDate
FROM Customers C LEFT JOIN Orders O ON C.CustomerID = O.CustomerID
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 4/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multitabla Tipos de JOIN
Obtendremos 832 registros ya que se incluyen todos los clientes y sus pedidos,
incluso aunque no tengan pedido alguno. Los que no tienen pedidos carecen de la
relación apropiada entre las dos tablas a partir del campo CustomerID. Sin embargo se
añaden al resultado 饬�nal dejando la parte correspondiente a los datos de la tabla de
pedidos con valores nulos, como se puede ver en esta captura de SQL Server:
Así, para seleccionar todas las 饬�las de la Tabla2, aunque no tengan correspondencia
con las 饬�las de la Tabla1 podemos utilizar la cláusula RIGHT:
SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7
FROM Tabla1 T1 RIGHT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 5/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multitabla Tipos de JOIN
Si en nuestra base de datos de ejemplo queremos obtener todos los pedidos aunque
no tengan cliente asociado, junto a los datos de dichos clientes, escribiríamos:
SELECT OrderID, C.CustomerID, CompanyName, OrderDate
FROM Customers C RIGHT JOIN Orders O ON C.CustomerID = O.CustomerID
En este caso se devuelven 830 registros que son todos los pedidos. Si hubiese algún
pedido con el CustomerID vacío (nulo) se devolvería también en esta consulta (es decir,
órdenes sin clientes), aunque en la base de datos de ejemplo no se da el caso.
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 6/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multitabla Tipos de JOIN
Es equivalente a obtener los registros comunes (con un INNER) y luego añadirle los de
la tabla A que no tienen correspondencia en la tabla B, con los campos de la tabla
vacíos, y los registros de la tabla B que no tienen correspondencia en la tabla A, con los
campos de la tabla A vacíos.
Su sintaxis es:
SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7
FROM Tabla1 T1 FULL [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
SELECT OrderID, C.CustomerID, CompanyName, OrderDate
FROM Customers C FULL JOIN Orders O ON C.CustomerID = O.CustomerID
nos devuelve nuevamente 832 registros: los clientes y sus pedidos, los clientes sin
pedido (hay 2) y los pedidos sin cliente (que en este caso son 0).
mucho más allá de una simple colección de vídeos colgados en Internet porque
nuestro principal objetivo es que tú aprendas.
Publicaciones relacionadas
Comentarios (6)
EfrainMejiasC
04/01/2015 18:33:52
jose
12/08/2015 1:38:01
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 8/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multitabla Tipos de JOIN
como se hace en el caso de que quiera mostrar los elementos de una tabla que
NO esten en otra..
Responder
campusMVP
12/08/2015 10:27:56
Hola:
promos.campusmvp.com/heroe-sql-manual-iniciacion/
Es gratis.
Saludos.
Responder
diego
02/11/2015 21:37:09
bueno el curso...
Responder
Aural Lanuza
05/01/2017 19:26:46
Pero como le hago para relacionar 5 tablas donde mi "Lógica de Relación" es:
a).- la tabla PLANES tiene o relaciona con: 1 o + 饬�las del campo "producto" en la
tabla PRODUCTOS.
b).- La tabla PRODUCTOS tiene o relaciona con: 1 o + 饬�las del campo "titulo" de la
tabla TITULOS.
c).- La tabla TITULOS tiene o se relaciona con: 1 o + 饬�las del campo
"actividad" en la tabla de ACTIVIDADES
d).- La tabla ACTIVIDADES contendra en su campo "responsable" : 1 o +
"empleados" de la tabla EMPLEADOS.
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 9/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multitabla Tipos de JOIN
4.- TITULOS
5.-ACTIVIDADES
Responder
Hola Aural:
Esa es una de las operaciones más básicas que se pueden hacer en SQL, así
que debes aprender a hacerlo por ti mismo o no te servirá de nada.
http://www.campusmvp.es/recursos/post/FundamentosdeSQLConsultasSELECTmultitablaTiposdeJOIN.aspx 10/10