SQLite
 sql >> Base de données >  >> RDS >> SQLite

Émulation SQLite FULL OUTER JOIN

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 JOIN clause, nous utilisons le LEFT JOIN clause dans le second SELECT à la place et inversez les positions des cats et dogs tableaux.
  • L'UNION ALL La clause conserve les lignes en double des jeux de résultats des deux requêtes.
  • Le WHERE clause dans le second SELECT L'instruction supprime les lignes déjà incluses dans le jeu de résultats du premier SELECT déclaration.

Dans ce tutoriel, vous avez appris à utiliser le UNION ALL et LEFT JOIN clauses pour émuler SQLite FULL OUTER JOIN clause.