SQL JOIN
SQL JOIN est utilisé pour combiner des lignes provenant de deux tables ou plus.
Le schéma suivant montre les 7 utilisations liées à LEFT JOIN, RIGHT JOIN, INNER JOIN et OUTER JOIN.
| Type | Description |
|---|---|
| INNER JOIN | Renvoie les enregistrements qui satisfont la condition de jointure dans les deux tables (intersection). |
| 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 (conserve la table de gauche). |
| RIGHT JOIN | Renvoie tous les enregistrements de la table de droite, même s’il n’y a aucun enregistrement correspondant dans la table de gauche (préserve la table de droite). |
| FULL OUTER JOIN | Renvoie l’union des deux tables, y compris les enregistrements correspondants et non correspondants. |
| CROSS JOIN | Renvoie le produit cartésien des deux tables, en combinant chaque enregistrement de la table de gauche avec chaque enregistrement de la table de droite. |
| SELF JOIN | Joint une table avec elle-même. |
| NATURAL JOIN | Fait automatiquement correspondre et joint des tables en fonction des champs portant le même nom. |
Données d’exemple
Tableau 1 : Customers
| CustomerID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
Tableau 2 : Orders
| OrderID | CustomerID | Produit |
|---|---|---|
| 101 | 1 | Ordinateur portable |
| 102 | 2 | Téléphone |
| 103 | 4 | Tablette |
Comparaison des résultats de jointure
| Types de JOIN | Résultat |
|---|---|
| INNER JOIN | Renvoie les enregistrements qui correspondent dans les deux tables. Dans l'exemple donné, seuls les enregistrements avec CustomerID 1 et 2 ont des correspondances dans les deux tables, donc seuls ces enregistrements sont renvoyés. |
| LEFT JOIN | Renvoie tous les enregistrements de la table de gauche (Customers), même s'il n'y a pas d'enregistrements correspondants dans la table de droite (Orders). Pour les enregistrements de la table de gauche qui n'ont pas de correspondance dans la table de droite, les champs de la table de droite dans le résultat seront NULL. Dans l'exemple, l'enregistrement avec CustomerID 3 n'a pas de correspondance dans la table de droite, donc son Product correspondant sera NULL. |
| RIGHT JOIN | Renvoie tous les enregistrements de la table de droite (Orders), même s'il n'y a pas d'enregistrements correspondants dans la table de gauche (Customers). Pour les enregistrements de la table de droite qui n'ont pas de correspondance dans la table de gauche, les champs de la table de gauche dans le résultat seront NULL. Dans l'exemple, l'enregistrement avec OrderID 103 n'a pas de correspondance dans la table de gauche, donc son Name correspondant sera NULL. |
| FULL OUTER JOIN | Renvoie tous les enregistrements des deux tables, qu'ils correspondent ou non. Si une table n'a pas d'enregistrements correspondants, ses champs seront NULL. Dans l'exemple, les enregistrements avec CustomerID 3 et OrderID 103 apparaîtront respectivement comme NULL dans l'autre table. |
| CROSS JOIN | Renvoie le produit cartésien des deux tables, c'est-à-dire que chaque ligne de la table de gauche est combinée avec chaque ligne de la table de droite. Dans l'exemple, chaque client sera combiné avec chaque commande, produisant plusieurs résultats. |
| SELF JOIN | Joint une table avec elle-même. Ceci est généralement utilisé pour interroger des enregistrements interdépendants dans une table, comme la relation entre les employés et leurs managers. |
SQL JOIN
La clause SQL JOIN est utilisée pour combiner des lignes de deux ou plusieurs tables en fonction de champs communs entre ces tables.
Les types de JOIN les plus courants :SQL INNER JOIN (JOIN simple)SQL INNER JOIN renvoie toutes les lignes de plusieurs tables qui satisfont la condition de JOIN.
Syntaxe :
SELECT column1, column2, ... FROM table1 JOIN table2 ON condition;
Description du paramètre :
- column1, column2, ...: Les noms des champs à sélectionner, peuvent être plusieurs champs. Si aucun nom de champ n'est spécifié, tous les champs seront sélectionnés.
- table1: La première table à joindre.
- table2: La deuxième table à joindre.
- conditionLa condition de jointure, utilisée pour spécifier comment effectuer la jointure.
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)
Notez que la colonne "id" de la table "Websites" pointe vers le champ "site_id" de la table "access_log". Les deux tables ci-dessus sont liées par la colonne "site_id".
Ensuite, si nous exécutons l'instruction SQL suivante (contenant INNER JOIN) :
Exemples
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;
L'exécution du code SQL ci-dessus produit le résultat suivant :
Différents JOIN SQL
Avant de continuer avec les exemples, listons d'abord les différents types de JOIN SQL que vous pouvez utiliser :
- INNER JOIN: Renvoie les lignes s'il y a au moins une correspondance dans la table
- LEFT JOIN: Renvoie toutes les lignes de la table de gauche même s'il n'y a aucune correspondance dans la table de droite
- RIGHT JOIN: Renvoie toutes les lignes de la table de droite même s'il n'y a pas de correspondances dans la table de gauche
- FULL JOIN: Renvoie les lignes tant qu'il y a une correspondance dans l'une des tables
