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 oLEFT JOIN
cláusula no segundoSELECT
em vez disso e mude as posições doscats
edogs
tabelas. - A
UNION ALL
cláusula retém as linhas duplicadas dos conjuntos de resultados de ambas as consultas. - O
WHERE
cláusula no segundoSELECT
A instrução remove as linhas que já estão incluídas no conjunto de resultados do primeiroSELECT
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.