SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Emulação SQLite FULL OUTER JOIN


Resumo :neste tutorial, você aprenderá como emular a junção externa completa do SQLite usando o UNION e LEFT JOIN cláusulas.

Introdução ao SQL FULL OUTER JOIN cláusula


Em teoria, o resultado do FULL OUTER JOIN é uma combinação de um LEFT JOIN e um RIGHT JOIN . O conjunto de resultados da junção externa completa tem NULL valores para cada coluna da tabela que não possui uma linha correspondente na outra tabela. Para as linhas correspondentes, o FULL OUTER JOIN produz uma única linha com valores das colunas das linhas em ambas as tabelas.

A imagem a seguir ilustra o resultado do FULL OUTER JOIN cláusula:

Veja os seguintes cats e dogs mesas.
-- 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)

A instrução a seguir usa o FULL OUTER JOIN cláusula para consultar dados dos dogs e cats mesas.
SELECT *
FROM dogs 
FULL OUTER JOIN cats
    ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql)

O seguinte mostra o resultado da declaração acima:
Tipo Cor Tipo Cor
Caça Preto Exterior Preto
Guarda Marrom NULO NULO
NULO NULO Interior Branco

Infelizmente, o SQLite não suporta o RIGHT JOIN cláusula e também a FULL OUTER JOIN cláusula. No entanto, você pode facilmente emular o FULL OUTER JOIN usando o LEFT JOIN cláusula.

Emulando a junção externa completa do SQLite


A instrução a seguir emula o FULL OUTER JOIN cláusula no 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)

Como funciona a consulta.
  • Como o SQLilte não suporta o RIGHT JOIN cláusula, usamos o LEFT JOIN cláusula no segundo SELECT em vez disso e mude as posições dos cats e dogs tabelas.
  • A UNION ALL cláusula retém as linhas duplicadas dos conjuntos de resultados de ambas as consultas.
  • O WHERE cláusula no segundo SELECT A instrução remove as linhas que já estão incluídas no conjunto de resultados do primeiro SELECT declaração.

Neste tutorial, você aprendeu como usar o UNION ALL e LEFT JOIN cláusulas para emular o SQLite FULL OUTER JOIN cláusula.