search
CursosEmpresasBlogLiveConfPrecios
Curso Práctico de SQL

Todas las uniones

Curso Práctico de SQL

Contenido del curso

Introducción a SQL

  • 1
    Breve historia de SQL

    Breve historia de SQL

    06:03 min
  • 2
    Álgebra relacional

    Álgebra relacional

    07:05 min
  • 3
    Instalación de la BD de ejemplo

    Instalación de la BD de ejemplo

    01:28 min
  • 4
    Qué es una proyección (SELECT)

    Qué es una proyección (SELECT)

    06:14 min
  • 5
    Origen (FROM)

    Origen (FROM)

    08:41 min
  • 6
    Productos cartesianos (JOIN)

    Productos cartesianos (JOIN)

    10:36 min
  • 7
    Selección (WHERE)

    Selección (WHERE)

    11:50 min
  • 8
    Ordenamiento (ORDER BY)

    Ordenamiento (ORDER BY)

    07:57 min
  • 9
    Agregación y limitantes (GROUP BY y LIMIT)

    Agregación y limitantes (GROUP BY y LIMIT)

    09:09 min

Ejercitando tu SQL

  • 10
    El primero

    El primero

    11:05 min
  • 11
    El segundo más alto

    El segundo más alto

    16:25 min
  • 12
    Seleccionar de un set de opciones

    Seleccionar de un set de opciones

    11:16 min
  • 13
    En mis tiempos

    En mis tiempos

    09:50 min
  • 14
    Seleccionar por año

    Seleccionar por año

    08:13 min
  • 15
    Duplicados

    Duplicados

    13:09 min
  • 16
    Selectores de rango

    Selectores de rango

    10:16 min
  • 17
    Eres lo máximo

    Eres lo máximo

    07:55 min
  • 18
    Egoísta (selfish)

    Egoísta (selfish)

    09:47 min
  • 19
    Resolviendo diferencias

    Resolviendo diferencias

    10:49 min
  • 20
    Todas las uniones

    Todas las uniones

    Viendo ahora
  • 21
    Triangulando

    Triangulando

    10:34 min
  • 22
    Generando rangos

    Generando rangos

    14:27 min
  • 23
    Regularizando expresiones

    Regularizando expresiones

    11:00 min

Conceptos de SQL Avanzado

  • 24
    Bases de datos distribuidas

    Bases de datos distribuidas

    11:59 min
  • 25
    Queries distribuídos

    Queries distribuídos

    11:24 min
  • 26
    Sharding

    Sharding

    09:42 min
  • 27
    Window functions

    Window functions

    13:14 min
  • 28
    Particiones y agregación

    Particiones y agregación

    14:36 min
  • 29
    El futuro de SQL

    El futuro de SQL

    06:13 min
Tomar examen

Todas las uniones

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

Comentarios75

Anthony Guzman Lopez

Anthony Guzman Lopez

Estudiante
Hace 6 años
    Narzoly Estella Romero Reyes

    Narzoly Estella Romero Reyes

    Estudiante
    Hace 5 años
    Julián Cárdenas

    Julián Cárdenas

    Estudiante
    Hace 3 años
Cesar Augusto Morales Godoy

Cesar Augusto Morales Godoy

Estudiante
Hace 5 años
    Melanie Daniela Ventura Jimenez

    Melanie Daniela Ventura Jimenez

    Estudiante
    Hace 4 años
    carlos quintero

    carlos quintero

    Estudiante
    Hace 4 años
Heberto Nicolás Hernández Andrade

Heberto Nicolás Hernández Andrade

Estudiante
Hace 5 años
    Andrés Vega

    Andrés Vega

    Estudiante
    Hace 4 años
    Carlos Castillo Hernández

    Carlos Castillo Hernández

    Estudiante
    Hace 2 años
Aaron Fabrizio Calderon Guillermo

Aaron Fabrizio Calderon Guillermo

