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 4 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 3 años
      JAVIER SANTIAGO SALGADO

      JAVIER SANTIAGO SALGADO

      Estudiante
      Hace 5 años
      LIZBET ESTEFANY CASANA VERASTEGUI

      LIZBET ESTEFANY CASANA VERASTEGUI

      Estudiante
      Hace 5 años
        Patricio Villarroel Durán

        Patricio Villarroel Durán

        Estudiante
        Hace 5 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
      Sergio Javier Lopez Olivera

      Sergio Javier Lopez Olivera

      Estudiante
      Hace 10 meses
      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
      agustin pittavino

      agustin pittavino

      Estudiante
      Hace 4 años
        oscar.rusinque

        oscar.rusinque

        Estudiante
        Hace 3 años
      Nicolás Kryvenki

      Nicolás Kryvenki

      Estudiante
      Hace 5 años
      Diego Gomez

      Diego Gomez

      Estudiante
      Hace 5 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

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

      Agrego una concatenación del nombre y apellido del alumno para facilitar su lectura, y excluyo alumnos que no estén estudiando ninguna carrera, para su futuro análisis o limpieza de base de datos de ex-alumnos.

      SELECT CONCAT (a.nombre, ' ' , a.apellido) AS alumno, a.email, a.carrera_id, c.id, c.carrera FROM platzi.alumnos AS a INNER JOIN platzi.carreras AS c ON a.carrera_id = c.id WHERE a.carrera_id IS NOT NULL ORDER BY carrera_id DESC;

      Hola Agustin, gracias por tu aporte. Creo si no estoy mal, sobra la cláusula where ya que al hacer inner join y filtrando por id= carrera_id descartas los ids y carreras ids que estén en null y al ser id un PK no deberia estar en null

      Algunas prácticas, no es mucho pero es trabajo honesto :D

      SELECT a.nombre, a.apellido, c.carrera FROM platzi.alumnos AS a INNER JOIN platzi.carreras AS c ON a.id = c.id WHERE c.carrera = 'Química'; --Nos dara la lista de alumnos que están en Quimica. SELECT c.carrera, c.id, a.nombre, a.apellido, a.carrera_id FROM platzi.carreras AS c FULL OUTER JOIN platzi.alumnos AS a ON c.id = a.carrera_id WHERE c.vigente = false ORDER BY c.id ASC; --Todos los alumnos con carreras NO VIGENTES, ordenado por el id de carrera.
      --Alumnos que no tienen carrera asociada select * from platzi.alumnos pa left join platzi.carreras pc on pa.carrera_id=pc.id and pc.id is null --Carreras que no tienen ningun alumno asociado select * from platzi.alumnos pa right join platzi.carreras pc on pa.carrera_id=pc.id and pa.id is null --Todas las carreras con alumnos asociados select * from platzi.alumnos pa inner join platzi.carreras pc on pa.carrera_id=pc.id --Todas los alumnos y solo las carreras que tienen un alumno asocioado select * from platzi.alumnos pa left join platzi.carreras pc on pa.carrera_id=pc.id --Todas las carreras y solo los alumnos que tienen una carrera asocioada select * from platzi.alumnos pa right join platzi.carreras pc on pa.carrera_id=pc.id --Trae todo select * from platzi.alumnos pa full outer join platzi.carreras pc on pa.carrera_id=pc.id --Trae todo lo de las 2 tablas menos lo que coincida. select * from platzi.alumnos pa full outer join platzi.carreras pc on pa.carrera_id=pc.id where pa.carrera_id is null or pc.id is null