SQL JOIN


SQL JOIN se utiliza para combinar filas de dos o más tablas.

La siguiente figura muestra los 7 usos relacionados con LEFT JOIN, RIGHT JOIN, INNER JOIN y OUTER JOIN.

TipoDescripción
INNER JOINDevuelve los registros que cumplen la condición de unión en ambas tablas (intersección).
LEFT JOINDevuelve todos los registros de la tabla izquierda, incluso si no hay registros coincidentes en la tabla derecha (conserva la tabla izquierda).
RIGHT JOINDevuelve todos los registros de la tabla derecha, incluso si no hay registros coincidentes en la tabla izquierda (conserva la tabla derecha).
FULL OUTER JOINDevuelve la unión de ambas tablas, incluyendo registros coincidentes y no coincidentes.
CROSS JOINDevuelve el producto cartesiano de ambas tablas, combinando cada registro de la tabla izquierda con cada registro de la tabla derecha.
SELF JOINCombina una tabla consigo misma.
NATURAL JOINTabla combinada automáticamente basada en campos con el mismo nombre.

Datos de ejemplo

Tabla 1: Customers

CustomerID Name
1 Alice
2 Bob
3 Charlie

Tabla 2: Orders

OrderID CustomerID Product
101 1 Laptop
102 2 Phone
103 4 Tablet

Comparación de resultados de cada unión

Tipo de JOIN Resultado
INNER JOIN Devuelve los registros coincidentes en ambas tablas. En el ejemplo dado, solo los registros con CustomerID 1 y 2 tienen coincidencia en ambas tablas, por lo que solo se devuelven estos registros.
LEFT JOIN Devuelve todos los registros de la tabla izquierda (Customers), incluso si no hay coincidencias en la tabla derecha (Orders). Para los registros de la tabla derecha sin coincidencia en la tabla izquierda, los campos de la tabla derecha en el resultado serán NULL. En el ejemplo, el registro con CustomerID 3 no tiene coincidencia en la tabla derecha, por lo que su Product correspondiente será NULL.
RIGHT JOIN Devuelve todos los registros de la tabla derecha (Orders), incluso si no hay coincidencias en la tabla izquierda (Customers). Para los registros de la tabla izquierda sin coincidencia en la tabla derecha, los campos de la tabla izquierda en el resultado serán NULL. En el ejemplo, el registro con OrderID 103 no tiene coincidencia en la tabla izquierda, por lo que su Name correspondiente será NULL.
FULL OUTER JOIN Devuelve todos los registros de ambas tablas, coincidan o no. Si un registro no tiene coincidencia en una tabla, los campos de esa tabla serán NULL. En el ejemplo, los registros con CustomerID 3 y OrderID 103 se mostrarán como NULL en la tabla correspondiente.
CROSS JOIN Devuelve el producto cartesiano de ambas tablas, es decir, cada fila de la tabla izquierda se combina con cada fila de la tabla derecha. En el ejemplo, cada cliente se combinará con cada pedido, produciendo múltiples resultados.
SELF JOIN Combina una tabla consigo misma. Esto se utiliza a menudo para consultar registros relacionados dentro de la misma tabla, como la relación entre empleados y sus gerentes.

SQL JOIN

La cláusula SQL JOIN se utiliza para combinar filas de dos o más tablas, basándose en campos comunes entre estas tablas.

Los tipos de JOIN más comunes:SQL INNER JOIN (JOIN simple). SQL INNER JOIN devuelve todas las filas que cumplen la condición JOIN de múltiples tablas.

Sintaxis:

SELECT column1, column2, ...
FROM table1
JOIN table2 ON condition;

Descripción de parámetros:

  • column1, column2, ...: Nombre(s) del campo a seleccionar; puede ser múltiples campos. Si no se especifica el nombre del campo, se seleccionan todos los campos.
  • table1: La primera tabla a unir.
  • table2: La segunda tabla a unir.
  • condition: La condición de unión, utilizada para especificar el método de unió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)

Tenga en cuenta que la columna " en la tabla "Websites"id" apunta al campo " en la tabla "access_log"site_id". Las dos tablas anteriores están relacionadas mediante la columna "site_id".

Luego, si ejecutamos la siguiente declaración SQL (que incluye INNER JOIN):

Ejemplo

SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;

Al ejecutar el SQL anterior, el resultado es el siguiente:



Diferentes SQL JOIN

Antes de continuar con los ejemplos, primero enumeramos los diferentes tipos de SQL JOIN que puede usar:

  • INNER JOIN: Devuelve filas si hay al menos una coincidencia en la tabla.
  • LEFT JOIN: Devuelve todas las filas de la tabla izquierda, incluso si no hay coincidencias en la tabla derecha.
  • RIGHT JOIN: Devuelve todas las filas de la tabla derecha, incluso si no hay coincidencias en la tabla izquierda.
  • FULL JOIN: Devuelve filas siempre que exista una coincidencia en una de las tablas.
Otras extensiones