Podsumowanie: w tym poradniku dowiesz się, jak używać SQLite CROSS JOIN
do łączenia dwóch lub więcej zestawów wyników z wielu tabel.
Wprowadzenie do SQLite CROSS JOIN clause
Jeśli używasz LEFT JOIN
INNER JOIN
, lub CROSS JOIN
bez klauzuli ON
lub USING
, 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ą złączenie krzyżowe i produkują iloczyn kartezjański wierszy z tabel A i B.
Code language: SQL (Structured Query Language) (sql)SELECT *FROM A JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT *FROM AINNER JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT *FROM ACROSS JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT * FROM A, B;
Załóżmy, że, tabela A ma N wierszy, a tabela B ma M wierszy, CROSS JOIN
tych dwóch tabel wyprodukuje zestaw wyników, który zawiera NxM
wiersze.
Wyobraź sobie, że jeśli masz trzecią tabelę C z K
wierszy, wynik klauzuli CROSS JOIN
tych trzech tabel będzie zawierał NxMxK
wierszy, które mogą być bardzo ogromne. Dlatego powinieneś być bardzo ostrożny, gdy używasz klauzuli CROSS JOIN
.
Klauzule INNER JOIN
i LEFT JOIN
są używane częściej niż klauzula CROSS JOIN
. 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 jak członkowie i daty dane w bazie danych członkostwa. Chcesz sprawdzić osoby uczestniczące w członkostwie dla wszystkich istotnych dat. W tym przypadku możesz użyć klauzuli CROSS JOIN
jako następującego oświadczenia:
Code language: SQL (Structured Query Language) (sql)SELECT name, date FROM membersCROSS JOIN dates;
Przykład klauzuliSQLite CROSS JOIN
Następujące instrukcje tworzą tabele ranks
i suits
przechowujące rangi i garnitury dla talii kart oraz wstawiają kompletne dane do tych dwóch tabel.
Code language: SQL (Structured Query Language) (sql)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');
Następująca instrukcja wykorzystuje klauzulę CROSS JOIN
do zwrócenia kompletnych danych o talii kart:
Code language: SQL (Structured Query Language) (sql)SELECT rank, suit FROM ranks CROSS JOIN suitsORDER BY suit;
rank | suit |
---|---|
2 | Kluby |
3 | Kluby |
4 | Clubs |
5 | Clubs |
6 | Clubs |
7 | Clubs |
8 | Clubs |
9 | Clubs |
10 | Clubs |
J | Clubs |
Q | Clubs |
K | Clubs |
A | Clubs |
2 | Diamonds |
3 | Diamonds |
4 | Diamonds |
5 | Diamonds |
6 | Diamenty |
7 | Diamenty |
8 | Diamenty |
9 | Diamenty |
10 | Diamenty |
J | Diamenty |
Q | Diamenty |
K | Diamonds |
A | Diamonds |
2 | Hearts |
3 | Hearts |
4 | Hearts |
5 | Hearts |
6 | Hearts |
7 | Hearts |
8 | Hearts |
9 | Hearts |
10 | Hearts |
J | Hearts |
Q | Hearts |
K | Hearts |
A | Hearts |
2 | Spades |
3 | Spades |
4 | Spades |
5 | Spades |
6 | Spades |
7 | Spades |
8 | Spades |
9 | Spades |
10 | Spad |
J | Spad |
Q | Spad |
K | Spad |
A | Pady |
W tym poradniku, dowiedziałeś się, jak używać klauzuli SQLite CROSS JOIN do tworzenia iloczynu kartezjańskiego wielu tabel uczestniczących w złączeniu.
- Czy ten tutorial był pomocny?
- TakNie