SQL INNER JOINPalabras clave
INNER JOIN es uno de los métodos de combinación más utilizados en SQL; se usa para extraer registros coincidentes de varias tablas según la relación entre ellas.
La palabra clave INNER JOIN devuelve filas cuando hay al menos una coincidencia en las tablas; devuelve la intersección de las dos tablas que cumplen la condición de combinación, es decir, los datos que existen en ambas tablas al mismo tiempo.
Sintaxis de SQL INNER JOIN
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;
o:
SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name;
Descripción de parámetros:
- columns: los nombres de las columnas a mostrar.
- table1: el nombre de la tabla 1.
- table2: el nombre de la tabla 2.
- column_name: el nombre de la columna utilizada para la combinación en las tablas.
Nota:INNER JOIN y JOIN son lo mismo.

Supongamos que hay dos tablas: Students y Enrollments.
Tabla Students:
| StudentID | Name | Age |
|---|---|---|
| 1 | Alice | 22 |
| 2 | Bob | 23 |
| 3 | Charlie | 24 |
Tabla Enrollments:
| EnrollmentID | StudentID | Course |
|---|---|---|
| 101 | 1 | Math |
| 102 | 2 | Science |
| 103 | 4 | History |
Consulta con INNER JOIN
SELECT Students.Name, Enrollments.Course FROM Students INNER JOIN Enrollments ON Students.StudentID = Enrollments.StudentID;
El resultado es el siguiente:
| Name | Course |
|---|---|
| Alice | Math |
| Bob | Science |
Explicación:INNER JOINLo que se devuelve esStudentsyEnrollmentsen la tablaStudentIDlos datos coincidentes. Los registros sin coincidencia (como Charlie y el registro con EnrollmentID 103) se excluirán.
Base de datos de demostración
En este tutorial, usaremos la base de datos de muestra EJEMPLO.
A continuación se muestran los datos seleccionados de la tabla "Websites":
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | Ejemplo | http://www.example.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
A continuación se muestran los datos de la tabla de registros de acceso al sitio web "access_log":
mysql> SELECT * FROM access_log; +-----+---------+-------+------------+ | aid | site_id | count | date | +-----+---------+-------+------------+ | 1 | 1 | 45 | 2016-05-10 | | 2 | 3 | 100 | 2016-05-13 | | 3 | 1 | 230 | 2016-05-14 | | 4 | 2 | 10 | 2016-05-14 | | 5 | 5 | 205 | 2016-05-14 | | 6 | 4 | 13 | 2016-05-15 | | 7 | 3 | 220 | 2016-05-15 | | 8 | 5 | 545 | 2016-05-16 | | 9 | 3 | 201 | 2016-05-17 | +-----+---------+-------+------------+ 9 rows in set (0.00 sec)
Ejemplo de SQL INNER JOIN
La siguiente instrucción SQL devolverá los registros de acceso de todos los sitios web:
Ejemplo
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count;
El resultado de ejecutar el SQL anterior es el siguiente:
Nota:La palabra clave INNER JOIN devuelve filas cuando hay al menos una coincidencia en las tablas. Si las filas de la tabla "Websites" no tienen coincidencia en "access_log", estas filas no se listarán.
Otras extensiones