SQL

4. JOINS

4. JOINs – Koppla samman tabeller

I en relationsdatabas delar vi upp data i flera mindre tabeller för att undvika att upprepa information. Men när vi vill visa data för användaren behöver vi ofta slå ihop information från flera tabeller samtidigt.

Det är här JOIN kommer in i bilden!


Exempeldata

Anta att vi har följande två tabeller:

Tabell: Klasser

KlassID KlassNamn
1 TE24A
2 TE24B
3 EE24A

Tabell: Elever

ElevID Fornamn KlassID
101 Anna 1
102 Björn 1
103 Cecilia 2
104 David NULL (saknar klass)

1. INNER JOIN (Vanligast)

INNER JOIN returnerar endast de rader där det finns en matchning i båda tabellerna.

SELECT Elever.Fornamn, Klasser.KlassNamn
FROM Elever
INNER JOIN Klasser ON Elever.KlassID = Klasser.KlassID;

Resultat:

Fornamn KlassNamn
Anna TE24A
Björn TE24A
Cecilia TE24B

(Notera: David visas inte eftersom han saknar KlassID, och EE24A visas inte eftersom den klassen inte har några elever).


2. LEFT JOIN (LEFT OUTER JOIN)

LEFT JOIN hämta alla rader från den vänstra tabellen (Elever), samt matchande rader från den högra tabellen (Klasser). Om det inte finns någon matchning blir värdet NULL.

SELECT Elever.Fornamn, Klasser.KlassNamn
FROM Elever
LEFT JOIN Klasser ON Elever.KlassID = Klasser.KlassID;

Resultat:

Fornamn KlassNamn
Anna TE24A
Björn TE24A
Cecilia TE24B
David NULL

3. RIGHT JOIN (RIGHT OUTER JOIN)

RIGHT JOIN gör motsatsen: den hämtar alla rader från den högra tabellen (Klasser), samt matchande rader från den vänstra tabellen (Elever).

SELECT Elever.Fornamn, Klasser.KlassNamn
FROM Elever
RIGHT JOIN Klasser ON Elever.KlassID = Klasser.KlassID;

Resultat:

Fornamn KlassNamn
Anna TE24A
Björn TE24A
Cecilia TE24B
NULL EE24A

Sammanfattning av JOIN-typer

    INNER JOIN              LEFT JOIN              RIGHT JOIN
   Matching only         All Left + Match       All Right + Match

     [  ( X )  ]           [ ( X )   ]           [   ( X ) ]
     A       B             A       B             A       B
  • INNER JOIN: Endast det som finns i både A och B.
  • LEFT JOIN: Allt från A + matchande från B.
  • RIGHT JOIN: Allt från B + matchande från A.
  • FULL JOIN: Allt från både A och B (oavsett matchning).

Tips för enkla frågor

Använd aliaser (förkortningar) för att göra koden mer lättläst när du arbetar med flera tabeller:

SELECT e.Fornamn, k.KlassNamn
FROM Elever e
JOIN Klasser k ON e.KlassID = k.KlassID;

(Observera: JOIN utan prefix tolkas i regel som INNER JOIN).