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