Резюме :в този урок ще научите как да емулирате пълно външно присъединяване на 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 клауза.