SQLite
 sql >> Database >  >> RDS >> SQLite

Emulazione SQLite FULL OUTER JOIN

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 il LEFT JOIN clausola nel secondo SELECT istruzione invece e scambiare le posizioni dei cats e dogs tabelle.
  • Il UNION ALL La clausola conserva le righe duplicate dai set di risultati di entrambe le query.
  • Il WHERE clausola nel secondo SELECT rimuove le righe già incluse nel set di risultati del primo SELECT dichiarazione.

In questo tutorial, hai imparato a usare UNION ALL e LEFT JOIN clausole per emulare SQLite FULL OUTER JOIN clausola.