sql >> Database teknologi >  >> RDS >> SQLite

SQLite CROSS JOIN med et praktisk eksempel

Oversigt :i denne vejledning lærer du, hvordan du bruger SQLite CROSS JOIN at kombinere to eller flere resultatsæt fra flere tabeller.

Introduktion til SQLite CROSS JOIN klausul

Hvis du bruger en LEFT JOIN , INNER JOIN , eller CROSS JOIN uden ON eller USING klausul, producerer SQLite det kartesiske produkt af de involverede tabeller. Antallet af rækker i det kartesiske produkt er produktet af antallet af rækker i hver involveret tabel.

Antag, at vi har to tabeller A og B. De følgende udsagn udfører krydssammenføjningen og producerer et kartesisk produkt af rækkerne fra A- og B-tabellerne.

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)

Antag, at A-tabellen har N rækker og B-tabellen har M rækker, CROSS JOIN af disse to tabeller vil producere et resultatsæt, der indeholder NxM rækker.

Forestil dig, at hvis du har den tredje tabel C med K rækker, resultatet af CROSS JOIN klausulen i disse tre tabeller vil indeholde NxMxK rækker, som kan være meget store. Derfor bør du være meget forsigtig, når du bruger CROSS JOIN klausul.

Du bruger INNER JOIN og LEFT JOIN klausuler oftere end CROSS JOIN klausul. Du vil dog finde CROSS JOIN klausul meget nyttig i nogle tilfælde.

For eksempel når du vil have en matrix, der har to dimensioner fyldt med data fuldstændig ligesom medlemmer og datoer data i en medlemsdatabase. Du ønsker at tjekke medlemmernes ledsagere for alle relevante datoer. I dette tilfælde kan du bruge CROSS JOIN klausul som følgende udsagn:

SELECT name,
       date 
FROM members
CROSS JOIN dates;Code language: SQL (Structured Query Language) (sql)

SQLite CROSS JOIN klausuleksempel

Følgende udsagn skaber ranks og suits tabeller, der gemmer rækkerne og kulørerne for et sæt kort og indsætter alle data i disse to tabeller.

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)

Følgende sætning bruger CROSS JOIN klausul for at returnere et komplet sæt kortdata:

SELECT rank,
       suit
  FROM ranks
       CROSS JOIN
       suits
ORDER BY suit;Code language: SQL (Structured Query Language) (sql)
rangering dragt
2 Klubber
3 Klubber
4 Klubber
5 Klubber
6 Klubber
7 Klubber
8 Klubber
9 Klubber
10 Klubber
J Klubber
Q Klubber
K Klubber
A Klubber
2 Diamanter
3 Diamanter
4 Diamanter
5 Diamanter
6 Diamanter
7 Diamanter
8 Diamanter
9 Diamanter
10 Diamanter
J Diamanter
Q Diamanter
K Diamanter
A Diamanter
2 Hjerter
3 Hjerter
4 Hjerter
5 Hjerter
6 Hjerter
7 Hjerter
8 Hjerter
9 Hjerter
10 Hjerter
J Hjerter
Q Hjerter
K Hjerter
A Hjerter
2 Spade
3 Spade
4 Spade
5 Spade
6 Spade
7 Spade
8 Spade
9 Spade
10 Spade
J Spade
Q Spade
K Spade
A Spade

I denne øvelse har du lært, hvordan du bruger SQLite CROSS JOIN-klausulen til at producere et kartesisk produkt af flere tabeller, der er involveret i joinforbindelsen.


  1. Skal jeg bruge NOT IN, OUTER APPLY, LEFT OUTER JOIN, UNDTAGET eller IKKE FINDER?

  2. At finde det næste tilgængelige id i MySQL

  3. Facebook-like-notifikationssporing (DB Design)

  4. Kopiering af PostgreSQL-database til en anden server