SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Emulacja SQLite FULL OUTER JOIN

Podsumowanie :w tym samouczku dowiesz się, jak emulować pełne sprzężenie zewnętrzne SQLite za pomocą UNION i LEFT JOIN klauzule.

Wprowadzenie do SQL FULL OUTER JOIN klauzula

Teoretycznie wynik FULL OUTER JOIN jest kombinacją LEFT JOIN i RIGHT JOIN . Zestaw wyników pełnego sprzężenia zewnętrznego ma NULL wartości dla każdej kolumny tabeli, która nie ma pasującego wiersza w drugiej tabeli. Dla pasujących wierszy FULL OUTER JOIN tworzy pojedynczy wiersz z wartościami z kolumn wierszy w obu tabelach.

Poniższy rysunek ilustruje wynik FULL OUTER JOIN klauzula:

Zobacz następujące cats i dogs tabele.

-- 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)

Poniższa instrukcja używa FULL OUTER JOIN klauzula do zapytania o dane z dogs i cats tabele.

SELECT *
FROM dogs 
FULL OUTER JOIN cats
    ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql)

Poniżej przedstawiono wynik powyższego stwierdzenia:

Typ Kolor Typ Kolor
Polowanie Czarny Na zewnątrz Czarny
Strażnik Brązowy NULL NULL
NULL NULL Wewnątrz Biały

Niestety, SQLite nie obsługuje RIGHT JOIN klauzula, a także FULL OUTER JOIN klauzula. Możesz jednak łatwo emulować FULL OUTER JOIN za pomocą LEFT JOIN klauzula.

Emulowanie pełnego połączenia zewnętrznego SQLite

Poniższa instrukcja emuluje FULL OUTER JOIN klauzula w 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)

Jak działa zapytanie.

  • Ponieważ SQLilte nie obsługuje RIGHT JOIN klauzula, używamy LEFT JOIN klauzula w drugim SELECT zamiast tego i zamień pozycje cats i dogs stoły.
  • UNION ALL klauzula zachowuje zduplikowane wiersze z zestawów wyników obu zapytań.
  • WHERE klauzula w drugim SELECT instrukcja usuwa wiersze, które już zostały uwzględnione w zestawie wyników pierwszego SELECT oświadczenie.

W tym samouczku nauczyłeś się używać UNION ALL i LEFT JOIN klauzule emulujące SQLite FULL OUTER JOIN klauzula.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak iif() działa w SQLite

  2. SQLite - Aktualizuj dane

  3. Biblioteka Android Room nie może skopiować bazy danych z zasobu

  4. Dane są wypełniane na podstawie daty określonej tabeli zamiast wszystkich tabel w sqlite

  5. Czy naprawdę konieczne jest tworzenie tabel SQLite przy każdym uruchomieniu aplikacji?