Curso de SQL y MySQL

Curso de SQL y MySQL

Alberto Alcocer

Alberto Alcocer

Tipos de JOIN

18/24

Lectura

En la clase anterior estuvimos hablando de dos tipos de joins que podemos usar cuando estemos trabajando con consultas a nuestras bases de datos.

Existen diferentes formas en las que se pueden unir las tablas en nuestras consultas y de acuerdo con esta uni贸n se va a mostrar informaci贸n, y es importante siempre tener clara esta relaci贸n. En esta clase te voy a mostrar gr谩ficamente 7 diferentes tipos de uniones que puedes realizar.

Usar correctamente estas uniones puede reducir el tiempo de ejecuci贸n de tus consultas y mejorar el rendimiento de tus aplicaciones.

Como yo lo veo cuando hacemos uniones en las consultas para seleccionar informaci贸n, estamos trabajando con tablas, estas tablas podemos verlas como conjuntos de informaci贸n, de forma que podemos asimilar los joins entre tablas como uniones e intersecciones entre conjuntos.

Supongamos que contamos con dos conjuntos, el conjunto A y el conjunto B, o, la tabla A y la tabla B. Sobre estos conjuntos veamos cu谩l es el resultado si aplicamos diferentes tipos de join.

1. Inner Join

Esta es la forma mas f谩cil de seleccionar informaci贸n de diferentes tablas, es tal vez la que mas usas a diario en tu trabajo con bases de datos. Esta union retorna todas las filas de la tabla A que coinciden en la tabla B. Es decir aquellas que est谩n en la tabla A Y en la tabla B, si lo vemos en conjuntos la intersecci贸n entre la tabla A y la B.

BadgesMesa de trabajo 2.jpg

Esto lo podemos implementar de esta forma cuando estemos escribiendo las consultas:

SELECT <columna_1> , <columna_2>,  <columna_3> ... <columna_n> 
FROM Tabla_A A
INNER JOIN Tabla_B B
ON A.pk = B.pk

2. Left Join

Esta consulta retorna todas las filas que est谩n en la tabla A y ademas si hay coincidencias de filas en la tabla B tambi茅n va a traer esas filas.

BadgesMesa de trabajo 2 copia.jpg

Esto lo podemos implementar de esta forma cuando estemos escribiendo las consultas:

SELECT <columna_1> , <columna_2>,  <columna_3> ... <columna_n> 
FROM Tabla_A A
LEFT JOIN Tabla_B B
ON A.pk = B.pk

3. Right Join

Esta consulta retorna todas las filas de la tabla B y ademas si hay filas en la tabla A que coinciden tambi茅n va a traer estas filas de la tabla A.

BadgesMesa de trabajo 2 copia 2.jpg

Esto lo podemos implementar de esta forma cuando estemos escribiendo las consultas:

SELECT <columna_1> , <columna_2>,  <columna_3> ... <columna_n>
FROM Tabla_A A
RIGHT JOIN Tabla_B B
ON A.pk = B.pk

4. Outer Join

Este join retorna TODAS las filas de las dos tablas. Hace la union entre las filas que coinciden entre la tabla A y la tabla B.

BadgesMesa de trabajo 2 copia 3.jpg

Esto lo podemos implementar de esta forma cuando estemos escribiendo las consultas:

SELECT <columna_1> , <columna_2>,  <columna_3> ... <columna_n>
FROM Tabla_A A
FULL OUTER JOIN Tabla_B B
ON A.pk = B.pk

5. Left excluding join

Esta consulta retorna todas las filas de la tabla de la izquierda, es decir la tabla A que no tienen ninguna coincidencia con la tabla de la derecha, es decir la tabla B.

BadgesMesa de trabajo 2 copia 4.jpg

Esto lo podemos implementar de esta forma cuando estemos escribiendo las consultas:

SELECT <columna_1> , <columna_2>,  <columna_3> ... <columna_n>
FROM Tabla_A A
LEFT JOIN Tabla_B B
ON A.pk = B.pk
WHERE B.pk IS NULL

6. Right Excluding join

Esta consulta retorna todas las filas de la tabla de la derecha, es decir la tabla B que no tienen coincidencias en la tabla de la izquierda, es decir la tabla A.

BadgesMesa de trabajo 2 copia 5.jpg

Esto lo podemos implementar de esta forma cuando estemos escribiendo las consultas:

