Podsumowanie :w tym samouczku dowiesz się, jak emulować pełne sprzężenie zewnętrzne SQLite za pomocą UNION i LEFT JOIN klauzule.
Wprowadzenie do SQL FULL OUTER JOIN klauzula
Teoretycznie wynik FULL OUTER JOIN jest kombinacją LEFT JOIN i RIGHT JOIN . Zestaw wyników pełnego sprzężenia zewnętrznego ma NULL wartości dla każdej kolumny tabeli, która nie ma pasującego wiersza w drugiej tabeli. Dla pasujących wierszy FULL OUTER JOIN tworzy pojedynczy wiersz z wartościami z kolumn wierszy w obu tabelach.
Poniższy rysunek ilustruje wynik FULL OUTER JOIN klauzula:
Zobacz następujące cats i dogs tabele.
-- 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)
Poniższa instrukcja używa FULL OUTER JOIN klauzula do zapytania o dane z dogs i cats tabele.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql) Poniżej przedstawiono wynik powyższego stwierdzenia:
| Typ | Kolor | Typ | Kolor |
|---|---|---|---|
| Polowanie | Czarny | Na zewnątrz | Czarny |
| Strażnik | Brązowy | NULL | NULL |
| NULL | NULL | Wewnątrz | Biały |
Niestety, SQLite nie obsługuje RIGHT JOIN klauzula, a także FULL OUTER JOIN klauzula. Możesz jednak łatwo emulować FULL OUTER JOIN za pomocą LEFT JOIN klauzula.
Emulowanie pełnego połączenia zewnętrznego SQLite
Poniższa instrukcja emuluje FULL OUTER JOIN klauzula w 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) Jak działa zapytanie.
- Ponieważ SQLilte nie obsługuje
RIGHT JOINklauzula, używamyLEFT JOINklauzula w drugimSELECTzamiast tego i zamień pozycjecatsidogsstoły. UNION ALLklauzula zachowuje zduplikowane wiersze z zestawów wyników obu zapytań.WHEREklauzula w drugimSELECTinstrukcja usuwa wiersze, które już zostały uwzględnione w zestawie wyników pierwszegoSELECToświadczenie.
W tym samouczku nauczyłeś się używać UNION ALL i LEFT JOIN klauzule emulujące SQLite FULL OUTER JOIN klauzula.