Podsumowanie :w tym samouczku dowiesz się, jak używać SQLite CROSS JOIN aby połączyć dwa lub więcej zestawów wyników z wielu tabel.
Wprowadzenie do SQLite CROSS JOIN klauzula
Jeśli używasz LEFT JOIN , INNER JOIN lub CROSS JOIN bez ON lub USING klauzula SQLite tworzy iloczyn kartezjański zaangażowanych tabel. Liczba wierszy w iloczynie kartezjańskim jest iloczynem liczby wierszy w każdej z zaangażowanych tabel.
Załóżmy, że mamy dwie tabele A i B. Poniższe instrukcje wykonują sprzężenie krzyżowe i tworzą iloczyn kartezjański wierszy z tabel A i B.
SELECT *
FROM A JOIN B;Code language: SQL (Structured Query Language) (sql) SELECT *
FROM A
INNER JOIN B;Code language: SQL (Structured Query Language) (sql) SELECT *
FROM A
CROSS JOIN B;Code language: SQL (Structured Query Language) (sql) SELECT *
FROM A, B;Code language: SQL (Structured Query Language) (sql)
Załóżmy, że tabela A ma N wierszy, a tabela B ma M wierszy, CROSS JOIN z tych dwóch tabel wygeneruje zestaw wyników zawierający NxM wiersze.
Wyobraź sobie, że masz trzecią tabelę C z K wierszy, wynik CROSS JOIN klauzula tych trzech tabel będzie zawierać NxMxK rzędy, które mogą być bardzo duże. Dlatego powinieneś być bardzo ostrożny używając CROSS JOIN klauzula.
Używasz INNER JOIN i LEFT JOIN klauzul częściej niż CROSS JOIN klauzula. Jednak znajdziesz CROSS JOIN klauzula bardzo przydatna w niektórych przypadkach.
Na przykład, gdy chcesz mieć macierz, która ma dwa wymiary wypełnione danymi całkowicie takimi jak dane członków i daty w bazie danych członkostwa. Chcesz sprawdzić obecność członków dla wszystkich odpowiednich dat. W takim przypadku możesz użyć CROSS JOIN klauzulę jako następujące oświadczenie:
SELECT name,
date
FROM members
CROSS JOIN dates;Code language: SQL (Structured Query Language) (sql) SQLite CROSS JOIN przykład klauzuli
Poniższe instrukcje tworzą ranks i suits tabele, które przechowują rangi i kolory dla talii kart i wstawiają pełne dane do tych dwóch tabel.
CREATE TABLE ranks (
rank TEXT NOT NULL
);
CREATE TABLE suits (
suit TEXT NOT NULL
);
INSERT INTO ranks(rank)
VALUES('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('10'),('J'),('Q'),('K'),('A');
INSERT INTO suits(suit)
VALUES('Clubs'),('Diamonds'),('Hearts'),('Spades');Code language: SQL (Structured Query Language) (sql)
Poniższa instrukcja używa CROSS JOIN klauzula o zwróceniu kompletnej talii danych:
SELECT rank,
suit
FROM ranks
CROSS JOIN
suits
ORDER BY suit;Code language: SQL (Structured Query Language) (sql) | ranga | garnitur |
|---|---|
| 2 | Kluby |
| 3 | Kluby |
| 4 | Kluby |
| 5 | Kluby |
| 6 | Kluby |
| 7 | Kluby |
| 8 | Kluby |
| 9 | Kluby |
| 10 | Kluby |
| J | Kluby |
| Pytanie | Kluby |
| K | Kluby |
| A | Kluby |
| 2 | Diamenty |
| 3 | Diamenty |
| 4 | Diamenty |
| 5 | Diamenty |
| 6 | Diamenty |
| 7 | Diamenty |
| 8 | Diamenty |
| 9 | Diamenty |
| 10 | Diamenty |
| J | Diamenty |
| Pytanie | Diamenty |
| K | Diamenty |
| A | Diamenty |
| 2 | Serca |
| 3 | Serca |
| 4 | Serca |
| 5 | Serca |
| 6 | Serca |
| 7 | Serca |
| 8 | Serca |
| 9 | Serca |
| 10 | Serca |
| J | Serca |
| Pytanie | Serca |
| K | Serca |
| A | Serca |
| 2 | Pik |
| 3 | Pik |
| 4 | Pik |
| 5 | Pik |
| 6 | Pik |
| 7 | Pik |
| 8 | Pik |
| 9 | Pik |
| 10 | Pik |
| J | Pik |
| Pytanie | Pik |
| K | Pik |
| A | Pik |
W tym samouczku nauczyłeś się, jak używać klauzuli SQLite CROSS JOIN do tworzenia kartezjańskiego produktu wielu tabel uczestniczących w łączeniu.