sql >> Databáze >  >> RDS >> SQLite

SQLite CROSS JOIN s praktickým příkladem

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í.


  1. předat celočíselné pole do procedury Oracle pomocí c#

  2. Poddotaz SQLite

  3. Jak odinstalujete MySQL z Mac OS X?

  4. Deset způsobů, jak váš datový projekt selže