Emulação SQLite FULL OUTER JOIN

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

Introdução à FULL OUTER JOINcláusula SQL

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

A imagem a seguir ilustra o resultado da FULL OUTER JOINcláusula:

Junção externa completa do SQLite

Consulte o seguinte catse dogsas tabelas.

-- 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');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A instrução a seguir usa a FULL OUTER JOINcláusula para consultar dados das tabelas dogse cats.

SELECT *
FROM dogs 
FULL OUTER JOIN cats
    ON dogs.color = cats.color;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A seguir mostra-se o resultado da afirmação acima:

Tipo Cor Tipo Cor
Caçando Preto Ar livre Preto
Guarda Marrom NULO NULO
NULO NULO Interior Branco

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

Emulando junção externa completa do SQLite

A instrução a seguir emula a FULL OUTER JOINclá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;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como funciona a consulta.

  • Como o SQLilte não oferece suporte à RIGHT JOINcláusula, usamos a LEFT JOINcláusula na segunda SELECTinstrução e trocamos as posições das tabelas catse .dogs
  • A UNION ALLcláusula retém as linhas duplicadas dos conjuntos de resultados de ambas as consultas.
  • A WHEREcláusula na segunda SELECTinstrução remove linhas já incluídas no conjunto de resultados da primeira SELECTinstrução.

Neste tutorial, você aprendeu como usar as cláusulas UNION ALLe LEFT JOINpara emular a FULL OUTER JOINcláusula SQLite.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *