SQLite
 sql >> база данни >  >> RDS >> SQLite

Емулация на SQLite FULL OUTER JOIN

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite ВАКУУМ

  2. Как да конвертирате в главни букви в SQLite

  3. Поставяне на данни за курсора в масив

  4. Вземете първия понеделник от месеца в SQLite

  5. Индекс, базиран на SQLite Expression