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 JOINcláusula, usamos oLEFT JOINcláusula no segundoSELECTem vez disso e mude as posições doscatsedogstabelas. - A
UNION ALLcláusula retém as linhas duplicadas dos conjuntos de resultados de ambas as consultas. - O
WHEREcláusula no segundoSELECTA instrução remove as linhas que já estão incluídas no conjunto de resultados do primeiroSELECTdeclaração.
Neste tutorial, você aprendeu como usar o
UNION ALL e LEFT JOIN cláusulas para emular o SQLite FULL OUTER JOIN cláusula.