SQL Beginnershandleiding

  1. Inleiding
  2. De eerste tabel
  3. De database benaderen vanuit PHP
  4. PDO: De database benaderen vanuit PHP
  5. Invoegen van records
  6. PDO: Invoegen van records
  7. Selecteren van records
  8. PDO: Selecteren van records
  9. Wijzigen van records
  10. PDO: Wijzigen van records
  11. Verwijderen van records
  12. PDO: Verwijderen van records
  13. Sleutels en constraints
  14. Selecteren uit meerdere tabellen: JOINS
  15. Werken met data en tijden
  16. Aggregate functies en GROUP BY
  17. Debuggen: het oplossen van SQL fouten
  18. Slotwoord en referenties
  19. Reacties op deze tutorial

De eerste tabel

Een database is opgebouwd uit een of meedere tabellen. Deze tabellen bevatten op hun beurt een of meedere kolommen waarin verschillende soorten data opgeslagen kan worden. De werkelijke data bevindt zich in rijen (records) waarvan elk apart deel van de data zich in een aparte kolom bevindt.

Een plaatje zegt meer dan woorden, dus laten we de tabel waar we straks mee gaan werken eens visualiseren:
Code: werknemers
1
2
3
4
5
6
7
+----+----------+---------------+------------+---------------+----------------+
| id | voornaam | tussenvoegsel | achternaam | geboortedatum | salaris_schaal |
+----+----------+---------------+------------+---------------+----------------+
|  1 | Nico     | de            | Boer       | 1958-03-24    |             18 |
|  2 | Tim      | NULL          | Janssen    | 1982-01-30    |             10 |
|  3 | Pim      | NULL          | Vosse      | 1980-12-20    |             10 |
+----+----------+---------------+------------+---------------+----------------+

Dit is de tabel werknemers waar we in deze tutorial veel mee zullen werken. Ik zal straks uitleggen hoe we deze tabel aan kunnen maken, maar laten we eerst eens naar de opbouw kijken.

Zoals ik al zei is de naam van deze tabel werknemers. We zien dat de tabel bestaat uit 6 kolommen met respectievelijke de namen id, voornaam, tussenvoegsel, achternaam, geboortedatum, salaris_schaal. De namen van de kolommen geven al aan wat voor soort data erin opgeslagen wordt.

Tenslotte zien we dat deze tabel al drie records met data bevat. Straks zullen we terugkomen op de inhoud van deze records, maar eerst zal ik uitleggen hoe we deze tabel aan kunnen maken.

Aanmaken van de tabel: de query
Om de database iets te laten doen, geven we hem opdrachten geschreven in SQL, zogenaamde queries. Elk type query heeft een bepaalde syntax die voor elk type anders is. De syntax van elk soort query kun je terugvinden in de MySQL handleiding. Zo ook de syntax voor het aanmaken van een nieuwe tabel.

Om de tabel uit bovenstaand voorbeeld te creëren gebruiken we de volgende SQL query:
Code
1
2
3
4
5
6
7
8
9
CREATE TABLE werknemers (
    id int(8) NOT NULL auto_increment,
    voornaam varchar(50) NOT NULL,
    tussenvoegsel varchar(4) default NULL,
    achternaam varchar(75) NOT NULL,
    geboortedatum date NOT NULL,
    salaris_schaal int(2) default '10',
    PRIMARY KEY  (id)
) ENGINE=InnoDB

We zien dat de query begint met CREATE TABLE dat aangeeft dat we een nieuwe tabel willen maken. Dit statement wordt gevolgd door de naam van de tabel en daarna volgen tussen haakjes de kolommen van de tabel.

De verschillende kolommen worden gescheiden door een komma en in bovenstaand voorbeeld stelt elke regel dus een aparte kolom voor. Elke regel begint met de naam van de kolom gevolgd door het datatype en de lengte (over de verschillende datatypen komen we zodadelijk te spreken). Vervolgens volgt eventueel de optie NOT NULL dat betekent dat de kolom altijd een waarde moet hebben. Als dit niet het geval is zal er altijd een default waarde opgegeven moeten worden welke overigens ook NULL kan zijn.