SELECT <columna_1> , <columna_2>,  <columna_3> ... <columna_n>
FROM Tabla_A A
RIGHT JOIN Tabla_B B
ON A.pk = B.pk
WHERE A.pk IS NULL

7. Outer excluding join

Esta consulta retorna todas las filas de la tabla de la izquierda, tabla A, y todas las filas de la tabla de la derecha, tabla B que no coinciden.

BadgesMesa de trabajo 2 copia 6.jpg

Esto lo podemos implementar de esta forma cuando estemos escribiendo las consultas:

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL

Aportes 123

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Respecto a 鈥淔ULL OUTER JOIN鈥, esta sintaxis no es soportada por MySQL y arroja el Error 1046.
Para obtener un 鈥淔ULL OUTER JOIN鈥, se pueden unir un 鈥淟EFT JOIN鈥 y un 鈥淩IGHT JOIN鈥 usando la palabra clave 鈥淯NION鈥.
Por ejemplo, la siguiente consulta muestra los autores sin libros (LEFT JOIN) y los libros sin autores (RIGHT JOIN), obteniendo los mismos resultados que un 鈥淔ULL OUTER JOIN鈥:

SELECT *
FROM authors as a
LEFT JOIN books as b 
	ON a.author_id = b.author_id
WHERE b.author_id IS NULL
UNION
SELECT *
FROM authors as a
RIGHT JOIN books as b 
	ON a.author_id = b.author_id
WHERE a.author_id IS NULL;

Les dejo una imagen resumen.
Puede que a alguien le resulte util.

Aqui dejo un cuadro que podr铆a ser 煤til:

JOINS con books como A y authors como B
Inner Join
196 Rows en intersecci贸n A con B

SELECT b.title, a.name FROM books as b INNER JOIN authors as a ON a.author_id=b.author_id;

Left Join
197 Rows un Elemento en el conjunto A que no esta en A intersecci贸n B

SELECT b.title, a.name FROM books as b LEFT JOIN authors as a ON a.author_id=b.author_id;

Right Join
198 Rows 2 elementos en el conjunto B que no esta en B intersecci贸n A

SELECT b.title, a.name FROM books as b RIGHT JOIN authors as a ON a.author_id=b.author_id;

Outer Join
198 rows en total

SELECT b.title,a.name FROM books AS b LEFT OUTER JOIN authors AS a ON b.author_id = a.author_id  UNION SELECT b.title,a.name FROM books AS b RIGHT OUTER JOIN  authors AS a ON b.author_id = a.author_id 

Left excluding join
1 Row en el conjunto A

SELECT b.title, a.name FROM books as b LEFT JOIN authors as a ON a.author_id=b.author_id WHERE a.author_id IS NULL;```



Right excluding join
2 Row en el conjunto B

SELECT b.title, a.name FROM books as b RIGHT JOIN authors as a ON a.author_id=b.author_id WHERE b.author_id IS NULL;```



Outer excluding join
3 rows en A,B

SELECT b.title, a.name FROM books as b LEFT JOIN authors as a ON a.author_id=b.author_id WHERE a.author_id IS NULL UNION SELECT b.title, a.name FROM books as b RIGHT JOIN authors as a ON a.author_id=b.author_id WHERE b.author_id IS NULL;



En que casos usamos el LEFT JOIN? B谩sicamente es trabajar solo con la informaci贸n de la tabla A? No me queda claro cual es su finalidad, igualmente para el RIGHT JOIN

驴A algui茅n le funcion贸 el FULL OUTER JOIN?, me aparece un error de Sintaxis en,

ON a.author_id = b.author_id;
    SELECT a.author_id, a.name, a.nationality, b.title
    FROM authors AS a 
    FULL OUTER JOIN books AS b
    ON a.author_id = b.author_id;

Como tengo XAMPP, el MySQL la conexi贸n la hace mediante MariaDB 10.1.33, busqu茅 info sobre esto pero nada

Para finalizar la seccion de los JOIN cree un query (con otro adentro, es decir un query anidado) que me devuelve una tabla con dos columnas:

  • La de la derecha se llama CANTIDAD_LIBROS_ESCRITOS y enumera cantidades.
  • La de la izquierda se llama CANTIDAD_AUTORES y nos muestra la cantidad de autores que han escrito la cantidad de libros que muestra la columna de la derecha.
