Riepilogo :in questo tutorial imparerai come emulare SQLite full outer join usando UNION
e LEFT JOIN
clausole.
Introduzione a SQL FULL OUTER JOIN
clausola
In teoria, il risultato del FULL OUTER JOIN
è una combinazione di un LEFT JOIN
e un RIGHT JOIN
. Il set di risultati del join esterno completo ha NULL
valori per ogni colonna della tabella che non ha una riga corrispondente nell'altra tabella. Per le righe corrispondenti, il FULL OUTER JOIN
produce una singola riga con valori dalle colonne delle righe in entrambe le tabelle.
L'immagine seguente illustra il risultato del FULL OUTER JOIN
clausola:
Vedi i seguenti cats
e dogs
tabelle.
-- 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)
La seguente istruzione usa il FULL OUTER JOIN
clausola per interrogare i dati dai dogs
e cats
tabelle.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;
Code language: SQL (Structured Query Language) (sql)
Quanto segue mostra il risultato della dichiarazione di cui sopra:
Tipo | Colore | Tipo | Colore |
---|---|---|---|
Caccia | Nero | All'aperto | Nero |
Guardia | Marrone | NULLO | NULLO |
NULLO | NULLO | Al coperto | Bianco |
Sfortunatamente, SQLite non supporta il RIGHT JOIN
clausola e anche il FULL OUTER JOIN
clausola. Tuttavia, puoi facilmente emulare il FULL OUTER JOIN
utilizzando il LEFT JOIN
clausola.
Emulare il join esterno completo di SQLite
La seguente istruzione emula il FULL OUTER JOIN
clausola 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)
Come funziona la query.
- Perché SQLilte non supporta il
RIGHT JOIN
clausola, utilizziamo ilLEFT JOIN
clausola nel secondoSELECT
istruzione invece e scambiare le posizioni deicats
edogs
tabelle. - Il
UNION ALL
La clausola conserva le righe duplicate dai set di risultati di entrambe le query. - Il
WHERE
clausola nel secondoSELECT
rimuove le righe già incluse nel set di risultati del primoSELECT
dichiarazione.
In questo tutorial, hai imparato a usare UNION ALL
e LEFT JOIN
clausole per emulare SQLite FULL OUTER JOIN
clausola.