Andere opties die nog op deze regel voor kunnen komen zijn bijvoorbeeld het voor MySQL specifieke auto_increment. Deze optie wordt op een kolom van het type INT aangebracht en zorgt ervoor dat bij elk nieuw record dat ingevoegd wordt, deze kolom een unieke opeenvolgende waarde krijgt.

Na de kolommen volgen nog enkele regels waarin we verschillende sleutels voor de tabel aan kunnen maken. De verschillende soorten sleutels en hun functie komen later in deze tutorial aan bod. De allerlaatste regel van deze query geeft de engine aan die we gebruiken. Ook dit is weer specifiek voor MySQL en wij zullen altijd de InnoDB engine gebruiken. Waarom we dat doen zal later blijken in het gedeelte over het relationele aspect van de database.

Omdat het aanmaken van een tabel vrij specifiek is voor elke database, is deze query ook alleen te gebruiken in een MySQL omgeving. Dit komt onder andere door de auto_increment en de engine die we definiëren.

Aanmaken van de tabel: het uitvoeren
Het aanmaken van tabellen is een proces dat je voor een applicatie normaal gesproken maar één keer uitvoert. De CREATE TABLE query is dan ook een query die je niet regelmatig zult gebruiken, voornamelijk ook omdat je er waarschijnlijk voor kiest om tabellen aan te maken met een interface zoals phpMyAdmin.

Om nu deze tabel aan te maken, zou je bovenstaande query in de SQL tab van phpMyAdmin kunnen uitvoeren. Zorg wel dat je eerst zelf al een database hebt aangemaakt waar je de tabel in kwijt kunt. Als je niet weet hoe dat moet, raadpleeg dan je host of kijk eens goed rond in phpMyAdmin indien je een lokale server (WAMP bijvoorbeeld) gebruikt.

Naamgeving
Net zoals bij variabelen in PHP is het ook hier belangrijk dat je duidelijk namen voor je tabellen en kolommen kiest. Probeer in de namen enkele letters en eventueel underscores te gebruiken, dan weet je al bijna zeker dat een naam ook geldig is. De laatste vereiste is dat de naam niet voorkomt in de lijst met gereserveerde woorden.

Helaas is het grote nadeel van MySQL dat deze ook namen toestaat die eigenlijk helemaal niet mogelijk zijn. Zo is een naam als z-index helemaal geen probleem in deze database. Dit komt doordat MySQL in zijn queries standaard backticks (`) gebruikt. Dit is echter niet gewenst in ANSI SQL en wij zullen het dan ook nooit gebruiken. Wij zorgen gewoon dat onze tabel en kolomnamen wel in orde zijn!

Datamodel
De structuur van tabellen binnen een database noem je een datamodel. Als je grotere systemen gaat bouwen is het belangrijk dat je gaat normaliseren om zo een goed datamodel te verkrijgen. Het doel is om data in de database nooit dubbel op te slaan.

Het normaliseren van een datamodel valt echter buiten het onderwerp van deze tutorial, maar meer informatie hierover kun je lezen in deze tutorial.

Datatypen
Bij het aanmaken van een nieuwe tabel, geef je voor elke kolom aan wat voor soort data erin komt te staan. Dit doe je door een datatype aan die kolom toe te kennen.

Veelgebruikte datatypen zijn:
  • INT - Integers
  • DECIMAL - Decimale getalen
  • VARCHAR - Strings
  • TEXT - Langere stukken tekst
  • DATE - Datum
  • DATETIME - Combinatie van datum en tijd

Sommige van deze datatypen zijn specifiek voor MySQL, andere database systemen kennen hun eigen datatypes. Raadpleeg daarom altijd de handleiding van je database om te zien welke datatypen je tot je beschikking heb. Voor MySQL is een overzicht te vinden in hoofdstuk 9 van de MySQL handleiding.

Vorige Volgende