LEFT JOIN, RIGHT JOIN

De wikijoan
La revisió el 18:26, 8 feb 2022 per Joan (discussió | contribucions) (Es crea la pàgina amb «=LEFT JOIN= *https://www.sqltutorial.org/sql-left-join/ No tots els països tenen ciutats associades. La informació de les ciutats està en la taula ''location''. Si...».)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

LEFT JOIN

No tots els països tenen ciutats associades. La informació de les ciutats està en la taula location. Si volem veure TOTS els països, i també les ciutats d'aquells països que en tenen, haurem de fer un LEFT JOIN on el country està en el cantó esquerre:

SELECT c.country_name, c.country_id, l.country_id, l.city
FROM countries c
LEFT JOIN locations l
ON l.country_id = c.country_id;


+--------------------------+------------+------------+---------------------+
| country_name             | country_id | country_id | city                |
+--------------------------+------------+------------+---------------------+
| Argentina                | AR         | NULL       | NULL                |
| Australia                | AU         | NULL       | NULL                |
| Belgium                  | BE         | NULL       | NULL                |
| Brazil                   | BR         | NULL       | NULL                |
| Canada                   | CA         | CA         | Toronto             |
| Switzerland              | CH         | NULL       | NULL                |
| China                    | CN         | NULL       | NULL                |
| Germany                  | DE         | DE         | Munich              |
| Denmark                  | DK         | NULL       | NULL                |
...

Podem modificar la consulta per veure quins països no tenen cap ciutat:

SELECT c.country_name, c.country_id
FROM countries c
LEFT JOIN locations l
ON l.country_id = c.country_id
WHERE city IS NULL;

+--------------+------------+
| country_name | country_id |
+--------------+------------+
| Argentina    | AR         |
| Australia    | AU         |
| Belgium      | BE         |
| Brazil       | BR         |
| Switzerland  | CH         |
...

Podem fer un doble LEFT JOIN amb les taules regions, countries i locations:

SELECT r.region_name, c.country_name, l.street_address, l.city
FROM regions r
LEFT JOIN countries c ON c.region_id = r.region_id
LEFT JOIN locations l ON l.country_id = c.country_id;

+------------------------+--------------------------+------------------------------------------+---------------------+
| region_name            | country_name             | street_address                           | city                |
+------------------------+--------------------------+------------------------------------------+---------------------+
| Europe                 | Belgium                  | NULL                                     | NULL                |
| Europe                 | Switzerland              | NULL                                     | NULL                |
| Europe                 | Germany                  | Schwanthalerstr. 7031                    | Munich              |
| Europe                 | Denmark                  | NULL                                     | NULL                |
| Europe                 | France                   | NULL                                     | NULL                |
...

Podria donar-se el cas de què hi haguessin regions que no tenen països, i aleshores també sortirien a la llista.


creat per Joan Quintana Compte, febrer 2022