sql >> Database >  >> RDS >> SQLite

SQLite CROSS JOIN met een praktisch voorbeeld

Samenvatting :in deze tutorial leer je hoe je SQLite CROSS JOIN gebruikt om twee of meer resultatensets uit meerdere tabellen te combineren.

Inleiding tot SQLite CROSS JOIN clausule

Als u een LEFT JOIN . gebruikt , INNER JOIN , of CROSS JOIN zonder de ON of USING clausule, SQLite produceert het cartesiaanse product van de betrokken tabellen. Het aantal rijen in het Cartesiaanse product is het product van het aantal rijen in elke betrokken tabel.

Stel dat we twee tabellen A en B hebben. De volgende uitspraken voeren de cross join uit en produceren een cartesiaans product van de rijen uit de A- en B-tabellen.

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)

Stel dat de A-tabel N rijen heeft en de B-tabel M rijen, de CROSS JOIN van deze twee tabellen zal een resultatenset opleveren die NxM . bevat rijen.

Stel je voor dat als je de derde tabel C hebt met K rijen, het resultaat van de CROSS JOIN clausule van deze drie tabellen bevat NxMxK rijen, die erg groot kunnen zijn. Daarom moet u zeer voorzichtig zijn bij het gebruik van de CROSS JOIN clausule.

Je gebruikt de INNER JOIN en LEFT JOIN clausules vaker dan de CROSS JOIN clausule. U vindt echter de CROSS JOIN clausule in sommige gevallen erg handig.

Als u bijvoorbeeld een matrix wilt hebben die twee dimensies heeft, gevuld met gegevens die volledig lijken op leden- en datumgegevens in een lidmaatschapsdatabase. U wilt de aanwezigen van leden controleren op alle relevante data. In dit geval kunt u de CROSS JOIN . gebruiken clausule als de volgende verklaring:

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

SQLite CROSS JOIN clausule voorbeeld

De volgende instructies creëren de ranks en suits tabellen die de rangen en kleuren voor een pak kaarten opslaan en de volledige gegevens in deze twee tabellen invoegen.

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)

De volgende instructie gebruikt de CROSS JOIN clausule om een ​​volledig kaartspel te retourneren:

SELECT rank,
       suit
  FROM ranks
       CROSS JOIN
       suits
ORDER BY suit;Code language: SQL (Structured Query Language) (sql)
rang pak
2 Clubs
3 Clubs
4 Clubs
5 Clubs
6 Clubs
7 Clubs
8 Clubs
9 Clubs
10 Clubs
J Clubs
Q Clubs
K Clubs
Een Clubs
2 Diamanten
3 Diamanten
4 Diamanten
5 Diamanten
6 Diamanten
7 Diamanten
8 Diamanten
9 Diamanten
10 Diamanten
J Diamanten
Q Diamanten
K Diamanten
Een Diamanten
2 Hartjes
3 Hartjes
4 Hartjes
5 Hartjes
6 Hartjes
7 Hartjes
8 Hartjes
9 Hartjes
10 Hartjes
J Hartjes
Q Hartjes
K Hartjes
Een Hartjes
2 Schoppen
3 Schoppen
4 Schoppen
5 Schoppen
6 Schoppen
7 Schoppen
8 Schoppen
9 Schoppen
10 Schoppen
J Schoppen
Q Schoppen
K Schoppen
Een Schoppen

In deze zelfstudie hebt u geleerd hoe u de SQLite CROSS JOIN-clausule gebruikt om een ​​Cartesiaans product te maken van meerdere tabellen die bij de join betrokken zijn.


  1. PHP PDO versus normale mysql_connect

  2. Zoek sql-records met vergelijkbare tekenreeksen

  3. Hoe kan ik een .NET-toepassing implementeren die ODAC gebruikt zonder de hele component voor de gebruiker te installeren?

  4. Alle gebouwen binnen een bereik van 5 mijl van de opgegeven coördinaten krijgen