SQL FULL OUTER JOINSchlüsselwörter
FULL OUTER JOIN ist eine Art von Join in SQL, die alle Datensätze aus beiden Tabellen beibehält, selbst wenn in einer von ihnen keine Übereinstimmung vorhanden ist.
Das Ergebnis von FULL OUTER JOIN enthält Datensätze, die die Bedingung in beiden Tabellen erfüllen (der Teil der Schnittmenge), sowie Datensätze, die die Bedingung nicht erfüllen (der Teil der Vereinigung, der nicht zur Schnittmenge gehört). Wenn ein Datensatz in einer Tabelle vorhanden ist, aber keine Entsprechung in der anderen Tabelle hat, werden die fehlenden Spalten dieses Datensatzes mit NULL gefüllt.
Das Schlüsselwort FULL OUTER JOIN gibt Zeilen zurück, solange es eine Übereinstimmung entweder in der linken Tabelle (table1) oder in der rechten Tabelle (table2) gibt.
Das Schlüsselwort FULL OUTER JOIN kombiniert die Ergebnisse von LEFT JOIN und RIGHT JOIN.
SQL FULL OUTER JOIN-Syntax
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name;
- table1、table2: Die beiden Tabellen, die verknüpft werden müssen.
- ON table1.column_name=table2.column_name: Gibt die Join-Bedingung an, normalerweise das gemeinsame Feld der beiden Tabellen.
- column_name(s) : Auswahl der benötigten Felder aus den beiden Tabellen.

Funktionen
- Gibt die Vereinigung der beiden Tabellen zurück: Enthält alle übereinstimmenden und nicht übereinstimmenden Datensätze.
- Nicht übereinstimmende Datensätze werden aufgefüllt
NULL: Wenn ein Datensatz in einer Tabelle keine Entsprechung hat, werden seine entsprechenden Felder alsNULL. - Äquivalenz:
FULL OUTER JOINEnthältLEFT JOINundRIGHT JOINdie Ergebnisse von.
Angenommen, es gibt zwei Tabellen:StudentsundCourses。
Studenten-Tabelle:
| StudentID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
Courses-Tabelle:
| CourseID | StudentID | CourseName |
|---|---|---|
| 101 | 1 | Math |
| 102 | 2 | Naturwissenschaft |
| 103 | 4 | Verlauf |
Abfrage mit FULL OUTER JOIN
SELECT Students.StudentID, Students.Name, Courses.CourseName FROM Students FULL OUTER JOIN Courses ON Students.StudentID = Courses.StudentID;
Abfrageausgabe-Ergebnis:
| StudentID | Name | CourseName |
|---|---|---|
| 1 | Alice | Math |
| 2 | Bob | Naturwissenschaft |
| 3 | Charlie | NULL |
| 4 | NULL | Verlauf |
Erklärung:
StudentID = 1und2Ist der Schnittmengenteil, mit Daten in beiden Tabellen.StudentID = 3Existiert inStudentsTabelle, aber inCoursesTabelle gibt es keine Übereinstimmung,CourseNamedie Spalte istNULL。StudentID = 4Existiert inCoursesTabelle, aber inStudentsTabelle gibt es keine Übereinstimmung,Namedie Spalte istNULL。
Zusammenfassung
| JOIN-Typ | Zurückgegebener Inhalt |
|---|---|
INNER JOIN | Der Schnittmengenteil der beiden Tabellen, übereinstimmende Datensätze |
LEFT JOIN | Alle Datensätze aus der linken Tabelle und übereinstimmende Datensätze aus der rechten Tabelle |
RIGHT JOIN | Alle Datensätze aus der rechten Tabelle und übereinstimmende Datensätze aus der linken Tabelle |
FULL OUTER JOIN | Der Vereinigungsbereich der beiden Tabellen, der übereinstimmende und nicht übereinstimmende Datensätze enthält |
Demo-Datenbank
In diesem Tutorial verwenden wir die Beispieldatenbank EXAMPLE.
Nachfolgend sind die Daten aufgeführt, die aus der Tabelle "Websites" ausgewählt wurden:
+----+--------------+---------------------------+-------+---------+ | 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 | +----+---------------+---------------------------+-------+---------+
Nachstehend sind die Daten aus der Tabelle "access_log" mit den Website-Zugriffsdatensätzen:
+-----+---------+-------+------------+ | 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)
Beispiel für SQL FULL OUTER JOIN
Die folgende SQL-Anweisung wählt alle Website-Zugriffsdatensätze aus.
MySQL unterstützt FULL OUTER JOIN nicht; Sie können das folgende Beispiel in SQL Server testen.
Beispiel
FROM Websites
FULL OUTER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
Hinweis:Das Schlüsselwort FULL OUTER JOIN gibt alle Zeilen aus der linken Tabelle (Websites) und der rechten Tabelle (access_log) zurück. Wenn eine Zeile in der Tabelle "Websites" keine Entsprechung in "access_log" hat oder eine Zeile in der Tabelle "access_log" keine Entsprechung in der Tabelle "Websites" hat, werden diese Zeilen ebenfalls aufgelistet.
Andere Erweiterungen