SELECT COUNT(ID) AS CANTIDAD_AUTORES, CANTIDAD AS CANTIDAD_LIBROS_ESCRITOS
FROM (SELECT a.author_id AS ID, a.name AS NOMBRE, COUNT(b.book_id) AS CANTIDAD
FROM authors AS a
LEFT JOIN books AS b
ON a.author_id = b.author_id
GROUP BY a.author_id
ORDER BY a.author_id) AS TABLA_SECUNDARIA
GROUP BY CANTIDAD_LIBROS_ESCRITOS
ORDER BY CANTIDAD_LIBROS_ESCRITOS

S煤per interesante y mucho m谩s f谩cil de apreciar con los diagramas, gracias! Aunque me parece que el FULL OUTER JOIN no est谩 soportado en algunas versiones de MySQL, por lo menos la que yos estoy usando, pero en este caso podemos simplemente hacer la suma de un LEFT JOIN y un RIGHT JOIN para obtener el mismo resultado.

Excelente explicaci贸n. Tambi茅n hay una clase de este tema en el curso de Fundamentos de Bases de Datos.

Excelente explicacion 馃槂

Hola, hay forma de descargar estos art铆culos, as铆 sea en un notebook?

Oh perfecto, justo el tipo de 鈥渏oin鈥 que buscaba, 鈥渙uter excluding join鈥 = 鈥渄iferencia simetrica鈥. 馃槃

Jajaja justo lo que pens茅, el 茅xito para tener buenos queries es hacer diagramas de venn, asi que a la hora de programar los query hoja y l谩piz para poder dibujar los circulos

Excelente explicacion, con esto y el curso de Fundamentos de Bases de datos queda todo completamente claro.

馃槷Wow no sabia que exist铆an tantos tipos de JOIN siempre hab铆a usado inner join, left join y muy pocas veces right join pero tratare de encontrar aplicaciones a los otros join a la hora de desarrollar

Este es el mejor articulo que he visto donde explique detalladamente la uni贸n de dos o m谩s tablas con los JOIN

Solo una observaci贸n, corregir los espacios en el outer excluding join para las condiciones

Esta informaci贸n, mas la del post @GOLLUM23
generaron un mejor contexto para mi entendimiento.

Excelente info!

Diagramas de Venn, la mejor herramienta!

valiosa informaci贸n. Gracias.

隆Genial!

Este tipo de de majo de base datos es muy util cuando se quiere tomar decisiones y entender futuros comportamientos no solo de los servicios o productos, si no tambien en aspectos de comportamiento en un uturo en las personas,

