SQL leren: Self join
Een tabel met zichzelf koppelen
De Kraaien hebben een peterschap: elke jeugdspeler kan een mentor uit de eerste ploegen krijgen. "Wie is de mentor van wie?" vraagt Yasmine. Spelers en mentors staan in dezelfde tabel.
Een sleutel naar dezelfde tabel
In spelers staat mentor_id. Die wijst niet naar een andere tabel, maar naar het id van een andere speler in dezelfde tabel.
Lars Willems heeft mentor_id 4. Speler 4 is Yannick Diallo, de spits van de Heren A.
SELECT id, naam, mentor_id FROM spelers WHERE mentor_id IS NOT NULL| id | naam | mentor_id |
|---|---|---|
| 9 | Lars Willems | 4 |
| 10 | Mila Jacobs | 6 |
| 11 | Senne Vermeulen | 2 |
| 12 | Amir Benali | 7 |
| 13 | Lena Michiels | 5 |
| 14 | Finn Coppens | 3 |
| 15 | Noah Lemmens | 4 |
SELECT id, naam FROM spelers WHERE ploeg_id IN (4, 5)| id | naam |
|---|---|
| 1 | Jonas Verhoeven |
| 2 | Wout Hermans |
| 3 | Bram De Smet |
| 4 | Yannick Diallo |
| 5 | Elke Van Dyck |
| 6 | Nora Aerts |
| 7 | Charlotte Maes |
| 8 | Ines Goossens |
Twee keer dezelfde tabel
Voor een self join zet je dezelfde tabel twee keer in je query, met twee verschillende aliassen. s is de speler, m de mentor. Voor de database zijn het gewoon twee tabellen die toevallig dezelfde rijen hebben.
De ON koppelt de mentor_id van de speler aan het id van de mentor.
SELECT s.naam AS speler, m.naam AS mentor FROM spelers s JOIN spelers m ON s.mentor_id = m.id| speler | mentor |
|---|---|
| Lars Willems | Yannick Diallo |
| Mila Jacobs | Nora Aerts |
| Senne Vermeulen | Wout Hermans |
| Amir Benali | Charlotte Maes |
| Lena Michiels | Elke Van Dyck |
| Finn Coppens | Bram De Smet |
| Noah Lemmens | Yannick Diallo |
Probeer het zelf
Toon elke jeugdspeler met een mentor. Toon de naam van de speler, en de naam en de positie van de mentor.
Klaar voor meer?
De volledige les heeft 7 oefeningen, van makkelijk naar uitdagend, met hints, punten en een reeks die je kan opbouwen.
Begin aan de les