Mots-clés SQL LEFT JOINKeywords
LEFT JOIN est un mot-clé de jointure en SQL utilisé pour extraire des données de plusieurs tables.
La différence entre LEFT JOIN et INNER JOIN est que LEFT JOIN renvoie tous les enregistrements de la table de gauche, même s'il n'y a aucun enregistrement correspondant dans la table de droite.
Le mot-clé LEFT JOIN renvoie toutes les lignes de la table de gauche (table1), même s'il n'y a aucune correspondance dans la table de droite (table2). S'il n'y a pas de correspondance dans la table de droite, le résultat est NULL.
Syntaxe SQL LEFT JOIN
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name;
Ou :
SELECT column_name(s) FROM table1 LEFT OUTER JOIN table2 ON table1.column_name=table2.column_name;
Remarque :Dans certaines bases de données, LEFT JOIN est appelé LEFT OUTER JOIN.
- table1: table de gauche (table principale),
LEFT JOINtous les enregistrements de cette table seront conservés. - table2: table de droite (table secondaire), s'il n'y a pas de données correspondantes, utilisez
NULLpour remplir les colonnes correspondantes. - ON table1.column_name=table2.column_name: spécifiez la condition de jointure, généralement le champ commun des deux tables.

Fonctionnalités :
- Renvoietous les enregistrements de la table de gauche, même si la table de droite n'a pas de données correspondantes.
- Si la table de droite n'a pas d'enregistrement correspondant, les champs de la table de droite pour cette ligne dans le résultat seront
NULL。
Supposons qu'il y ait deux tables :CustomersetOrders。
Table Customers:
| CustomerID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
| 4 | David |
Table Orders:
| OrderID | CustomerID | Produit |
|---|---|---|
| 101 | 1 | Ordinateur portable |
| 102 | 2 | Smartphone |
Requête utilisant LEFT JOIN :
SELECT Customers.Name, Orders.Product FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Résultat de la requête:
| Name | Produit |
|---|---|
| Alice | Ordinateur portable |
| Bob | Smartphone |
| Charlie | NULL |
| David | NULL |
Explication:LEFT JOINrenvoyéCustomerstous les enregistrements de la table. PourCharlieetDavid, car dansOrdersla table, il n'y a pas de correspondanceCustomerID, leurProductcolonne correspondante estNULL。
Base de données de démonstration
Dans ce tutoriel, nous utiliserons la base de données d'exemple EXAMPLE.
Ci-dessous se trouvent les données sélectionnées dans la table "Websites" :
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | Example | 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 | +----+---------------+---------------------------+-------+---------+
Ci-dessous se trouvent les données de la table de journal d'accès du site 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)
Exemple de LEFT JOIN SQL
L'instruction SQL suivante renverra tous les sites web et leur nombre de visites (le cas échéant).
Dans l'exemple suivant, nous utilisons Websites comme table de gauche et access_log comme table de droite :
Exemple
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
Après avoir exécuté le SQL ci-dessus, les résultats de sortie sont les suivants :
Remarque :Le mot-clé LEFT JOIN retourne toutes les lignes de la table de gauche (Websites), même s'il n'y a aucune correspondance dans la table de droite (access_log).
Autres extensions