Resumo : neste tutorial, você aprenderá como emular a junção externa completa do SQLite usando as cláusulas UNION
e LEFT JOIN
.
Introdução à FULL OUTER JOIN
cláusula SQL
Em teoria, o resultado de the FULL OUTER JOIN
é uma combinação de a LEFT JOIN
e a RIGHT JOIN
. O conjunto de resultados da junção externa completa possui NULL
valores para cada coluna da tabela que não possui uma linha correspondente na outra tabela. Para as linhas correspondentes, FULL OUTER JOIN
produz uma única linha com valores das colunas das linhas em ambas as tabelas.
A imagem a seguir ilustra o resultado da FULL OUTER JOIN
cláusula:
Consulte o seguinte cats
e dogs
as 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 JOIN
cláusula para consultar dados das tabelas dogs
e 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 JOIN
cláusula e também a FULL OUTER JOIN
cláusula. No entanto, você pode emular facilmente FULL OUTER JOIN
usando a LEFT JOIN
cláusula.
Emulando junção externa completa do SQLite
A instrução a seguir emula a 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;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como funciona a consulta.
- Como o SQLilte não oferece suporte à
RIGHT JOIN
cláusula, usamos aLEFT JOIN
cláusula na segundaSELECT
instrução e trocamos as posições das tabelascats
e .dogs
- A
UNION ALL
cláusula retém as linhas duplicadas dos conjuntos de resultados de ambas as consultas. - A
WHERE
cláusula na segundaSELECT
instrução remove linhas já incluídas no conjunto de resultados da primeiraSELECT
instrução.
Neste tutorial, você aprendeu como usar as cláusulas UNION ALL
e LEFT JOIN
para emular a FULL OUTER JOIN
cláusula SQLite.