Omar Daniel Centeno
Diego Cesar Lerma Torres
El mejor aporte que he visto en todo lo que llevo en Platzi 😂😂
Omar Rodríguez Aldama
jajaja buenisimo
¿Cómo se utilizan las uniones en SQL para extraer datos específicos?
La comprensión de cómo conectar y extraer datos de diferentes tablas en SQL es fundamental en la gestión de bases de datos. Usar uniones, conocidas como "joins", permite combinar información desde múltiples tablas para obtener insights específicos y detallados sin esfuerzo innecesario. Vamos a explorar las diferentes formas de uniones y sus aplicaciones.
¿Qué es un 'Left Join' y cómo puede priorizar la información de una tabla?
El 'Left Join', también conocido como 'Left Outer Join', es una técnica que selecciona todos los datos de una tabla primaria (o "izquierda"), y combina registros de una tabla secundaria (o "derecha") que coincidan con una condición especificada. Cuando no hay coincidencia en la tabla derecha, la consulta devuelve valores nulos para esos registros.
SELECT * FROM usuarios LEFT JOIN posts ON usuarios.id = posts.usuario_id;
¿Cómo funciona un 'Right Join' y en qué situaciones se utiliza?
El 'Right Join' o 'Right Outer Join' es similar al 'Left Join', pero prioriza la tabla derecha. Devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.
SELECT * FROM usuarios RIGHT JOIN posts ON usuarios.id = posts.usuario_id;
¿Qué es un 'Inner Join' y por qué es tan usado en SQL?
El 'Inner Join' es uno de los tipos de uniones más comunes porque selecciona solo los registros donde hay coincidencias en ambas tablas. Esto es altamente útil cuando se necesita información que está totalmente ligada por llaves primarias o foráneas.
SELECT * FROM usuarios INNER JOIN posts ON usuarios.id = posts.usuario_id;
¿Cómo manejar una 'Unión Completa' y cuál es su importancia?
La 'Unión Completa', o 'Full Outer Join', es una técnica que a veces no es soportada por todos los sistemas de SQL. Combina registros que existen en cualquiera de las tablas, destacando ambas coincidencias e inconsistencias.
SELECT * FROM usuarios LEFT JOIN posts ON usuarios.id = posts.usuario_id UNION SELECT * FROM usuarios RIGHT JOIN posts ON usuarios.id = posts.usuario_id;
¿Cómo simplificar una búsqueda utilizando la cláusula WHERE?
La cláusula WHERE en SQL es crucial para filtrar resultados con base en condiciones específicas. Es útil para centrar la búsqueda en contextos muy concretos, aumentando la precisión de los datos que se deciden mostrar.
SELECT * FROM usuarios LEFT JOIN posts ON usuarios.id = posts.usuario_id WHERE posts.id IS NULL;
La comprensión y manejo eficaz de diferentes tipos de 'joins' te permitirá lidiar con la complejidad y maximizar el valor de tus bases de datos en SQL. Te invito a que experimentes con diferentes combinaciones y descubras el potencial ilimitado que estas técnicas pueden ofrecer para tu proyecto. ¡Sigue explorando y desarrollando tus habilidades en SQL!
Omar Daniel Centeno
Diego Cesar Lerma Torres
El mejor aporte que he visto en todo lo que llevo en Platzi 😂😂
Omar Rodríguez Aldama
jajaja buenisimo
Ingrid Natalia Rodriguez Ovalle
Jessica M
Gracias por compartir !
HERNAN DARIO VELASQUEZ ORTIZ
Muchas gracias!
Daniela Muñoz Jiménez
Juan Carlos Barcinilla Alarcon
Muy buen aporte.
Usuario anónimo
UserEso es muy importante y útil.
Jorge Santos Vallejos
La sentencia UNION elimina las filas repetidas. La sentencia UNION ALL une completamente las 2 tablas.
Paul Cortes
Muy buen dato !!!
Hiram Nimrod Congo Garcia
Hola Jorge, Espero estés bien. Una duda, para que quite las filas duplicadas deben ser exactamente iguales en todos los campos? Gracias y saludos!
Facundo Nicolás García Martoni
ProfesorUn código propio que hace un join entre usuarios, posts y categorias, mostrando justamente el nombre del usuario que escribió tal post y que categoría tiene ese mismos post 😊
select login, titulo, nombre_categoria from usuarios join posts on usuarios.id = posts.usuario_id join categorias on posts.categoria_id = categorias.id;
Kevin Andres Curruchich Xocop
Este aporte está buenismo, gracias :)
Josue Israel Rojas Vilca
Es un gran ejemplo de union (mediante JOIN) entre tres tablas. Genial 💚
Jimmy Buriticá Londoño
Deyvi Jhonny Bustamante Perez
excelente aporte , muchas gracias
Jhon Jairo Morales Rodriguez
Esta chevere lo voy a imprimir
Jhon Freddy Puentes Nuñez
Felix Michael Hernandez Flery
Gracias por el aporte
Luis Angel Martinez Elizalde
Excelente contribución, seguramente le facilitara el aprendizaje a varias personas.
Francisco Antonio Rivera Viveros
Recuerden que el post huérfano no nos va a aparecer en ningún ejercicio que hagamos aquí con el profe porque cuando confugramos la base de datos de hecho la configuramos para que no puediera existir un post sin usuario por eso a la hora de hacer el INSERT y llenar la base de datos sale un error! y por ende no lo tenemos!!!
Ahora si quieren saber como hice para saltar el hueco de la clase 28 déjenme saber acá abajo en las respuestas a este aporte
Felipe Camacho Hurtado
Muchas gracias por el aporte. Justamente me estaba preguntado por que tenia ese registro en el RIGHT JOIN. Feliz Tarde.
Carlos Abraham Muñoz Mentado
Yo quisiera saber cómo le hiciste para dejar el hueco, aunque me imagino que modificando la tabla con ALTER y dejando con NO ACTION las reglas de las Foreign Keys se puede lograr.
Julio Cardenas
De otro curso de platzi, Alberto Alcocer "Beco" escribio este articulo del tema joins corto y conciso.
https://platzi.com/clases/1272-sql-mysql/11100-tipos-de-join/
Juan Carlos Romero Marcano
albert figueres núñez
Llevo un rato que me surgió una duda. Entendí que Israel dijo que indicamos AS para renombrar un campo, pero claro en varios de los scripts del compañero Juan Carlos Moreno, indica en muchas consultas utilizando el AS..
creo que visualizando la consulta con esos AS donde renombran campos, no lo acabo de ver claro en las visualizaciones de la consulta
Laura Alejandra Alvarez Linares
Para mi base de datos uni tres tablas, las personas veganas, con los alimentos que consumen y ejercicios que práctican, así:
Carlos Vera
Gracias por tu ejemplo, me ayudo a resolver una duda que tenía 😁
Adolfo Diaz Taracena
Una pregunta ala hora de hacer el RIGHT JOIN y que solo nos traiga lo que esta dentro de B, que no este en A, ala hora de hacer el where deberia de ser usuarios.id, y no posts.usuarios_id?, lo hago de las 2 maneras y me da lo mismo, si estoy mal corriganme, pero creo que se entiende mejor de esta forma: SELECT * FROM usuarios RIGHT JOIN posts ON usuarios.id = posts.usuario_id WHERE usuarios.id is NULL
Marco Bottino Poittevin
Hola, creo que no hay diferencia entre las dos. Si lo analizamos, al usar "usuarios.id is NULL" estamos pidiendo posts cuyos usuarios no tengan Primary key (es decir, que no existan). Utilizando la otra opción, pedimos posts cuya Foreign Key sea NULL (lo que implica que no tiene un usuario relacionado).
Espero haberte ayudado. Saludos.
Barbarita Paula Janeth Ramirez Ucañay
Hola Adolfo, también me surgió la misma duda. Considero que en la condición WHERE se debe sacar a todos los registros cuya información en usuarios es NULL quedando WHERE usuarios. id IS NULL, pero estemos atentos a una rpta del profesor.
Cholfo Eduardo Javier
Hola buenas tardes !!! Dejo la captura de mi BD sobre una tienda de bicicletas y ejecutando algunas sentencias.
Carlos Alberto Roa Correa
Ciro Villafraz
Como haríamos un join con las tablas que tienen una relación muchos a muchos (i.e posts y etiquetas)?
CRISTIAN BARBERO PÉREZ
Uniendo la tabla intermedia con ambas. Por ejemplo, se unirían la s tablas posts_tags, posts y tags.
La sintaxis sería:
SELECT * FROM posts_tags LEFT JOIN posts on posts_tags.post_id = posts.id LEFT JOIN tags on posts_tags.tag_id = tags.id;
Irving Juárez
Relacionando 3 tablas
Antony Yonatan Carrasco Alarcon
Una consulta comunidad, al hacer el left join union right join no existe una duplicidad de los datos que estan en la interseccion?
Maximiliano Alejandro Saavedra Moreno
Hola, cuando ocupas left o right lo que hace es traer toda la informacion que esta en un lado sea derecha o izquierda y las cruza con los datos que encuentra en la tabla que estas haciendo el join. por ejemplo si haces un left y tu tabla tiene 5 registros y en la tabla de la derecha hay 20 registros el resultado que traera seran los 5 registros de la tabla que encontro en la tabla de la derecha. Para concluir es como decir traeme todo lo de la tabla que esta en la izquierda y traeme lo que haga join con la tabla de la derecha. Espero haberte ayudado
Irving Juárez
Si, esa es la razón por la cual salen las dos tablas, digamos que la tabla se llena y así se puede saber cuales son los NULL en ambas tablas
Katerin Calderón
Este es un select de mi proyecto personal el cual consiste en crear una BD de Paises, datos de este y su comida típica, para unir varias tablas como en mi caso que uní 4 basta con repetir la sentencia left y on y los alias también son muy útiles, y en el select le podemos decir que campos queremos ver y con que nombre.
Jose Alexis Vazquez Morales
buen aporte!
Johan Dennis Yupanqui Valenzuela
Que buena idea de proyecto!
Wilson Marino Pablo Mendez
Excelente clase profe!! Me ha quedado claro el tema de los JOINS
Alejandro Sánchez
A mi también super bien explicado
Usuario anónimo
UserProfesor que motiva y enseña excelente.
Miguel Torres
Si quieren entender mejor todo esto chequen el tema teoría de conjuntos del curso de Pensamiento Lógico. Ahí se explica más todo eso de los conjuntos en diagramas de Venn. :D
comparto scrips que pueden servir.
use platziblog; -- todos los usuarios tengan o no un post relacionado select* from usuarios as u left join posts as p on u.id = p.usuario_id; -- todos los usuarios que no han hecho post select* from usuarios as u left join posts as p on u.id = p.usuario_id where p.usuario_id IS NULL; -- todos los post esten o no asociados con un usuario select* from usuarios as u right join posts as p on u.id = p.usuario_id; -- los post que no estan asociados con un usuario select* from usuarios as u right join posts as p on u.id = p.usuario_id where u.id is null; -- todos los usuarios que sí hayan hecho posts, con su respectivo post select* from usuarios as u inner join posts as p on u.id = p.usuario_id; -- conjunto universo UNION select* from usuarios as u left join posts as p on u.id = p.usuario_id UNION select* from usuarios as u right join posts as p on u.id = p.usuario_id; -- los usuarios que no hayan hecho un post, junto con los post que no tiene usuario select* from usuarios as u left join posts as p on u.id = p.usuario_id where p.usuario_id is NULL UNION select* from usuarios as u right join posts as p on u.id = p.usuario_id where p.usuario_id is NULL;
Acá les dejo ejemplos de todos los tipos de JOIN para MySQL incluyendo la forma de algunos que no existen en MySQL pero que pueden hacerse de otra manera como el FULL OTER JOIN. Los ejemplos son con las mismas tablas del ejercicio por lo que les debe funcionar con copiar y pegar:
--JOINS -- INNER JOIN: Muestra todos los registros de la tabla usuario y posts únicamente que tengan relación. SELECT * FROM usuarios AS u INNER JOIN posts AS p ON u.id = p.usuario_id; --LEFT JOIN: Muestra todos los registros de la tabla usuario sin importar que no tengan --registros en la tabla posts. SELECT * FROM usuarios AS u LEFT JOIN posts AS p ON u.id = p.usuario_id; --LEFT OUTER JOIN: Muestra unicamente los registros que de la tabla usuarios que no tienen --relación o registros en la tabla posts. SELECT * FROM usuarios AS u LEFT JOIN posts AS p ON u.id = p.usuario_id WHERE p.id IS NULL; --LEFT JOIN con Subquery: Muestra todos los registros de la tabla resultante de “SELECT * --FROM usuarios WHERE id = 1” (que es todos los registros de la tabla usuarios de id = 1) --tengan o no tengan relación registros en la tabla posts. SELECT * FROM (SELECT * FROM usuarios WHERE id = 1) AS u LEFT JOIN posts AS p ON u.id = p.usuario_id; --RIGHT JOIN: Muestra todos los registros de la tabla posts, sin importar que no tengan --registros en la tabla usuarios. SELECT * FROM usuarios AS u RIGHT JOIN posts AS p ON u.id = p.usuario_id; --RIGHT OUTER JOIN: Muestra unicamente los registros de la tabla posts, que no tengan --relación o registros en la tabla usuarios. SELECT * FROM usuarios AS u LEFT JOIN posts AS p ON u.id = p.usuario_id WHERE p.id IS NULL; --FULL JOIN: Funciona como un FULL JOIN en MYSQL y muestra todos los resultados de --ambas tablas usuarios y posts tengan o no tengan registros entre sí. SELECT * FROM usuarios AS u LEFT JOIN posts AS p ON u.id = p.usuario_id UNION SELECT * FROM usuarios AS u RIGHT JOIN posts AS p ON u.id = p.usuario_id; --Verdadera versión de FULL JOIN en oracle y postgreSQL: SELECT * FROM usuarios AS u FULL JOIN posts AS p ON u.id = p.usuario_id; --FULL OUTER JOIN: Funciona como un FULL OUTER JOIN y muestra todos los resultados --de ambas tablas usuarios y posts que no tengan registros entre sí. SELECT * FROM usuarios AS u LEFT JOIN posts AS p ON u.id = p.usuario_id WHERE p.id IS NULL UNION SELECT * FROM usuarios AS u RIGHT JOIN posts AS p ON u.id = p.usuario_id WHERE u.id IS NULL; --Verdadera versión de FULL OUTER JOIN en oracle y postgreSQL: SELECT * FROM usuarios AS u FULL OUTER JOIN posts AS p ON u.id = p.usuario_id WHERE u.id IS NULL or p.usuario_id IS NULL;