In deze tutorial gaan we in op een minder bekend begrip van MySQL, namelijk JOINS.
Om te beginnen ga ik even uitleggen wat joins zijn. Zoals het woord het al zegt, joins zijn samenvoegingen van tabellen.
In deze tutorial gaan we werken met 2 tabellen, een tabel voor 'auto's' en eentje voor 'coureurs'.
De tabel 'auto's' bevat een aantal standpunten zoals: merk en type de tabel 'auto's' staat in verbinding met de tabel 'coureurs' door het veld 'c_id'. De tabel 'coureurs' bevat het aantal coureurs die elk een uniek nummertje op hun eigen auto hebben. Deze tabel bevat als info de voornaam en achternaam van de coureur.
De inner join is te gebruiken wanneer je zeker weet dat er een relatie is tussen de gegevens waarde in de join clausule. Dit kun je goed zien in het voordbeeld hieronder, het is de bedoeling dat we weten welke coureur welke auto heeft, want daar gaat het natuurlijk om.
1MYSQL >SELECT coureurs.voornaam,
2> coureurs.achternaam,
3> autos.merk,
4> autos.type
5>FROM coureurs
6>INNERJOIN autos
7>ON( coureurs.id = autos.c_id );
Dit geeft dan als resultaat (dit is een voordbeeld)
1Joël
2Verheyen
3BMW
4X5
UITLEG: Ik ga nu het eerste deel (inclusief scripts) uitleggen stap voor stap zodat men die nog nooit of bijna niets van MySQL heeft gezien er iets van begrijpt.
1MYSQL >SELECT coureurs.voornaam,
2> coureurs.achternaam,
Dit is gewoon het begin, het select statement selecteert gegevens uit een tabel. In dat geval is dat dan de tabel 'coureurs' waaruit hij de gegevens van de voornaam haalt. Dit doet hij dan ook uit dezelfde tabel voor achternaam.
Vervolgens staat er dit:
3> autos.merk,
4> autos.type
Opeens staat er niet meer coureurs maar auto's, geen paniek! Dit heeft er gewoon mee te maken dat je de gegevens uit een andere tabel haalt, wel te verstaan de tabel autos. Hierbij doet hij net hetzelfde als bij de 'coureurs' tabel namelijk gegevens eruit halen. In dit geval dus het merk en type van de auto.
5>FROM coureurs
Hierbij word de FROM functie van MySQL gebruikt wat je gewoon letterlijk kunt vertalen naar VAN. Hij haalt dus de gegevens uit de tabel 'coureurs'.
6>INNERJOIN autos
Nu komen we bij het deel waar deze tutorial over gaat, de JOINS functie. Deze functie kijkt alleen maar of er verband tussen de 2 tabellen zit ('coureurs' en 'autos'). Maar hij gaat wel uit van de 'coureurs' tabel omdat deze als eerste word genoemd. Als er geen verband of connectie tussen de 2 tabellen is dan is er maar een uitkomst; of er is geen coureur in de auto of de auto heeft geen coureur.
7>ON( coureurs.id = autos.c_id );
Dit is een hele mooie functie, wanneer de coureur in de tabel 'coureur' staat dan wordt hij automatisch verbonden met de tabel 'autos' en wel door deze functie:
'c_id'
Deze zorgt ervoor dat hij de velden of tabellen met elkaar verbind.
Als het dan goed is en je hebt alle stappen begrepen dan zou je dit uiteindelijk moeten krijgen:
Een left join gebruik je wanneer er niet direct een relatie (of connectie) hoeft te bestaan tussen de tabellen. Wanneer een auto stilstaat zit er meestal geen bestuurder in en in dat geval krijgt het betreffende veld de waarde NULL.
Bij de volgende oefening gaan we alle auto's selecteren en zoeken daar eventueel een coureur bij.
1MYSQL >SELECT autos.merk,
2> autos.type,
3> coureurs.voornaam,
4> coureurs.achternaam
5>FROM autos
6>LEFTJOIN coureurs
7>ON( autos.c_id = coureurs.id );
Dit zou dan als het goed is deze uitkomst moeten geven.
1Joël
2Verheyen
3BMW
4X5
5Shelby
6GT 500
7NULL
8NULL
Uitleg: Ik hoop dat dit nu duidelijk is:
1MYSQL >SELECT autos.merk,
2> autos.type,
3> coureurs.voornaam,
4> coureurs.achternaam
5>FROM autos
7>ON( autos.c_id = coureurs.id );
Zoals je misschien ziet heb ik regel 6 overgeslagen, dit komt omdat daar dit een nieuwe functie ziet:
6>LEFTJOIN coureurs
Bij deze functie hoeft er niet direct een connectie tussen de tabellen te zijn, aangezien er eerst FROM werd gebruikt door de tabel 'autos' betekent dit dat deze de hoofdtabel is van deze sequel. De left join geeft aan dat er een mogelijk een coureur is voor de auto, maar dat hoeft niet.
7NULL
8NULL
Hierbij zie je dus dat er geen coureur beschikbaar is voor deze auto.
De right join doet precies het tegenovergestelde van de left join. Een coureur, een beginneling heeft nog geen auto, maar geboren dat is hij wel.
1MYSQL >
SELECT autos.merk,
2> autos.type,
3> coureurs.voornaam,
4> coureurs.achternaam
5>FROM autos
6>RIGHTJOIN coureurs
7>ON( autos.c_id = coureurs.id );
Dan krijg je de volgende opgave:
1BMW
2X5
3Joël
4Verheyen
5NULL
6NULL
7Thomas
8NULL // zoals jullie zien wou FangorN anoniem blijven en dus is er geen achternaam
Uitleg:Ik vind het niet persé nodig om over dit een uitleg te geven, dat zou als het goed is wel duidelijk moeten zijn als je de vorige JOIN voordbeelden goed hebt bestudeerd. top
Aflsluiting
Als jullie nog vragen hebben dan sturen jullie mij maar een Private Message en dan hoop ik dat alles goed komt.
En tenslotte de exacte tabellen met de bijbehorende inhoud: