SQL LEFT JOINPalabras clave

LEFT JOIN es una palabra clave de unión en SQL, utilizada para extraer datos de múltiples tablas.

LEFT JOIN se diferencia de INNER JOIN en que LEFT JOIN devuelve todos los registros de la tabla izquierda, incluso si no hay registros coincidentes en la tabla derecha.

La palabra clave LEFT JOIN devuelve todas las filas de la tabla izquierda (table1), incluso si no hay coincidencias en la tabla derecha (table2). Si no hay coincidencias en la tabla derecha, el resultado es NULL.

Sintaxis de SQL LEFT JOIN

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

O:

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

Nota:En algunas bases de datos, LEFT JOIN se denomina LEFT OUTER JOIN.

  • table1: tabla izquierda (tabla principal),LEFT JOINSe conservan todos los registros de esta tabla.
  • table2: tabla derecha (tabla secundaria), si no hay datos coincidentes, se usaNULLpara completar las columnas correspondientes.
  • ON table1.column_name=table2.column_name: especifica la condición de unión, normalmente un campo común de las dos tablas.

SQL LEFT JOIN

Características:

  • Devuelvetodos los registros de la tabla izquierda, incluso si la tabla derecha no tiene datos coincidentes.
  • Si no hay registros coincidentes en la tabla derecha, los campos de la tabla derecha en esa fila del resultado sonNULL。

Supongamos que hay dos tablas:CustomersyOrders。

Tabla Customers:

CustomerID Name
1 Alice
2 Bob
3 Charlie
4 David

Tabla Orders:

OrderID CustomerID Product
101 1 Laptop
102 2 Smartphone

Consulta usando LEFT JOIN:

SELECT Customers.Name, Orders.Product
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

Resultado de la consulta:

Name Product
Alice Laptop
Bob Smartphone
Charlie NULL
David NULL

Explicación:LEFT JOINSe devolvieronCustomerstodos los registros de la tabla. ParaCharlieyDavid, dado que enOrdersno hay coincidencias en la tablaCustomerID, sus correspondientesProductcolumnas sonNULL。


Base de datos de demostración

En este tutorial, usaremos la base de datos de muestra de 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 LEFT JOIN

La siguiente declaración SQL devolverá todos los sitios web y sus visitas (si las hay).

En el siguiente ejemplo, usamos Websites como tabla izquierda y access_log como tabla derecha:

Ejemplo

SELECT Websites.name, access_log.count, access_log.date
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;

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

Nota:La palabra clave LEFT JOIN devuelve todas las filas de la tabla izquierda (Websites), incluso si no hay coincidencias en la tabla derecha (access_log).

Otras extensiones