Résumé :dans ce didacticiel, vous apprendrez à émuler la jointure externe complète SQLite à l'aide de l'UNION et LEFT JOIN clauses.
Introduction à SQL FULL OUTER JOIN clause
En théorie, le résultat de la FULL OUTER JOIN est une combinaison d'un LEFT JOIN et un RIGHT JOIN . Le jeu de résultats de la jointure externe complète a NULL valeurs pour chaque colonne de la table qui n'a pas de ligne correspondante dans l'autre table. Pour les lignes correspondantes, le FULL OUTER JOIN produit une seule ligne avec les valeurs des colonnes des lignes des deux tables.
L'image suivante illustre le résultat de la FULL OUTER JOIN clause :
Voir les cats suivants et dogs tableaux.
-- 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)
L'instruction suivante utilise le FULL OUTER JOIN clause pour interroger les données des dogs et cats tableaux.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql) Voici le résultat de l'instruction ci-dessus :
| Type | Couleur | Tapez | Couleur |
|---|---|---|---|
| Chasse | Noir | Extérieur | Noir |
| Garde | Marron | NULL | NULL |
| NULL | NULL | Intérieur | Blanc |
Malheureusement, SQLite ne prend pas en charge le RIGHT JOIN clause et aussi la FULL OUTER JOIN clause. Cependant, vous pouvez facilement émuler le FULL OUTER JOIN en utilisant le LEFT JOIN clause.
Émulation de la jointure externe complète SQLite
L'instruction suivante émule le FULL OUTER JOIN clause dans 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) Fonctionnement de la requête.
- Parce que SQLilte ne prend pas en charge le
RIGHT JOINclause, nous utilisons leLEFT JOINclause dans le secondSELECTà la place et inversez les positions descatsetdogstableaux. - L'
UNION ALLLa clause conserve les lignes en double des jeux de résultats des deux requêtes. - Le
WHEREclause dans le secondSELECTL'instruction supprime les lignes déjà incluses dans le jeu de résultats du premierSELECTdéclaration.
Dans ce tutoriel, vous avez appris à utiliser le UNION ALL et LEFT JOIN clauses pour émuler SQLite FULL OUTER JOIN clause.