English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,您将学习如何使用SQL内部联接从两个表中获取数据。
INNER JOIN是最常见的连接类型。它仅返回在两个联接表中都匹配的行。下维恩图说明了内部联接的工作方式。
为了容易理解这一点,让我们来看看下面employees和departments表。
+--------+--------------+------------+---------+ | 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 solo necesita recuperar el emp_id, emp_name, hire_date y dept_name de los empleados asignados a un departamento específico. Porque en la práctica, puede haber algunos empleados que aún no han sido asignados a un departamento, por ejemplo, como nosotrosemployeesEl quinto empleado de la tabla es “Martin Blank” 。 Pero aquí radica el problema, ¿cómo recuperar datos de dos tablas en la misma consulta SQL?
Si ve la tabla employees, notará que tiene una columna llamada dept_id, que guarda el ID del departamento asignado a cada empleado, es decir, en términos técnicos, la columna dept_id de la tabla employees es una clave foránea de la tabla departments, por lo tanto, utilizaremos esta columna como puente entre ambas tablas.
Este es un ejemplo que recupera el id del empleado, nombre, fecha de contratación y departamento al conectar las tablas employee y departments utilizando la columna dept_id común. No incluye a los empleados sin asignar a ningún departamento.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 INNER JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY emp_id;
Consejo:al unir tablas, agregue el nombre de la tabla correspondiente delante de cada nombre de columna (por ejemplo, employees.dept_id, departments.dept_id o t1.dept_id, t2.dept_id Si utilizaAlias de tabla),para evitar que en caso de que las columnas de diferentes tablas tengan nombres confusos y errores de nombre duplicado.
Atención:Para ahorrar tiempo, puede usarAlias de tablaen lugar de escribir el nombre largo de la tabla. Por ejemplo, puede dar un alias de tabla t a la tabla employees1y utilice t1.emp_name en lugar de employees.emp_name para referirse a su columna emp_name. Después de ejecutar el comando anterior, obtendrá el siguiente conjunto de resultados:
+--------+--------------+------------+-----------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+-----------------+ | 1 | Ethan Hunt | 2001-05-01 | Recursos Humanos | | 2 | Tony Montana | 2002-07-15 | Administración | | 3 | Sarah Connor | 2005-10-18 | Ventas | | 4 | Rick Deckard | 2007-01-03 | Finanzas | +--------+--------------+------------+-----------------+
Como puede ver, el conjunto de resultados contiene solo empleados con valores de dept_id que también existen en la columna dept_id de la tabla department.