Shrnutí :v tomto tutoriálu se naučíte používat SQLite CROSS JOIN
zkombinovat dvě nebo více sad výsledků z více tabulek.
Úvod do SQLite CROSS JOIN
klauzule
Pokud použijete LEFT JOIN
, INNER JOIN
nebo CROSS JOIN
bez ON
nebo USING
klauzule SQLite vytváří kartézský součin příslušných tabulek. Počet řádků v kartézském součinu je součinem počtu řádků v každé zahrnuté tabulce.
Předpokládejme, že máme dvě tabulky A a B. Následující příkazy provedou křížové spojení a vytvoří kartézský součin řádků z tabulek A a 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)
Předpokládejme, že tabulka A má N řádků a tabulka B má M řádků, CROSS JOIN
z těchto dvou tabulek vytvoří sadu výsledků, která obsahuje NxM
řádky.
Představte si, že pokud máte třetí tabulku C s K
řádky, výsledek CROSS JOIN
klauzule těchto tří tabulek bude obsahovat NxMxK
řádky, které mohou být velmi velké. Proto byste měli být velmi opatrní při používání CROSS JOIN
doložka.
Používáte INNER JOIN
a LEFT JOIN
klauzule častěji než CROSS JOIN
doložka. Najdete zde však CROSS JOIN
klauzule velmi užitečná v některých případech.
Například, když chcete mít matici, která má dvě dimenze naplněné daty úplně jako členové a data data v členské databázi. Chcete zkontrolovat účastníky členů pro všechna relevantní data. V tomto případě můžete použít CROSS JOIN
klauzule jako následující prohlášení:
SELECT name,
date
FROM members
CROSS JOIN dates;
Code language: SQL (Structured Query Language) (sql)
SQLite CROSS JOIN
příklad klauzule
Následující příkazy vytvářejí ranks
a suits
tabulky, které ukládají hodnosti a barvy pro balíček karet a vkládají kompletní data do těchto dvou tabulek.
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)
Následující příkaz používá CROSS JOIN
klauzule pro vrácení kompletních dat balíčku karet:
SELECT rank,
suit
FROM ranks
CROSS JOIN
suits
ORDER BY suit;
Code language: SQL (Structured Query Language) (sql)
rank | oblek |
---|---|
2 | Kluby |
3 | Kluby |
4 | Kluby |
5 | Kluby |
6 | Kluby |
7 | Kluby |
8 | Kluby |
9 | Kluby |
10 | Kluby |
J | Kluby |
O | Kluby |
K | Kluby |
A | Kluby |
2 | Diamanty |
3 | Diamanty |
4 | Diamanty |
5 | Diamanty |
6 | Diamanty |
7 | Diamanty |
8 | Diamanty |
9 | Diamanty |
10 | Diamanty |
J | Diamanty |
O | Diamanty |
K | Diamanty |
A | Diamanty |
2 | Srdce |
3 | Srdce |
4 | Srdce |
5 | Srdce |
6 | Srdce |
7 | Srdce |
8 | Srdce |
9 | Srdce |
10 | Srdce |
J | Srdce |
O | Srdce |
K | Srdce |
A | Srdce |
2 | Pyly |
3 | Pyly |
4 | Pyly |
5 | Pyly |
6 | Pyly |
7 | Pyly |
8 | Pyly |
9 | Pyly |
10 | Pyly |
J | Pyly |
O | Pyly |
K | Pyly |
A | Pyly |
V tomto tutoriálu jste se naučili používat klauzuli SQLite CROSS JOIN k vytvoření kartézského součinu více tabulek zapojených do spojení.