Sammanfattning :i den här handledningen lär du dig hur du använder SQLite CROSS JOIN
för att kombinera två eller flera resultatuppsättningar från flera tabeller.
Introduktion till SQLite CROSS JOIN
klausul
Om du använder en LEFT JOIN
, INNER JOIN
, eller CROSS JOIN
utan ON
eller USING
klausul producerar SQLite den kartesiska produkten av de inblandade tabellerna. Antalet rader i den kartesiska produkten är produkten av antalet rader i varje involverad tabell.
Antag att vi har två tabeller A och B. Följande satser utför korsfogningen och producerar en kartesisk produkt av raderna från A- och B-tabellerna.
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 att A-tabellen har N rader och B-tabellen har M rader, CROSS JOIN
av dessa två tabeller kommer att producera en resultatuppsättning som innehåller NxM
rader.
Föreställ dig att om du har den tredje tabellen C med K
rader, resultatet av CROSS JOIN
satsen i dessa tre tabeller kommer att innehålla NxMxK
rader, som kan vara väldigt stora. Därför bör du vara mycket försiktig när du använder CROSS JOIN
klausul.
Du använder INNER JOIN
och LEFT JOIN
satser oftare än CROSS JOIN
klausul. Däremot hittar du CROSS JOIN
klausul mycket användbar i vissa fall.
Till exempel när du vill ha en matris som har två dimensioner fyllda med data helt som medlemmar och datumdata i en medlemsdatabas. Du vill kontrollera medlemmarnas skötare för alla relevanta datum. I det här fallet kan du använda CROSS JOIN
klausul som följande uttalande:
SELECT name,
date
FROM members
CROSS JOIN dates;
Code language: SQL (Structured Query Language) (sql)
SQLite CROSS JOIN
klausulexempel
Följande satser skapar ranks
och suits
tabeller som lagrar rang och färger för en kortlek och infogar hela data i dessa två 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öljande sats använder CROSS JOIN
klausul för att returnera en komplett kortlek:
SELECT rank,
suit
FROM ranks
CROSS JOIN
suits
ORDER BY suit;
Code language: SQL (Structured Query Language) (sql)
ranking | kostym |
---|---|
2 | Klubbar |
3 | Klubbar |
4 | Klubbar |
5 | Klubbar |
6 | Klubbar |
7 | Klubbar |
8 | Klubbar |
9 | Klubbar |
10 | Klubbar |
J | Klubbar |
F | Klubbar |
K | Klubbar |
A | Klubbar |
2 | Diamanter |
3 | Diamanter |
4 | Diamanter |
5 | Diamanter |
6 | Diamanter |
7 | Diamanter |
8 | Diamanter |
9 | Diamanter |
10 | Diamanter |
J | Diamanter |
F | Diamanter |
K | Diamanter |
A | Diamanter |
2 | Hjärtan |
3 | Hjärtan |
4 | Hjärtan |
5 | Hjärtan |
6 | Hjärtan |
7 | Hjärtan |
8 | Hjärtan |
9 | Hjärtan |
10 | Hjärtan |
J | Hjärtan |
F | Hjärtan |
K | Hjärtan |
A | Hjärtan |
2 | Spader |
3 | Spader |
4 | Spader |
5 | Spader |
6 | Spader |
7 | Spader |
8 | Spader |
9 | Spader |
10 | Spader |
J | Spader |
F | Spader |
K | Spader |
A | Spader |
I den här handledningen har du lärt dig hur du använder SQLite CROSS JOIN-klausulen för att producera en kartesisk produkt av flera tabeller som är involverade i sammanfogningen.