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 JOIN
nicht unterstützt -Klausel verwenden wir denLEFT JOIN
-Klausel im zweitenSELECT
-Anweisung und vertausche die Positionen dercats
unddogs
Tabellen. - 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 erstenSELECT
enthalten 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.