Cross joins og kartesiske produkter
Brug CROSS JOIN bevidst til kombinatoriske par, og undgå utilsigtede kartesiske eksplosioner på grund af manglende joinnøgler.
Cross joins og kartesiske produkter er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad er en CROSS JOIN?
En CROSS JOIN producerer alle kombinationer af rækker: m × n resultatrækker. Ingen ON-klausul.
SELECT * FROM a CROSS JOIN b;
-- Equivalent:
SELECT * FROM a, b; -- comma join, no conditionUtilsigtede kartesiske produkter
Den klassiske fejl: Du glemmer JOIN-betingelsen og får hver række i A parret med hver række i B.
SELECT u.email, o.id
FROM users u, orders o; -- missing WHERE u.id = o.user_id !
-- m users × n orders rows — millions!Tilsigtede anvendelser
CROSS JOIN er nyttig, når du faktisk ønsker alle par:
- Kombinationer af kategorier × tidsperioder til rapporter med tomme intervaller
- Testdata: hver bruger × hvert produkt
- Kalendere: hver butik × hver dato
Eksempel med kalender × butikker
Udfyld dage med nul for hver butik:
SELECT d.day, s.id, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, '1 day') AS d(day)
CROSS JOIN stores s
LEFT JOIN orders o ON o.store_id = s.id
AND date_trunc('day', o.created_at) = d.day
GROUP BY d.day, s.id
ORDER BY d.day, s.id;Kartesiske produkter og EXPLAIN
Et utilsigtet kartesisk produkt vises som et enormt antal rækker i EXPLAIN ANALYZE:
EXPLAIN ANALYZE
SELECT u.email, o.id FROM users u, orders o;
-- Nested Loop (rows=10000000) ← warning signLATERAL: Betinget CROSS JOIN
LATERAL JOIN er som en CROSS JOIN, hvor højre side kan referere til venstre side — det gennemgås i næste lektion.
Permutationer og kombinationer
For par (A,B) uden dubletter skal du tilføje en sammenligning i ON:
SELECT a.id, b.id
FROM products a
JOIN products b ON a.id < b.id;
-- All unique pairs of products, no (A,A), no (B,A) duplicates of (A,B)CROSS JOIN med VALUES
Indlejr et lille sæt:
SELECT u.email, c.code
FROM users u
CROSS JOIN (VALUES ('EUR'), ('USD'), ('GBP')) AS c(code);Undgå syntaks med kommasammenføjning
Den implicitte kommasammenføjning (FROM a, b) er tilladt, men skjuler hensigten. Foretræk en eksplicit CROSS JOIN:
-- Don't (looks like a typo):
FROM users, orders
-- Do:
FROM users CROSS JOIN ordersYdeevne
CROSS JOIN er i sig selv billig — der er ingen betingelse, der skal evalueres. Omkostningen ligger i antallet af resultatrækker: 10k × 10k = 100 mio. rækker.
Opsummering
CROSS JOIN = alle par.
- Brug den bevidst til kombinationer
- Vær opmærksom på utilsigtede kartesiske produkter (manglende WHERE)
- Kombinér den med generate_series til rapporter, der udfylder huller
Hurtigt tjek
Du har skrevet SELECT * FROM users u, orders o; uden WHERE. Hvad bliver resultatet?
Lær SQL med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 46
- Lektioner
- 183
Ofte stillede spørgsmål
Er lektionen “Cross joins og kartesiske produkter” gratis?
Ja — hele teksten til “Cross joins og kartesiske produkter” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Cross joins og kartesiske produkter”?
Brug CROSS JOIN bevidst til kombinatoriske par, og undgå utilsigtede kartesiske eksplosioner på grund af manglende joinnøgler. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på SQL Academy?
Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Cross joins og kartesiske produkter”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne SQL Academy-lektion?
Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Cross joins og kartesiske produkter
- Laterale joins (LATERAL JOIN)
- Anti-joins og semi-joins (NOT EXISTS)
- Ydelsesjustering af joins på flere tabeller