Diferentes JOINs o uniones que puedo hacer entre tablas, dependiendo de los registros que quiero obtener.
Para hacer JOINs EXCLUSIVOS solo agregamos un WHERE para filtrar los registros donde el id de una de las tablas participantes sea NULL.
Para indicar que un campo sea Nulo se usa IS NULL.
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;
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;
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;
Seleccionar Alumnos sin Carrera y Carreras sin Alumnos.
También se conoce como diferencia simétrica, es lo opuesto al INNER JOIN.
Ya sea NO exista en el lado izquierdo o NO exista en el lado derecho es válido, pero no las que SI existen en ambos.
Muestra los registros del 30 al 40 que tiene alumno, pero no tiene carrera.
Selecciona Alumnos con o sin carrera.
Trae todo lo que este del lado de la tabla Alumnos ya sea que tenga su equivalente o no en la tabla carrera, pero sino existe en la tabla Alumnos entonces no está en el Left, por tanto, no lo trae.
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;
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;
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;