Saltar al contenido principal
eLearner.app
Módulo 3 · Lección 1 de 49/57 en el curso~12 min
Lecciones del módulo (1/4)

Unir dos tablas: INNER JOIN

Hasta ahora hemos leído una tabla a la vez. En el mundo real, sin embargo, los datos son repartidos en varias tablas relacionadas: en nuestro conjunto de datos, por ejemplo, cada El empleado tiene un department_id que apunta a la tabla departments. para ver el nombre del departamento (y no solo su id) necesitamos unirnos al dos mesas. El operador que hace esto se llama JOIN.

La sintaxis básica

SQL
SELECT columns
FROM   table_a
JOIN   table_b ON table_a.x = table_b.y;

Leer en inglés: "tome table_a, adjunte table_b emparejando cada fila donde table_a.x es igual a table_b.y". El resultado es un nuevo virtual tabla con las columnas de ambos.

SQL
-- For each employee, also show the name of their department:
SELECT employees.first_name,
       employees.last_name,
       departments.name AS dipartimento
FROM   employees
JOIN   departments ON employees.department_id = departments.id;

La parte después de ON se llama condición de unión: es lo que le dice al motor "estas dos filas son más o menos iguales, alinéalas". en el La gran mayoría de los casos es una igualdad entre una clave primaria y una clave externa. clave (aquí departments.id y employees.department_id).

UNIÓN INTERNA, en detalle

La palabra clave completa es INNER JOIN, pero JOIN por sí solo es el estándar sinónimo. "Interior" significa que solo las filas que coinciden en ambas se devuelven tablas:

  • si un empleado tiene department_id = NULL, no aparecerá en el resultado;
  • Si un departamento no tiene empleados, no aparecerá en el resultado.

Nombres de columnas calificadas

Cuando dos tablas tienen columnas con el mismo nombre (aquí ambas tienen id y ambos tienen name si lo piensas bien), debes especificar qué tabla De donde proviene una columna escribiendo table.column. Para evitar repetir nombres largos, A menudo se utilizan alias (los vio en el Módulo 2):

SQL
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM   employees   AS e
JOIN   departments AS d ON e.department_id = d.id;

AS también es opcional aquí: FROM employees e funciona igual.

Pruébalo

Ejercicio#sql.m3.l1.e1
Intentos: 0Cargando...

Para cada empleado del departamento de Ingegneria, muestre el nombre (first_name), apellido (last_name) y la ciudad del departamento (departments.city). Tres columnas, una fila por empleado.

Cargando editor...
Mostrar pista

Complete la condición ON con la igualdad entre e.department_id y d.id, luego seleccione d.city como tercera columna.

Solución disponible después de 3 intentos

Ejercicio de revisión

Ejercicio#sql.m3.l1.e2
Intentos: 0Cargando...

Indique el nombre (first_name) y el apellido (last_name) de todos los empleados que trabajan en un departamento con sede en Milán. Filtre por departamentos.ciudad, no por el nombre del departamento.

Cargando editor...
Mostrar pista

Mismo JOIN que el ejercicio anterior, pero filtre por d.city = 'Milano' en lugar de por el nombre del departamento.

Solución disponible después de 3 intentos