sql >> Databasteknik >  >> RDS >> SQLite

SQLite CROSS JOIN med ett praktiskt exempel

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.


  1. Hur man får databasstruktur i MySQL via query

  2. SQL Server Resumable Index:Är det bra för dig?

  3. Hur RandomBlob() fungerar i SQLite

  4. Förstå låsgranularitet i MySQL