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 JOINclausola, utilizziamo ilLEFT JOINclausola nel secondoSELECTistruzione invece e scambiare le posizioni deicatsedogstabelle. - Il
UNION ALLLa clausola conserva le righe duplicate dai set di risultati di entrambe le query. - Il
WHEREclausola nel secondoSELECTrimuove le righe già incluse nel set di risultati del primoSELECTdichiarazione.
In questo tutorial, hai imparato a usare UNION ALL e LEFT JOIN clausole per emulare SQLite FULL OUTER JOIN clausola.