Zusammenfassung :In diesem Tutorial erfahren Sie, wie Sie mit UNION eine vollständige äußere Verknüpfung von SQLite emulieren und LEFT JOIN Klauseln.
Einführung in SQL FULL OUTER JOIN Klausel
Theoretisch das Ergebnis des FULL OUTER JOIN ist eine Kombination aus einem LEFT JOIN und ein RIGHT JOIN . Die Ergebnismenge des vollständigen äußeren Joins hat NULL Werte für jede Spalte der Tabelle, die keine übereinstimmende Zeile in der anderen Tabelle hat. Für die übereinstimmenden Zeilen der FULL OUTER JOIN erzeugt eine einzelne Zeile mit Werten aus den Spalten der Zeilen in beiden Tabellen.
Das folgende Bild veranschaulicht das Ergebnis des FULL OUTER JOIN Klausel:
Siehe die folgenden cats und dogs Tabellen.
-- create and insert data into the dogs table
CREATE TABLE dogs (
type TEXT,
color TEXT
);
INSERT INTO dogs(type, color)
VALUES('Hunting','Black'), ('Guard','Brown');
-- create and insert data into the cats table
CREATE TABLE cats (
type TEXT,
color TEXT
);
INSERT INTO cats(type,color)
VALUES('Indoor','White'),
('Outdoor','Black');Code language: SQL (Structured Query Language) (sql)
Die folgende Anweisung verwendet den FULL OUTER JOIN -Klausel, um Daten von den dogs abzufragen und cats Tabellen.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql) Das Folgende zeigt das Ergebnis der obigen Anweisung:
| Typ | Farbe | Typ | Farbe |
|---|---|---|---|
| Jagd | Schwarz | Im Freien | Schwarz |
| Wache | Braun | NULL | NULL |
| NULL | NULL | Innenbereich | Weiß |
Leider unterstützt SQLite den RIGHT JOIN nicht -Klausel und auch den FULL OUTER JOIN Klausel. Sie können jedoch ganz einfach den FULL OUTER JOIN emulieren indem Sie den LEFT JOIN verwenden Klausel.
Emulieren des vollständigen äußeren Joins von SQLite
Die folgende Anweisung emuliert den FULL OUTER JOIN -Klausel in SQLite:
SELECT d.type,
d.color,
c.type,
c.color
FROM dogs d
LEFT JOIN cats c USING(color)
UNION ALL
SELECT d.type,
d.color,
c.type,
c.color
FROM cats c
LEFT JOIN dogs d USING(color)
WHERE d.color IS NULL;Code language: SQL (Structured Query Language) (sql) Funktionsweise der Abfrage.
- Weil SQLilte den
RIGHT JOINnicht unterstützt -Klausel verwenden wir denLEFT JOIN-Klausel im zweitenSELECT-Anweisung und vertausche die Positionen dercatsunddogsTabellen. - Die
UNION ALL-Klausel behält die doppelten Zeilen aus den Ergebnismengen beider Abfragen bei. - Das
WHERE-Klausel im zweitenSELECT-Anweisung entfernt Zeilen, die bereits in der Ergebnismenge des erstenSELECTenthalten sind Erklärung.
In diesem Tutorial haben Sie gelernt, wie man UNION ALL verwendet und LEFT JOIN -Klauseln, um den FULL OUTER JOIN von SQLite zu emulieren Klausel.