SQL FULL OUTER JOINMots-clés
FULL OUTER JOIN est un type de jointure en SQL qui conserve tous les enregistrements des deux tables, même s'il n'y a pas de correspondance dans l'une d'elles.
Le résultat de FULL OUTER JOIN inclut les enregistrements qui satisfont la condition dans les deux tables (la partie d'intersection) ainsi que les enregistrements qui ne satisfont pas la condition (la partie non-intersection de l'union). Si un enregistrement existe dans une table mais n'a pas de correspondance dans l'autre table, les colonnes manquantes de cet enregistrement seront remplies avec NULL.
Le mot-clé FULL OUTER JOIN renvoie des lignes dès qu'il y a une correspondance dans la table de gauche (table1) ou dans la table de droite (table2).
Le mot-clé FULL OUTER JOIN combine les résultats de LEFT JOIN et RIGHT JOIN.
Syntaxe de SQL FULL OUTER JOIN
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name;
- table1、table2: Les deux tables qui doivent être jointes.
- ON table1.column_name=table2.column_name: Spécifie la condition de jointure, généralement le champ commun des deux tables.
- column_name(s) : Sélectionnez les champs requis dans les deux tables.

Fonctionnalités
- Renvoie l'union des deux tables: Contient tous les enregistrements correspondants et non correspondants.
- Les enregistrements non correspondants sont remplis
NULL: Si un enregistrement n'a pas de correspondance dans une table, ses champs correspondants sont représentés commeNULL. - Équivalence:
FULL OUTER JOINContientLEFT JOINetRIGHT JOINles résultats de.
Supposons qu'il y ait deux tables :StudentsetCourses。
Table des étudiants:
| StudentID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
Table Courses:
| CourseID | StudentID | CourseName |
|---|---|---|
| 101 | 1 | Math |
| 102 | 2 | Science |
| 103 | 4 | Historique |
Requête utilisant FULL OUTER JOIN
SELECT Students.StudentID, Students.Name, Courses.CourseName FROM Students FULL OUTER JOIN Courses ON Students.StudentID = Courses.StudentID;
Résultat de sortie de la requête:
| StudentID | Name | CourseName |
|---|---|---|
| 1 | Alice | Math |
| 2 | Bob | Science |
| 3 | Charlie | NULL |
| 4 | NULL | Historique |
Explication:
StudentID = 1et2Est la partie d'intersection, avec des données dans les deux tables.StudentID = 3Existe dansStudentstable, mais dansCoursestable, il n'y a pas de correspondance,CourseNamela colonne estNULL。StudentID = 4Existe dansCoursestable, mais dansStudentstable, il n'y a pas de correspondance,Namela colonne estNULL。
Résumé
| Type de JOIN | Contenu renvoyé |
|---|---|
INNER JOIN | La partie intersection des deux tables, les enregistrements correspondants |
LEFT JOIN | Tous les enregistrements de la table de gauche, et les enregistrements correspondants de la table de droite |
RIGHT JOIN | Tous les enregistrements de la table de droite, et les enregistrements correspondants de la table de gauche |
FULL OUTER JOIN | La partie union des deux tables, contenant les enregistrements correspondants et non correspondants |
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 | +----+---------------+---------------------------+-------+---------+
Voici les données de la table des enregistrements d'accès au site Web "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 FULL OUTER JOIN SQL
L'instruction SQL suivante sélectionne tous les enregistrements d'accès au site Web.
MySQL ne prend pas en charge FULL OUTER JOIN ; vous pouvez tester l'exemple suivant dans SQL Server.
Exemple
FROM Websites
FULL OUTER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
Remarque :Le mot-clé FULL OUTER JOIN renvoie toutes les lignes de la table de gauche (Websites) et de la table de droite (access_log). Si une ligne de la table "Websites" n'a pas de correspondance dans "access_log", ou si une ligne de la table "access_log" n'a pas de correspondance dans la table "Websites", ces lignes seront également listées.
Autres extensions