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

Dołącz do SQLite

Podsumowanie :w tym samouczku dowiesz się o różnych rodzajach złączeń SQLite w celu zapytania o dane z dwóch lub więcej tabel.

Do demonstracji użyjemy artists i albums tabele z przykładowej bazy danych.

Wykonawca może mieć zero lub wiele albumów, podczas gdy album należy do jednego artysty.

Aby zapytać o dane od obu artists i albums tabele, których używasz, możesz użyć INNER JOIN , LEFT JOIN lub CROSS JOIN klauzula. Każda klauzula join określa, w jaki sposób SQLite używa danych z jednej tabeli, aby dopasować się do wierszy w innej tabeli.

Zauważ, że SQLite nie obsługuje bezpośrednio RIGHT JOIN i FULL OUTER JOIN .

SQLite INNER JOIN

Poniższe stwierdzenie zwraca tytuły albumów i ich nazwy wykonawców:

SELECT 
    Title,
    Name
FROM 
    albums
INNER JOIN artists 
    ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)

Oto częściowe wyjście:

W tym przykładzie INNER JOIN klauzula pasuje do każdego wiersza z albums tabela z każdym wierszem od artists tabela na podstawie warunku łączenia (artists.ArtistId = albums.ArtistId ) określony po ON słowo kluczowe.

Jeśli warunek łączenia ma wartość true (lub 1), kolumny wierszy z obu albums i artists tabele są zawarte w zestawie wyników.

To zapytanie używa aliasów tabeli (l dla albums table i r dla artists tabela), aby skrócić zapytanie:

SELECT
    l.Title, 
    r.Name
FROM
    albums l
INNER JOIN artists r ON
    r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)

W przypadku, gdy nazwy kolumn połączonych tabel są takie same, np. ArtistId , możesz użyć USING składnia w następujący sposób:

SELECT
   Title, 
   Name
FROM
   albums
INNER JOIN artists USING(ArtistId);Code language: SQL (Structured Query Language) (sql)

Klauzula USING(ArtistId) jest równoważny z klauzulą ​​ON artists.ArtistId = albums.ArtistId .

SQLite LEFT JOIN

To stwierdzenie wybiera nazwy wykonawców i tytuły albumów z listy artists i albums tabele za pomocą LEFT JOIN klauzula:

SELECT
    Name, 
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Oto wynik:

LEFT JOIN klauzula wybiera dane zaczynając od lewej tabeli (artists ) i pasujące wiersze w prawej tabeli (albums ) na podstawie warunku przyłączenia (artists.ArtistId = albums.ArtistId ).

Lewe sprzężenie zwraca wszystkie wiersze od artists tabela (lub tabela po lewej) i pasujące wiersze z albums stół (lub prawy stół).

Jeśli wiersz z lewej tabeli nie ma pasującego wiersza w prawej tabeli, SQLite dołącza kolumny wierszy w lewej tabeli i NULL dla kolumn prawej tabeli.

Podobne do INNER JOIN klauzula, możesz użyć USING składnia warunku złączenia w następujący sposób:

SELECT
   Name, 
   Title
FROM
   artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
   Name;Code language: SQL (Structured Query Language) (sql)

Jeśli chcesz znaleźć wykonawców, którzy nie mają żadnych albumów, możesz dodać WHERE klauzula, jak pokazano w następującym zapytaniu:

SELECT
    Name,
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
WHERE Title IS NULL   
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Ten obrazek pokazuje częściowe dane wyjściowe:

Ogólnie rzecz biorąc, ten typ zapytania pozwala znaleźć wiersze, które są dostępne w lewej tabeli, ale nie mają odpowiadających wierszy w prawej tabeli.

Zwróć uwagę, że LEFT JOIN i LEFT OUTER JOIN są synonimami.

SQLite CROSS JOIN

CROSS JOIN klauzula tworzy iloczyn kartezjański wierszy z połączonych tabel.

W przeciwieństwie do INNER JOIN i LEFT JOIN klauzul, CROSS JOIN nie ma warunku dołączenia. Oto podstawowa składnia CROSS JOIN klauzula:

SELECT
    select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)

CROSS JOIN łączy każdy wiersz z pierwszej tabeli (table1 ) z każdym wierszem z drugiej tabeli (table2 ), aby utworzyć zestaw wyników.

Jeśli pierwsza tabela zawiera N wierszy, druga tabela ma M wierszy, wynik końcowy będzie miał NxM wiersze.

Praktyczny przykład CROSS JOIN klauzulą ​​jest połączenie dwóch zestawów danych w celu utworzenia wstępnego zbioru danych do dalszego przetwarzania. Na przykład masz listę produktów i miesięcy i chcesz zaplanować, kiedy będziesz mógł sprzedawać które produkty.

Poniższy skrypt tworzy products i calendars stoły:

CREATE TABLE products(
    product text NOT null
);

INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');



CREATE TABLE calendars(
    y int NOT NULL,
    m int NOT NULL
);

INSERT INTO calendars(y,m)
VALUES 
    (2019,1),
    (2019,2),
    (2019,3),
    (2019,4),
    (2019,5),
    (2019,6),
    (2019,7),
    (2019,8),
    (2019,9),
    (2019,10),
    (2019,11),
    (2019,12);
Code language: SQL (Structured Query Language) (sql)

To zapytanie używa CROSS JOIN klauzula łączenia produktów z miesiącami:

SELECT * 
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)

Oto wynik:

W tym samouczku nauczyłeś się różnych rodzajów złączeń SQLite, które umożliwiają wykonywanie zapytań z wielu tabel.


  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 działa RandomBlob() w SQLite

  2. 11 sposobów na znalezienie zduplikowanych wierszy, ignorując klucz podstawowy w SQLite

  3. Mam aplikację na Androida, która pobiera dane z sqlite i wyświetla dane w BaseAdapter .. jaki jest najlepszy sposób?

  4. SQLiteException:nieznana baza danych

  5. Android Pushing Updates w Sklepie Play