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 JOIN
klauzula, używamyLEFT JOIN
klauzula w drugimSELECT
zamiast tego i zamień pozycjecats
idogs
stoły. UNION ALL
klauzula zachowuje zduplikowane wiersze z zestawów wyników obu zapytań.WHERE
klauzula w drugimSELECT
instrukcja usuwa wiersze, które już zostały uwzględnione w zestawie wyników pierwszegoSELECT
oświadczenie.
W tym samouczku nauczyłeś się używać UNION ALL
i LEFT JOIN
klauzule emulujące SQLite FULL OUTER JOIN
klauzula.