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.