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.