Резюме :в този урок ще научите как да емулирате пълно външно присъединяване на SQLite с помощта на UNION
и LEFT JOIN
клаузи.
Въведение в SQL FULL OUTER JOIN
клауза
На теория резултатът от FULL OUTER JOIN
е комбинация от LEFT JOIN
и RIGHT JOIN
. Резултатът от пълното външно присъединяване има NULL
стойности за всяка колона на таблицата, която няма съвпадащ ред в другата таблица. За съвпадащите редове, FULL OUTER JOIN
произвежда един ред със стойности от колони на редовете в двете таблици.
Следната снимка илюстрира резултата от FULL OUTER JOIN
клауза:
Вижте следните cats
и dogs
таблици.
-- 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)
Следващият израз използва FULL OUTER JOIN
клауза за запитване на данни от dogs
и cats
таблици.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;
Code language: SQL (Structured Query Language) (sql)
Следното показва резултата от изявлението по-горе:
Тип | Цвят | Тип | Цвят |
---|---|---|---|
Лов | Черно | На открито | Черно |
Охрана | Кафяв | NULL | NULL |
NULL | NULL | На закрито | Бял |
За съжаление, SQLite не поддържа RIGHT JOIN
клауза, а също и FULL OUTER JOIN
клауза. Можете обаче лесно да емулирате FULL OUTER JOIN
като използвате LEFT JOIN
клауза.
Емулиране на пълно външно присъединяване на SQLite
Следното изявление емулира FULL OUTER JOIN
клауза в 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)
Как работи заявката.
- Защото SQLilte не поддържа
RIGHT JOIN
клауза, ние използвамеLEFT JOIN
клауза във вторияSELECT
вместо това и превключете позициите наcats
иdogs
таблици. UNION ALL
клаузата запазва дублиращите се редове от наборите от резултати и на двете заявки.WHERE
клауза във вторияSELECT
оператор премахва редове, които вече са включени в резултатния набор на първияSELECT
изявление.
В този урок научихте как да използвате UNION ALL
и LEFT JOIN
клаузи за емулиране на SQLite FULL OUTER JOIN
клауза.