English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Sentencia LEFT JOIN de SQL

En este tutorial, aprenderá cómo usar el JOIN izquierdo de SQL para recuperar datos de dos tablas.

Usar JOIN izquierdo

Una sentencia LEFT JOIN devuelve todas las filas de la tabla izquierda y las filas que cumplen con las condiciones de conexión de la tabla derecha. El JOIN izquierdo esuna variante de unión externapor lo que también se conoce comoleft outer join.Otras variantes de unión externa sonUnión derechayUnión completa.

El diagrama de Venn siguiente ilustra cómo funciona el JOIN izquierdo.

Nota:Una unión externa es una unión que incluye filas en el conjunto de resultados, incluso si las filas de las dos tablas a unir pueden no coincidir.

Para entender esto claramente, veamos lo siguienteemployeesydepartmentsTabla.

+--------+--------------+------------+---------+
| emp_id | emp_name | hire_date | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+---------+

+---------+------------------+
| dept_id | dept_name |
+---------+------------------+
|       1 | Administración |
|       2 | Servicio al Cliente |
|       3 | Finanzas |
|       4 | Recursos Humanos |
|       5 | Ventas |
+---------+------------------+
Tabla: employees
Tabla: departments

Ahora, supongamos que desea recuperar todos los IDs de los empleados, sus nombres y fechas de contratación, así como el nombre del departamento al que pertenecen, sin importar si han sido asignados a algún departamento. Para obtener este tipo de conjunto de resultados, necesitamos aplicar una unión izquierda.

La siguiente sentencia utiliza un campo común paraempleadosydepartmentsLas tablas (departments) se conectan para recuperar el ID del empleado, el nombre, la fecha de contratación y el nombre del departamento.dept_idIncluye también a los empleados que no han sido asignados a un departamento.

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_id;

Consejo:En las consultas de unión, la tabla izquierda es la que aparece más a la izquierda en la cláusula JOIN, y la tabla derecha es la que aparece más a la derecha.

Ejecutar el comando anterior, obtendrá la siguiente salida:

+--------+--------------+------------+-----------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+-----------------+
|      1 | Ethan Hunt | 2001-05-01 | Recursos Humanos |
|      2 | Tony Montana | 2002-07-15 | Administration  |
|      3 | Sarah Connor | 2005-10-18 | Sales           |
|      4 | Rick Deckard | 2007-01-03 | Finance         |
|      5 | Martin Blank | 2008-06-24 | NULL            |
+--------+--------------+------------+-----------------+

Como puede ver claramente, el JOIN izquierdo incluyeempleadoslas filas de todos los resultados en la tabla (employees), sin importardepartmentsen la tabladept_idCoincidencia de columnas.

Nota:Si hay una fila en la tabla izquierda y no hay coincidencia en la tabla derecha, las filas de asociación resultantes contendrán NULL para todos los valores de las columnas de la tabla derecha.