Fundamentos de SQL - Consultas SELECT Multi-Tabla - Tipos de JOIN

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ Tipos de JOIN

La mejor forma de Aprender Programación online y en español


www.campusmvp.es

Pregunta-Trampa: El lenguaje C# y la plataforma .NET no son lo mismo | GAMBADAS:


Asesinos natos

Fundamentos de SQL: Consultas SELECT


multi-tabla - Tipos de JOIN
Escrito por campusMVP el 7 julio 2014 11:00

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.

Combinaciones internas - INNER JOIN


Las combinaciones internas se realizan mediante la instrucción INNER JOIN. Devuelven
únicamente aquellos registros/饬�las que tienen valores idénticos en los dos campos
que se comparan para unir ambas tablas. Es decir aquellas que tienen elementos en las
dos tablas, identi饬�cados éstos por el campo de relación.

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/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 1/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ 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.

Esto puede ocasionar la desaparición del resultado de 饬�las de alguna de las


dos tablas, por tener valores nulos, o por tener un valor que no exista en la
otra tabla entre los campos/columnas que se están comparando.

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/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 2/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ 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.

En realidad esto ya lo conocíamos puesto que en las combinaciones internas, el


uso de la palabra INNER es opcional (por eso lo hemos puesto entre
corchetes). Si simplemente indicamos la palabra JOIN y la combinación de
columnas (como ya hemos visto en el artículo anterior) el sistema
sobreentiende que estamos haciendo una combinación interna. Lo hemos
incluido por ampliar la explicación y por completitud.

BONUS: Consigue tu ebook recopilatorio GRATIS >> Héroe en SQL:


manual de iniciación

Combinaciones externas (OUTER JOIN)


Las combinaciones externas se realizan mediante la instrucción OUTER JOIN. Como
enseguida veremos, devuelven todos los valores de la tabla que hemos puesto a la
derecha, los de la tabla que hemos puesto a la izquierda o los de ambas tablas según el
caso, devolviendo además valores nulos en las columnas de las tablas que no tengan el
valor existente en la otra tabla.

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.

La sintaxis general de las combinaciones externas es:

FROM Tabla1 [LEFT/RIGHT/FULL] [OUTER] JOIN Tabla2 ON Condiciones_Vinculos_Tablas

Como vemos existen tres variantes de las combinaciones externas.

http://www.campusmvp.es/recursos/post/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 3/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ Tipos de JOIN

En todas estas combinaciones externas el uso de la palabra OUTER es


opcional. Si utilizamos LEFT, RIGHT o FULL y la combinación de columnas, el
sistema sobreentiende que estamos haciendo una combinación externa.

Variante LEFT JOIN


Se obtienen todas las 饬�las de la tabla colocada a la izquierda, aunque no tengan
correspondencia en la tabla de la derecha.

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

Esto se ilustra grá饬�camente de la siguiente manera:

De este modo, volviendo a Northwind, si escribimos la siguiente consulta:

SELECT OrderID, C.CustomerID, CompanyName, OrderDate 
FROM Customers C LEFT JOIN Orders O ON C.CustomerID = O.CustomerID 

http://www.campusmvp.es/recursos/post/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 4/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ 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:

Variante RIGHT JOIN


Análogamente, usando RIGHT JOIN se obtienen todas las 饬�las de la tabla de la derecha,
aunque no tengan correspondencia en la tabla de la izquierda.

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

El diagrama en este caso es complementario al anterior:

http://www.campusmvp.es/recursos/post/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 5/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ 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.

Variante FULL JOIN


Se obtienen todas las 饬�las en ambas tablas, aunque no tengan correspondencia en la
otra tabla. Es decir, todos los registros de A y de B aunque no haya correspondencia
entre ellos, rellenando con nulos los campos que falten:

http://www.campusmvp.es/recursos/post/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 6/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ 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

Por ejemplo, en Northwind esta consulta:

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).

En un próximo artículo vamos a aprender a hacer operaciones de conjuntos, uniendo,


intersecando y restando resultados.

campusMVP es la mejor forma de aprender a programar online y


en español. En nuestros cursos solamente encontrarás contenidos
propios de alta calidad (teoría+vídeos+prácticas) creados y
tutelados por los principales expertos del sector. Nosotros vamos

mucho más allá de una simple colección de vídeos colgados en Internet


http://www.campusmvp.es/recursos/post/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx porque 7/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ Tipos de JOIN

mucho más allá de una simple colección de vídeos colgados en Internet porque
nuestro principal objetivo es que tú aprendas.

Ver todos los posts de campusMVP

No te pierdas ningún post


Únete gratis a nuestro canal en Telegram y te avisaremos en el
momento en el que publiquemos uno nuevo.

¿Te ha gustado este artículo? ¡Compártelo!

Archivado en: Acceso a Datos


6 comentarios

Publicaciones relacionadas

Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN


En un anterior post sobre fundamentos de SQL vimos lo básico de crear consultas con
la instrucción S...

Fundamentos de SQL: Cómo realizar consultas simples con SELECT


En un post anterior veíamos qué es el lenguaje SQL y sus diferentes subconjuntos de
instrucciones. A...

Chuleta: Selectores JQUERY y CSS


Cuando estamos aprendiendo algo nuevo, buscamos constantemente referencias y
recursos que nos ayuden...

Comentarios (6) ­

EfrainMejiasC
04/01/2015 18:33:52

Muy Bueno todos los tutoriales ...los estoy check 1 a 1


Responder

jose
12/08/2015 1:38:01

http://www.campusmvp.es/recursos/post/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 8/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ 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:

Quizá este post te ayude:


www.campusmvp.es/.../...aciones-con-conjuntos.aspx

Te recomendamos que te descargues el libro completo:

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

Hola.. Necesito su ayuda.


No se mucho de MySQL, soy nuevo en el tema.

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.

siendo las tablas de la base de datos:


1.- EMPLEADOS
2.- PLANES
3.- PRODUCTOS

http://www.campusmvp.es/recursos/post/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 9/10
30/1/2017 Fundamentos de SQL: Consultas SELECT multi­tabla ­ Tipos de JOIN

4.- TITULOS
5.-ACTIVIDADES
Responder

José Manuel Alarcón


05/01/2017 20:02:59

Hola Aural:

Con la información que tienes en el artículo y en el libro gratuito tienes


información más que su饬�ciente para poder conseguir enlazar esas tablas
por ti mismo.

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.

La única forma de aprender es practicar, intentarlo, confundirse y volver a


intentarlo, así que ¡ánimo! :-)
Responder

Pingbacks and trackbacks (1) +


Huevo, perro, abeja o viernes, ¿cuál es un día de la semana?

http://www.campusmvp.es/recursos/post/Fundamentos­de­SQL­Consultas­SELECT­multi­tabla­Tipos­de­JOIN.aspx 10/10

También podría gustarte