Resumen :en este tutorial, aprenderá cómo emular la unión externa completa de SQLite usando UNION y LEFT JOIN cláusulas.
Introducción a SQL FULL OUTER JOIN cláusula
En teoría, el resultado de FULL OUTER JOIN es una combinación de LEFT JOIN y un RIGHT JOIN . El conjunto de resultados de la unión externa completa tiene NULL valores para cada columna de la tabla que no tiene una fila coincidente en la otra tabla. Para las filas coincidentes, FULL OUTER JOIN produce una sola fila con valores de las columnas de las filas en ambas tablas.
La siguiente imagen ilustra el resultado de FULL OUTER JOIN cláusula:
Ver los siguientes cats y 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)
La siguiente instrucción utiliza FULL OUTER JOIN cláusula para consultar datos de los dogs y cats mesas.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql) A continuación se muestra el resultado de la afirmación anterior:
| Tipo | Color | Tipo | Color |
|---|---|---|---|
| Caza | Negro | Al aire libre | Negro |
| Guardia | Marrón | NULO | NULO |
| NULO | NULO | Interior | Blanco |
Desafortunadamente, SQLite no es compatible con RIGHT JOIN y también la cláusula FULL OUTER JOIN cláusula. Sin embargo, puede emular fácilmente el FULL OUTER JOIN usando el LEFT JOIN cláusula.
Emular la combinación externa completa de SQLite
La siguiente declaración emula el FULL OUTER JOIN cláusula en 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) Cómo funciona la consulta.
- Porque SQLilte no es compatible con
RIGHT JOINcláusula, usamos laLEFT JOINcláusula en el segundoSELECTdeclaración en su lugar y cambiar las posiciones de loscatsydogsmesas. - La
UNION ALLcláusula conserva las filas duplicadas de los conjuntos de resultados de ambas consultas. - El
WHEREcláusula en el segundoSELECTdeclaración elimina filas que ya están incluidas en el conjunto de resultados del primerSELECTdeclaración.
En este tutorial, ha aprendido a usar UNION ALL y LEFT JOIN cláusulas para emular SQLite FULL OUTER JOIN cláusula.