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 JOINklauzule, používámeLEFT JOINklauzule ve druhémSELECTa změňte pozicecatsadogstabulky. UNION ALLklauzule zachovává duplicitní řádky ze sad výsledků obou dotazů.WHEREklauzule ve druhémSELECTpříkaz odstraní řádky, které již byly zahrnuty v sadě výsledků prvníhoSELECTprohláš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.