Estudiante
Hace 5 años
    Joel Sierra Mendoza

    Joel Sierra Mendoza

    Estudiante
    Hace 4 años
    Oscar Fernando Peñafiel Acosta

    Oscar Fernando Peñafiel Acosta

    Estudiante
    Hace 4 años
JAVIER SANTIAGO SALGADO

JAVIER SANTIAGO SALGADO

Estudiante
Hace 6 años
LIZBET ESTEFANY CASANA VERASTEGUI

LIZBET ESTEFANY CASANA VERASTEGUI

Estudiante
Hace 6 años
    Pat Villarroel

    Pat Villarroel

    Estudiante
    Hace 6 años
Michael Gamba

Michael Gamba

Estudiante
Hace 3 años
Mariano Gobea Alcoba

Mariano Gobea Alcoba

Estudiante
Hace 4 años
    Estiven Rojas

    Estiven Rojas

    Estudiante
    Hace 4 años
Michael Gamba

Michael Gamba

Estudiante
Hace 3 años
Pablo Alejandro Figueroa

Pablo Alejandro Figueroa

Estudiante
Hace 3 años
David Aguilera

David Aguilera

Estudiante
Hace 3 años
    Andrey Ruiz

    Andrey Ruiz

    Estudiante
    Hace 3 años
Paula Ruiz

Paula Ruiz

Estudiante
Hace 2 años
DANIEL STEVEN RODRIGUEZ VERANO

DANIEL STEVEN RODRIGUEZ VERANO

Estudiante
Hace un año
VICTOR MANUEL TORRES ZAZUETA

VICTOR MANUEL TORRES ZAZUETA

Estudiante
Hace 10 meses
Sergio Javier Lopez Olivera

Sergio Javier Lopez Olivera

Estudiante
Hace un año
Daniel Eduardo Montero Ramírez

Daniel Eduardo Montero Ramírez

Estudiante
Hace 4 años
    Cristopher Rojas Salas

    Cristopher Rojas Salas

    Estudiante
    Hace 4 años
Ronny Jair Mora Rojas

Ronny Jair Mora Rojas

Estudiante
Hace 4 años
    Carlos S. Aldazosa

    Carlos S. Aldazosa

    Estudiante
    Hace 4 años
Ruth Codina

Ruth Codina

Estudiante
Hace 5 años
Diego Andrés González Pérez

Diego Andrés González Pérez

Estudiante
Hace 3 años
Paola Juliet Orozco Molina

Paola Juliet Orozco Molina

Estudiante
Hace 3 años

bueno, en esta imagen se aprecia la separacion de los join con su respectivo codigo basico

