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
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.
-- 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):
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
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.
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
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.
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