SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite FULL OUTER JOIN-Emulation

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 den LEFT JOIN -Klausel im zweiten SELECT -Anweisung und vertausche die Positionen der cats und dogs Tabellen.
  • Die UNION ALL -Klausel behält die doppelten Zeilen aus den Ergebnismengen beider Abfragen bei.
  • Das WHERE -Klausel im zweiten SELECT -Anweisung entfernt Zeilen, die bereits in der Ergebnismenge des ersten SELECT 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.