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.

SQL FULL OUTER JOIN

Funktionen

  • Gibt die Vereinigung der beiden Tabellen zurück: Enthält alle übereinstimmenden und nicht übereinstimmenden Datensätze.
  • Nicht übereinstimmende Datensätze werden aufgefülltNULL: 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-TypZurückgegebener Inhalt
INNER JOINDer Schnittmengenteil der beiden Tabellen, übereinstimmende Datensätze
LEFT JOINAlle Datensätze aus der linken Tabelle und übereinstimmende Datensätze aus der rechten Tabelle
RIGHT JOINAlle Datensätze aus der rechten Tabelle und übereinstimmende Datensätze aus der linken Tabelle
FULL OUTER JOINDer 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

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;

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