CodeGym /Cursos /SQL SELF /Uso de LEFT JOIN: incluir todos los datos d...

Uso de LEFT JOIN: incluir todos los datos de la tabla izquierda

SQL SELF
Nivel 11 , Lección 2
Disponible

Imagina que tienes dos tablas: una lista de estudiantes y una lista de sus inscripciones a cursos. No todos los estudiantes están inscritos en cursos, y quieres ver la lista completa de todos los estudiantes, incluyendo los que por alguna razón aún no han elegido un curso. Si usas INNER JOIN solo verás a los que están inscritos, pero ¿qué pasa con el resto? Para eso existe el LEFT JOIN.

LEFT JOIN devuelve todas las filas de la tabla izquierda (la que pones primero en la consulta) y las filas coincidentes de la tabla derecha. Si no hay coincidencias, las columnas de la tabla derecha tendrán valores NULL.

Sintaxis de LEFT JOIN

SELECT
    tabla1.columna1,
    tabla1.columna2,
    tabla2.columna1,
    tabla2.columna2    
FROM 
    tabla1 LEFT JOIN tabla2
ON 
    tabla1.columna_comun = tabla2.columna_comun;
  • tabla1 — es la tabla "izquierda".
  • tabla2 — es la tabla "derecha".
  • columna_comun — la columna común por la que se hace el join.

Ejemplo sencillo

Si la tabla students se ve así:

student_id name
1 Otto
2 Anna
3 Peter

Y la tabla enrollments se ve así:

enrollment_id student_id course
1 1 Matemáticas
2 1 Física
3 2 Biología

Entonces la consulta:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

te dará:

name course
Otto Matemáticas
Otto Física
Anna Biología
Peter NULL

Como ves, en el resultado aparecen todos los estudiantes, incluso Peter, que todavía no se ha inscrito en ningún curso. Para Peter, en la columna course aparece NULL.

Ejemplos de uso de LEFT JOIN

Ejemplo 1: Obtener la lista de todos los estudiantes y sus cursos

Vamos con el reto: necesitamos obtener la lista completa de estudiantes junto con los cursos en los que están inscritos, si es que lo están. Si un estudiante aún no ha elegido curso, eso también debe mostrarse.

La misma consulta:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Resultado:

name course
Otto Matemáticas
Otto Física
Anna Biología
Peter NULL

Este es el ejemplo clásico de uso de LEFT JOIN.

Ejemplo 2: Mostrar productos y sus ventas

Supón que tienes dos tablas:

La tabla products, que contiene todos los productos:

product_id product_name
1 Smartphone
2 Tablet
3 Portátil

La tabla sales, que contiene los datos de ventas:

sale_id product_id quantity
1 1 5
2 1 3
3 2 2

Ahora quieres ver todos los productos y la cantidad de ventas de cada uno, incluyendo los productos que aún no se han vendido.

SELECT
    products.product_name, 
    SUM(sales.quantity) AS total_sold
FROM 
    products LEFT JOIN sales
    ON 
    products.product_id = sales.product_id
GROUP BY 
    products.product_name;

Resultado:

product_name total_sold
Smartphone 8
Tablet 2
Portátil NULL

Detalles y problemas al usar LEFT JOIN

¿Siempre necesitas NULL?
A veces LEFT JOIN mete un NULL donde no lo esperabas. En esos casos puedes cambiar el NULL por algo más claro usando la función COALESCE().

SELECT
    students.name, 
    COALESCE(enrollments.course, 'Curso no elegido') AS course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Resultado:

name course
Otto Matemáticas
Otto Física
Anna Biología
Peter Curso no elegido

Duplicados innecesarios
Si los datos en la tabla derecha tienen registros duplicados, el resultado de la consulta tendrá más filas de las que esperabas. Fíjate bien en los datos con los que trabajas y usa DISTINCT si no quieres duplicados.

2
Tarea
SQL SELF, nivel 11, lección 2
Bloqueada
Lista completa de estudiantes y sus cursos
Lista completa de estudiantes y sus cursos
2
Tarea
SQL SELF, nivel 11, lección 2
Bloqueada
Lista completa de productos y sus ventas
Lista completa de productos y sus ventas
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION