Samenvatting :in deze tutorial leer je hoe je SQLite volledige outer join emuleert met behulp van de UNION en LEFT JOIN clausules.
Inleiding tot SQL FULL OUTER JOIN clausule
In theorie is het resultaat van de FULL OUTER JOIN is een combinatie van een LEFT JOIN en een RIGHT JOIN . De resultaatset van de volledige outer join heeft NULL waarden voor elke kolom van de tabel die geen overeenkomende rij heeft in de andere tabel. Voor de overeenkomende rijen, de FULL OUTER JOIN produceert een enkele rij met waarden uit kolommen van de rijen in beide tabellen.
De volgende afbeelding illustreert het resultaat van de FULL OUTER JOIN clausule:
Zie de volgende cats en 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)
De volgende instructie gebruikt de FULL OUTER JOIN clausule om gegevens op te vragen van de dogs en cats tabellen.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql) Het volgende toont het resultaat van de bovenstaande verklaring:
| Type | Kleur | Type | Kleur |
|---|---|---|---|
| Jagen | Zwart | Buiten | Zwart |
| Bewaker | Bruin | NULL | NULL |
| NULL | NULL | Binnen | Wit |
Helaas ondersteunt SQLite de RIGHT JOIN . niet clausule en ook de FULL OUTER JOIN clausule. U kunt echter eenvoudig de FULL OUTER JOIN . emuleren door de LEFT JOIN . te gebruiken clausule.
Emuleert SQLite volledige outer join
De volgende instructie emuleert de FULL OUTER JOIN clausule 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) Hoe de zoekopdracht werkt.
- Omdat SQLilte de
RIGHT JOINniet ondersteunt clausule gebruiken we deLEFT JOINclausule in de tweedeSELECTstatement in plaats daarvan en verander de posities van decatsendogstabellen. - De
UNION ALLclausule behoudt de dubbele rijen uit de resultaatsets van beide zoekopdrachten. - De
WHEREclausule in de tweedeSELECTstatement verwijdert rijen die al waren opgenomen in de resultatenset van de eersteSELECTverklaring.
In deze zelfstudie hebt u geleerd hoe u de UNION ALL . gebruikt en LEFT JOIN clausules om de SQLite FULL OUTER JOIN te emuleren clausule.