![](

joins-sql-001.png

Excelente imagen! muy buen resumen.

Buen ejemplo grafico!

Test técnico de una empresa

Hace una semana tuve un test de SQL para una empresa donde me presentaban 3 tablas parecidas a las descritas en clase, y me pedían que hiciera una query (que si traducimos a los datos de este schema DB) trayendo una lista de los alumnos (customers) con su respectivo tutor_id (company) de la carrera (location) que tuviera más alumnos (customers). DE acuerdo a este test que por cierto no pude resolver en el tiempo indicado hago un query para esta DB equivalente, espero les ayude en algo, a entender un poco también como es el ambiente laboral con SQL.

SELECT CONCAT(a.nombre, ' ', a.apellido), a.tutor_id FROM platzi.alumnos AS a JOIN platzi.carreras AS c ON c.id = a.carrera_id WHERE c.id = ( SELECT c.id FROM platzi.carreras AS c INNER JOIN platzi.alumnos AS a ON a.carrera_id = c.id GROUP BY c.id ORDER BY COUNT(*) DESC LIMIT 1);

La verdad era sencilla la prueba pero bueno faltaba un poquito más de práctica...

Gracias por compartirnos tu experiencia.

SELECT maxCarrera.`carrera` ,concat(ifnull(a.nombre,''),' ',ifnull(a.apellido,'')) as estudiante ,concat(ifnull(t.nombre,''),' ',ifnull(t.apellido,'')) as tutor FROM alumnos a INNER JOIN alumnos t on (t.id = a.tutor_id) INNER JOIN (SELECT ca.id, ca.carrera, count(a.carrera_id) cant_alumnos FROM carreras ca INNER JOIN alumnos a on (a.carrera_id=ca.id) GROUP BY ca.id ORDER BY cant_alumnos DESC LIMIT 1 ) as maxCarrera on maxCarrera.id = a.carrera_id;

En la siguiente imagen comparto los ejercicios hechos en clase con su respectivo diagrama de venn:

SharedScreenshot.jpg

Gracias por esto.

¡GRAN APORTACIÓN! Muchas gracias

Me parece que hay un error al momento de usar WHERE en los JOIN. Se debería manejar con las KEYS, en este caso sería:

WHERE a.carrera_id IS NULL OR c.id IS NULL

Pienso lo mismo

Pienso igual

-- LEFT JOIN EXCLUSIVO SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a LEFT JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE c.id IS NULL; -- LEFT JOIN SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a LEFT JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id DESC; -- RIGHT JOIN SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a RIGHT JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id DESC; -- RIGHT JOIN EXCLUSIVE SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a RIGHT JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE a.id IS NULL ORDER BY c.id DESC; -- INNER JOIN SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a INNER JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id DESC; SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id; -- FULL OUTER SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a FULL OUTER JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id; -- EXCLUSIVE FULL OUTER JOIN SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a FULL OUTER JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE a.id IS NULL OR c.id IS NULL ORDER BY a.carrera_id DESC,c.id DESC;

full outer join es igual que full join?

Hola Liz

Si, es lo mismo. Pasa también con LEFT OUTER JOIN, que puedes indicarlo solo como LEFT JOIN y, por cierto, RIGHT OUTER JOIN como RIGHT JOIN. O INNER JOIN puedes indicarlo solo como JOIN.

La diferencia es solo un asunto de revisión del lenguaje, cosa que ha ocurrido varias veces.

Dejop un aporte

Screenshot 2023-04-10 204409.png

Desafío:

-- Left join exclusivo: Traigo todos los alumnos que no tienen info de carrera SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a LEFT JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE c.id IS NULL; -- Left join: Traigo todos los alumnos, sin importar si tienen o no carreras SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a LEFT JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id DESC; -- Right join: Traigo todas las carreras sin importar si tienen o no alumnos -- No veremos los alumnos que se inscribieron entre la 30 y 40 que no existen SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a RIGHT JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id DESC; -- Right join exclusive: Solo las carreras que no tienen alumnos SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a RIGHT JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE a.id IS NULL ORDER BY c.id DESC; -- Join solo o Inner join: Aquello que tienen en comun ambas tablas SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a INNER JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id DESC; -- Join mas usado. -- Ó SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY c.id DESC; -- Join mas usado. -- Diferencia simétrica: Contrario al inner join: -- Está en cada tabla pero no en la otra SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a FULL OUTER JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE a.id IS NULL OR c.id IS NULL ORDER BY a.carrera_id DESC, c.id DESC;

super buen aporte !!!

Dejo un aporte extra con las principales diferencias de los joins.

Screenshot 2023-04-11 105502.png

lo dejo en formato markdown por si alguien lo necesita

Tipo de JOINDescripción
INNER JOINDevuelve filas cuando hay una coincidencia en ambas tablas
LEFT JOINDevuelve todas las filas de la tabla izquierda, incluso si no hay coincidencias en la tabla derecha
RIGHT JOINDevuelve todas las filas de la tabla derecha, incluso si no hay coincidencias en la tabla izquierda
FULL OUTER JOINCombina los resultados de los LEFT y RIGHT OUTER JOIN. La tabla unida contendrá todos los registros de ambas tablas y rellenará con NULLs las coincidencias faltantes en cualquier lado
CROSS JOINProduce un producto cartesiano entre las dos tablas, devolviendo todas las combinaciones posibles de todas las filas. No tiene cláusula ON porque simplemente está uniendo todo con todo
NATURAL JOINUne dos tablas basándose en columnas con el mismo nombre y tipo de datos en ambas tablas
SELF JOINUne una tabla consigo misma como si la tabla fuera dos tablas, renombrando temporalmente al menos una tabla en la declaración SQL
Captura de pantalla 2023-09-15 180849.png

Comparto tutorial de este Crack

  • SQL desde Cero

Super bueno!! Muchas gracias :D

TODAS LAS UNIONES JOINS (diagramas de Venn)

!

-- solo los alumnos que están en las carreras que eliminamos del conjunto de carreras → LEFT JOIN exlusivo -- SELECT CONCAT(a.nombre, ' ', a.apellido) AS full_name, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a LEFT JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE c.id IS NULL ORDER BY a.carrera_id DESC

.

---

.

-- alumnos que están o no en las carreras que eliminamos del conjunto → eliminamos el WHERE, pasa de ser LEFT JOIN exlusivo -- a un LEFT JOIN inclusivo SELECT CONCAT(a.nombre, ' ', a.apellido) AS full_name, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a LEFT JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY a.carrera_id DESC

.

---

.

-- alumnos que no están en las carreras que eliminamos así como las carreras sin alumnos -- SELECT CONCAT(a.nombre, ' ', a.apellido) AS full_name, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a RIGHT JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY a.carrera_id DESC -- RIGHT JOIN inclusivo

.

---

.

-- carreras sin alumnos SELECT CONCAT(a.nombre, ' ', a.apellido) AS full_name, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a RIGHT JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE a.carrera_id IS NULL ORDER BY a.carrera_id DESC -- RIGHT JOIN exclusivo

.

---

.

-- alumnos que están o no en carreras que tienen o no alumnos -- SELECT CONCAT(a.nombre, ' ', a.apellido) AS full_name, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a FULL OUTER JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY a.carrera_id DESC -- FULL OUTER JOIN

.

---

.

-- alumnos que están en las carreras no borradas y en carreras con alumnos -- SELECT CONCAT(a.nombre, ' ', a.apellido) AS full_name, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a INNER JOIN platzi.carreras AS c ON a.carrera_id = c.id ORDER BY a.carrera_id DESC

.

---

.

-- alumnos que están en el grupo de las carreras que fueron borradas y carreras sin alumnos -- SELECT CONCAT(a.nombre, ' ', a.apellido) AS full_name, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a FULL OUTER JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE a.carrera_id IS NULL OR c.id IS NULL ORDER BY a.carrera_id DESC -- Diferencia simétrica

Por qué aunque no existe el campo

a.id

aún así le carga bien cuando corre la sentencia:

SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a FULL OUTER JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE a.id IS NULL OR c.id IS NULL ORDER BY c.id DESC

Hola Daniel, el campo a id sí existe en la tabla platzi alumnos.

platzi_alumnos.jpg

En la parte del ON ¿Siempre se realiza mediante los id?

ON a.carrera_id = c.id

Además ¿Por qué el igual? Gracias de antemano.

En el ON se hace la "union" de las llaves foraneas y llaves primarias, es comun que estas llaves sean los id's, pero pueden ser cosas como un nombre de usario, email, numero de telefono, etc.

a mi no me aparece los null, ya de plano no aparecern

Reto: Obtener el listado de los alumnos de la carrera que tenga más alumnos

SELECT CONCAT(nombre, ' ',apellido) AS nombre, tutor_id FROM platzi.alumnos WHERE carrera_id = ( --Carrera con mas alumnos SELECT carrera_id FROM platzi.alumnos GROUP BY carrera_id ORDER BY COUNT(*) DESC LIMIT 1 )

El estándar SQL especifica cinco tipos de JOIN : INNER , LEFT OUTER , RIGHT OUTER , FULL OUTER y CROSS . Una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN.