Shrnutí :v tomto tutoriálu se naučíte, jak emulovat SQLite úplné vnější spojení pomocí UNION
a LEFT JOIN
klauzule.
Úvod do SQL FULL OUTER JOIN
klauzule
Teoreticky výsledek FULL OUTER JOIN
je kombinací LEFT JOIN
a RIGHT JOIN
. Výsledná sada úplného vnějšího spojení má NULL
hodnoty pro každý sloupec tabulky, který nemá odpovídající řádek v jiné tabulce. Pro odpovídající řádky FULL OUTER JOIN
vytvoří jeden řádek s hodnotami ze sloupců řádků v obou tabulkách.
Následující obrázek ukazuje výsledek FULL OUTER JOIN
klauzule:
Viz následující cats
a dogs
tabulky.
-- 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)
Následující příkaz používá FULL OUTER JOIN
klauzule k dotazování na data od dogs
a cats
tabulky.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;
Code language: SQL (Structured Query Language) (sql)
Následující ukazuje výsledek výše uvedeného příkazu:
Typ | Barva | Typ | Barva |
---|---|---|---|
Lov | Černá | Venkovní | Černá |
Stráž | Hnědá | NULL | NULL |
NULL | NULL | Uvnitř | Bílá |
Bohužel SQLite nepodporuje RIGHT JOIN
klauzule a také FULL OUTER JOIN
doložka. Můžete však snadno emulovat FULL OUTER JOIN
pomocí LEFT JOIN
doložka.
Emulace úplného vnějšího spojení SQLite
Následující příkaz emuluje FULL OUTER JOIN
klauzule v 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 dotaz funguje.
- Protože SQLilte nepodporuje
RIGHT JOIN
klauzule, používámeLEFT JOIN
klauzule ve druhémSELECT
a změňte pozicecats
adogs
tabulky. UNION ALL
klauzule zachovává duplicitní řádky ze sad výsledků obou dotazů.WHERE
klauzule ve druhémSELECT
příkaz odstraní řádky, které již byly zahrnuty v sadě výsledků prvníhoSELECT
prohlášení.
V tomto tutoriálu jste se naučili používat UNION ALL
a LEFT JOIN
klauzule k emulaci SQLite FULL OUTER JOIN
doložka.