SQL Academy · Lektion

Hvorfor joins? (genopfriskning af den relationelle model)

Genopfrisk den relationelle model, normaliserede tabeller og fremmednøgler, og forstå hvorfor JOIN er broen, der samler data på tværs af tabeller.

Lektion 1 af 413 trin

Hvorfor joins? (genopfriskning af den relationelle model) 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.

Normalisering i ét billede

I stedet for at duplikere data fordeler du dem på flere tabeller:

  • users — id, name, email
  • orders — id, user_id, total

Hver ordre refererer til en bruger via id i stedet for at gemme brugerens navn og e-mail igen.

Hvorfor normalisere?

Fordele:

  • Ingen duplikering — skift en brugers e-mail ét sted
  • Mindre tabeller — bedre cache-træfprocent
  • Begrænsninger håndhæver relationer

Fremmednøgler definerer forbindelsen

Forbindelsen erklæres med en FOREIGN KEY:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL REFERENCES users(id),
  total NUMERIC(10,2) NOT NULL
);

Saml data igen med JOIN

Hvis du vil vise "brugerens navn på hver ordre", JOIN'er du tabellerne igen:

SELECT o.id, o.total, u.full_name, u.email
FROM orders o
JOIN users u ON u.id = o.user_id
ORDER BY o.id;

Den mentale model: filtreret kartesisk produkt

Begrebsmæssigt fungerer et JOIN sådan:

  1. Det danner krydsproduktet af to tabeller (hver række i A parres med hver række i B)
  2. Det beholder kun par, hvor ON-betingelsen er TRUE

I praksis bruger databasen et hash-join, merge-join eller nested-loop-join — men resultatet er det samme.

En-til-mange

Én bruger kan have mange ordrer. "Mange"-siden indeholder fremmednøglen.

-- Each order row points back to its user:
SELECT u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email;

Mange-til-mange via koblingstabel

Tags ↔ Posts: indsæt en tredje tabel:

CREATE TABLE posts (id BIGSERIAL PRIMARY KEY, title TEXT);
CREATE TABLE tags  (id BIGSERIAL PRIMARY KEY, name TEXT);
CREATE TABLE post_tags (
  post_id BIGINT REFERENCES posts(id),
  tag_id  BIGINT REFERENCES tags(id),
  PRIMARY KEY (post_id, tag_id)
);

Forespørgsler med mange-til-mange

To joins samler alle data:

SELECT p.title, t.name
FROM posts p
JOIN post_tags pt ON pt.post_id = p.id
JOIN tags      t  ON t.id = pt.tag_id
WHERE t.name = 'sql';

Hvornår skal du denormalisere?

Denormalisering (duplikering af data) bruges nogle gange af hensyn til ydeevnen — f.eks. til cachelagring af beregnede totaler, fuldtekstkolonner og materialiserede visninger. Start normaliseret, og denormalisér efter målinger.

Joins kontra underforespørgsler

Mange JOIN-forespørgsler kan skrives som underforespørgsler og omvendt. Brug den løsning, der er lettest at læse; moderne planlæggere giver ofte den samme plan.

Fremmednøgler håndhæves ikke automatisk

Du skal erklære dem med REFERENCES. Selv med FK-begrænsninger er det DIT job at indeksere FK-kolonnen — erklær et indeks eksplicit for at forbedre join-ydeevnen.

Opsummering

Joins samler data igen, efter at de er blevet opdelt i tabeller af hensyn til dataintegriteten.

  • Fremmednøgler erklærer forbindelsen
  • JOIN ophæver normaliseringen på forespørgselstidspunktet
  • En-til-mange bruger en FK på "mange"-siden, mens mange-til-mange bruger en koblingstabel

Hurtigt tjek

I en en-til-mange-relation mellem users og orders hvilken tabel indeholder fremmednøglekolonnen?

Gratis at komme i gang

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 “Hvorfor joins? (genopfriskning af den relationelle model)” gratis?

Ja — hele teksten til “Hvorfor joins? (genopfriskning af den relationelle model)” 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 “Hvorfor joins? (genopfriskning af den relationelle model)”?

Genopfrisk den relationelle model, normaliserede tabeller og fremmednøgler, og forstå hvorfor JOIN er broen, der samler data på tværs af tabeller. 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 “Hvorfor joins? (genopfriskning af den relationelle model)”?

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

  1. Hvorfor joins? (genopfriskning af den relationelle model)
  2. Sådan fungerer INNER JOIN
  3. LEFT/RIGHT JOIN og OUTER JOINs
  4. Selv-joins og aliaser
← Tilbage til SQL Academy