login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > MySQL


Gegevens:
Geschreven door:
FAQman
Moeilijkheidsgraad:
Normaal
Hits:
40660
Punten:
Aantal punten:
 (3.18)
Aantal stemmen:
11
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (5)
 

Tutorial:

Joins

1. Inleiding
2. Inner join
3. Left join
4. Right join


1. Inleiding

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.

 top


2. Inner join

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.

1 MYSQL > SELECT coureurs.voornaam,

2 > coureurs.achternaam,

3 > autos.merk,

4 > autos.type

5 > FROM coureurs

6 > INNER JOIN autos

7 > ON( coureurs.id = autos.c_id );

Dit geeft dan als resultaat (dit is een voordbeeld)

1 Joël

2 Verheyen

3 BMW

4 X5

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.

1 MYSQL > 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 > INNER JOIN 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:

1 Joël

2 Verheyen

3 BMW

4 X5

 top


3. Left join

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.

1 MYSQL > SELECT autos.merk,

2 > autos.type,

3 > coureurs.voornaam,

4 > coureurs.achternaam

5 > FROM autos

6 > LEFT JOIN coureurs

7 > ON( autos.c_id = coureurs.id );

Dit zou dan als het goed is deze uitkomst moeten geven.

1 Joël

2 Verheyen

3 BMW

4 X5

5 Shelby

6 GT 500

7 NULL

8 NULL

Uitleg: Ik hoop dat dit nu duidelijk is:

1 MYSQL > 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 > LEFT JOIN 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.

7 NULL

8 NULL

Hierbij zie je dus dat er geen coureur beschikbaar is voor deze auto.

 top


4. Right join

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.

1 MYSQL >

SELECT autos.merk,

2 > autos.type,

3 > coureurs.voornaam,

4 > coureurs.achternaam

5 > FROM autos

6 > RIGHT JOIN coureurs

7 > ON( autos.c_id = coureurs.id );

Dan krijg je de volgende opgave:

1 BMW

2 X5

3 Joël

4 Verheyen

5 NULL

6 NULL

7 Thomas

8 NULL // 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:

--> 1 CREATE TABLE `autos` (

2 `id` int(1) NOT NULL auto_increment,

3 `c_id` int(11) NOT NULL default '0',

4 `merk` varchar(25) NOT NULL default '',

5 `type` varchar(25) NOT NULL default '',

6 PRIMARY KEY (`id`)

7 ) TYPE=MyISAM;

8

9 INSERT INTO `autos` VALUES (1, 1, 'BMW', 'X5');

10 INSERT INTO `autos` VALUES (2, 0, 'Shelby', 'GT 500');

11

12 CREATE TABLE `coureurs` (

13 `id` int(1) NOT NULL auto_increment,

14 `voornaam` varchar(25) NOT NULL default '',

15 `achternaam` varchar(25) NOT NULL default '', 16 PRIMARY KEY (`id`)

17 ) TYPE=MyISAM AUTO_INCREMENT=3 ;

18

19 INSERT INTO `coureurs` VALUES (1, 'Joël', 'Verheyen');

20 INSERT INTO `coureurs` VALUES (2, 'Thomas', '');

Succes ermee!



« Vorige tutorial : Wiskundige functie's Volgende tutorial : Joins »

© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.018s