Tiene que ver con los JOINs y son muy necesarias para extraer ciertos Tipos de Datos.
Son los elementos que se encuentran en una Tabla pero que NO se encuentran en otra.
Primero vamos a visualizar nuestra Data, cuantos alumnos hay por carreras.
SELECT carrera_id, COUNT(*) AS Cuenta
FROM platzi.alumnos
GROUP BY carrera_id
ORDER BY Cuenta DESC;
Como nuestras dos tablas (Alumnos y Carreras) están bien hechas, donde todos los alumnos tienen un Carrera_id de una Carrera que, si existe, entonces para poder hacer este ejercicio de Diferencias vamos a eliminar los registros entre 30 y 40.
DELETE FROM platzi.carreras
WHERE id BETWEEN 30 AND 40;
Ahora quiero ver los alumnos que se quedaron sin 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
ORDER BY a.carrera_id;
LEFT JOIN que nos devuelve todos los alumnos tengan carrera o no, y luego filtramos los que tengan su carrera con Datos NULL.Seleccionar sin excluir gente, alumnos y carreras, incluyendo alumnos sin carrera y carreras sin alumnos:
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 a.carrera_id DESC;
SELECT CONCAT (a.nombre, ' ', a.apellido) AS Alumno,
a.carrera_id,
c.id,
c.carrera
FROM platzi.alumnos AS a
LEFT JOIN platzi.carreras AS c
ON a.carrera_id = c.id;