solo como observaci贸n en la url que dejaron en la clase 15 (https://i.pinimg.com/474x/b0/3d/67/b03d6794fb787492bea0f41a8144a37d--business-intelligence-computer-science.jpg)

En Right Excluding join (sans I鈥檌ntersection de A) esta escrito ( WHERE B.key IS NULL) deber铆a ser de la intersecci贸n de la tabla A (WHERE A.key IS NULL) como indica en la clase 17

Saludos,

Diagramas de Venn, el mejor amigo de los data scientists.

muy buena explicaci贸n refrescando curso de fundamentos.

solo sabia 3 tipos de join, con esto aprend铆 bastenteee

Muy bien explicado.

La mejor explicaci贸n que he visto.

Excelente informaci贸n.

buen informacion, muy buena lectura sobre los diferentes tipos de joins.

deberia estar descargable

En el 煤ltimo Join, 驴hay diferencia en poner 鈥淥N A.pk = B.pk鈥 con poner 鈥淥N A.Key = B.Key鈥?

Yo = 馃く

Muchas gracias por la informacion, aqui vemos que los diagramas de Venn son importantes

no se por que pero me gusto mucho esto

Una forma de implementar el Outer excluding join

    SELECT a.author_id, a.name as author_name, 
    a.nationality as author_nationality, b.title as book_title  
    FROM 
        authors as a
        LEFT JOIN 
        books as b 
            ON a.author_id = b.author_id
        WHERE b.author_id IS NULL
UNION
    SELECT a.author_id, a.name as author_name, 
    a.nationality as author_nationality, b.title as book_title 
    FROM 
        authors as a
        RIGHT JOIN 
        books as b 
            ON a.author_id = b.author_id
        WHERE a.author_id IS NULL;

Una forma de implementar el full outer join

 SELECT a.author_id, a.name as author_name, 
    a.nationality as author_nationality, b.title as book_title  
    FROM 
        authors as a
        LEFT JOIN 
        books as b 
            ON a.author_id = b.author_id
        WHERE a.author_id between 1 and 5
UNION
    SELECT a.author_id, a.name as author_name, 
    a.nationality as author_nationality, b.title as book_title 
    FROM 
        authors as a
        RIGHT JOIN 
        books as b 
            ON a.author_id = b.author_id
        WHERE a.author_id IS NULL;

Excelente y oportuno aporte. Gracias

Este curso a pesar de sus a帽os, es buenisimo! 馃憤鉁

Hola a todos siguiendo la lectura as铆 me quedaron los ejemplos de tipos de JOINS.

Profesor con el respeto que se merecen los demas profesores en Platzi, usted es uno de los mejores que hay!

SELECT <columna_1> , <columna_2>,  <columna_3> ... <columna_n> 
FROM Tabla_A A
INNER JOIN Tabla_B B
ON A.pk = B.pk

Aunque de esta manera corre sin ning煤n problema se nos explico una clase anterior es una buena practica para una lectura mas f谩cil de un tercero que no sea quien haya estructurado el c贸digo el poner el

AS

cuando se renombre la Tabla B

excelente!!!, estoy aprendiendo mucho!!

RECOMENDACI脫N: Estudiar temas b谩sicos de teor铆a de conjuntos.

Excelente info. explicativa, gracias.

Con esto, me quedan mucho m谩s claros los conceptos que vi en el anterior curso, muy buen complemento

Gracias por el material.

Genial

Excelentes im谩genes ilustrativas sobre los diferentes JOINS. He visto mal铆simas explicaciones sobre c贸mo funcionan los JOINS en muchos cursos; 茅ste curso ha sido el mejor que he tomado sobre SQL, espec铆ficamente, sobre lo b谩sico de MySQL.

Muchas Gracias, solo conocia tres tipos de Join, pero me ha quedado bastante claro como operan y las variaciones que se tienen.

Me recuerda mucho a mi materia de 鈥淢ates computacionales鈥 de la uni. 馃槮

muy bueno

Exelente informacion y muy util.

Outer excluding join Nuevo concepto鈥

Muy buenas explicaciones

Esta interesante implementar todos estos tipos de JOIN, solo hace falta practicar y experimentar

Excelente informacion

Excelente esta informaci贸n nos deja muy claro el uso de los Joins

Que buen aporte !!!

Este texto me ayudo a comprender cositas que aun ten铆a pendientes de cursos anteriores.

Muchas gracias!

Me agrada mucho este curso, ademas estoy aprendiendo bien.

Excelente, no conocia varios de estos Join鈥 ya toca es probarlos鈥

muy buen aporte鈥 lo ire probando

Excelente curso

excelente profe

Excelente explicacion profe!

Excelente.

Esta genial ver una importante aplicaci贸n de las matem谩ticas en base de datos. Para los que saben teor铆a de conjuntos este tema se les facilitara mucho.

Muy bien explicado.

Excelente aporte, gracias.

Excelente! tra铆do directo de los diagramas de Venn a la pr谩ctica.

Buen resumen de las formas posibles de hacer joins.

Que gran aporte de informacion鈥 gracias

Son muy importantes y se utilizan en el diaria vivir de las consultas SQL relacionales.

Creo que es importante saber que o cual es a informaci贸n que se quiere mostrar por ejemplo en la clase anterior vimos que con el INNER no mostraba el autor el cual no tenia libros registrados; Al aplicar el LEFT JOIN observamos como mostro al autor; pero en este caso nos llenaba el dato de cantidad de libros con null.

Muy practico e ilustrativa la informaci贸n

Excelente!

隆Maravilloso!

Muy buen aporte me dejo mas claro el concepto.

Great!

Muy buena guia, gracias.

Excelente!!

Ha quedado muy claro, muchas gracias.

Muy explicativo, gracias

Muchas gracias!!

Gracias!

Hola, me gusta mucho la explicacion, pero el comando Full Outer Join no me funciona. Me arroja un error de sintex.
Se puede hacer con un UNION de un left y un right join, en el curso de 鈥渇undamentos de bases de datos鈥 se explica como hacerlo

muy buena explicaci贸n

Me quedo mucho mas claro, gracias!!

Buena informaci贸n, bien explicado

Excelente aporte para tener en cuenta!

Buena informaci贸n para tener en cuenta!

Alguien podria explicarme la ultima consulta, me confunde ese FULL y en general como se escribio la consulta

que buen servicio.jpg

Los 鈥渆xclusi贸n鈥, siempre me han costado. Pero antes no hab铆a tenido la oportunidad de ver m谩s de la teor铆a.

JOIN: Operaci贸n de conjuntos.