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.

SQL FULL OUTER JOIN

Fonctionnalités

  • Renvoie l'union des deux tables: Contient tous les enregistrements correspondants et non correspondants.
  • Les enregistrements non correspondants sont remplisNULL: 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 JOINContenu renvoyé
INNER JOINLa partie intersection des deux tables, les enregistrements correspondants
LEFT JOINTous les enregistrements de la table de gauche, et les enregistrements correspondants de la table de droite
RIGHT JOINTous les enregistrements de la table de droite, et les enregistrements correspondants de la table de gauche
FULL OUTER JOINLa 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

SELECT Websites.name, access_log.count, access_log.date
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