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 JOIN
niet ondersteunt clausule gebruiken we deLEFT JOIN
clausule in de tweedeSELECT
statement in plaats daarvan en verander de posities van decats
endogs
tabellen. - De
UNION ALL
clausule behoudt de dubbele rijen uit de resultaatsets van beide zoekopdrachten. - De
WHERE
clausule in de tweedeSELECT
statement verwijdert rijen die al waren opgenomen in de resultatenset van de eersteSELECT
verklaring.
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.