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 usa
NULLpara 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.

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 son
NULL。
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
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