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

Werken met data en tijden

Een database is uitermate geschikt om te werken met data en tijden. Het rekenen met deze gegevens is in de database heel gemakkelijk. Vandaar ook dat we dit zoveel mogelijk aan de database willen overlaten.

Om goed te kunnen werken met data en tijden is het van belang dat je het juiste datatype kiest voor deze gegevens. Een datum sla je op in een DATE veld, een tijd in een TIME veld en een combinatie van een datum en tijd komt in een DATETIME veld te staan.

Opmerking: deze datatypen zijn specifiek voor MySQL. Andere databases kennen weer andere datatypes voor data en tijden.

Formatteren van een datum (SQL)
De geboortedatum van onze werknemers staat nu in het formaat yyyy-mm-dd in de tabel, overigens het enige geldige formaat voor een datum. Maar de kans is groot dat we de datum niet in dit formaat op het scherm willen zetten.

Met behulp van de MySQL functie DATE_FORMAT() kunnen we daarom het formaat van de datum aanpassen bij het selecteren van de gegevens. Dit doen we als volgt:
Code: query
1
2
3
4
5
SELECT
    voornaam,
    DATE_FORMAT(geboortedatum, '%d-%m-%Y') AS newDate
FROM
    werknemers
Code: output
1
2
3
4
5
6
7
8
9
10
+----------+------------+
| voornaam | newDate    |
+----------+------------+
| Nico     | 24-03-1958 |
| Tim      | 30-01-1982 |
| Pim      | 20-12-1980 |
| Joost    | 20-10-1974 |
| Thomas   | 12-06-1970 |
| Niels    | 18-08-1979 |
+----------+------------+

De functie DATE_FORMAT() accepteert twee parameters. Allereerst de kolom waarin de datum opgeslagen is en ten tweede het formaat waarin de datum gezet moet worden. Een overzicht met alle parameters die je daarin kunt gebruiken zijn te vinden in de MySQL handleiding.

Nadat je de functie toegepast hebt, geef je dat gegeven een alias. Op die manier kun je hem selecteren in de resultaat set. Zorg dat je de naam van de alias niet hetzelfde kiest als een bestaande kolomnaam, aangezien dat verderop in de query problemen kan opleveren.

In de output zien we dat de datum nu inderdaad in het nieuwe formaat weergegeven wordt.

Formatteren van een datum (PHP)
Als we dit willen gebruiken in PHP verandert er natuurlijk niets aan de query. Het zal er dus als volgt uit komen te zien:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
require_once 'db_config.php';

$sql "
    SELECT
        voornaam,
        DATE_FORMAT(geboortedatum, '%d-%m-%Y') AS newDate
    FROM
        werknemers
"
;

if(!
$res mysql_query($sql))
{
    
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(
mysql_num_rows($res) == 0)
{
    echo 
'Geen records gevonden.';
}
else
{
    while(
$row mysql_fetch_assoc($res))
    {
        echo 
$row['voornaam'].' ('.$row['newDate'].') <br />';
    }
}
?>
Output
Nico (24-03-1958)
Tim (30-01-1982)
Pim (20-12-1980)
Joost (20-10-1974)
Thomas (12-06-1970)
Niels (18-08-1979)

Rekenen met data en tijden (SQL)
Het is mogelijk om de geboortedatum kolom op te nemen in een WHERE clausule en er een vergelijking mee uit te voeren. Stel dat we bijvoorbeeld de werknemers op willen halen die na 1 januari 1980 geboren zijn:
Code: query
1
2
3
4
5
6
7
SELECT
    voornaam,
    DATE_FORMAT(geboortedatum, '%d-%m-%Y') AS newDate
FROM
    werknemers
WHERE
    geboortedatum > '1980-01-01'
Code: output
1
2
3
4
5
6
+----------+------------+
| voornaam | newDate    |
+----------+------------+
| Tim      | 30-01-1982 |
| Pim      | 20-12-1980 |
+----------+------------+

Zoals verwacht zijn in de output alleen de gegevens van de werknemers, die in 1980 of later geboren zijn, te zien.

Huidige datum en tijd (SQL)
MySQL kent een tweetal functies die de de huidige datum en tijd teruggeven. De functie NOW() geeft een datumtijd-stempel terug waarin dus zowel een datum als tijd te vinden zijn. De functie CURDATE() geeft enkel de huidige datum terug.

De gebruik ervan in de query is bijvoorbeeld als volgt:
Code
1
2
3
4
5
6
7
8
9
10
INSERT INTO tabel
(
    datumtijdveld,
    naam
)
VALUES
(
    NOW(),
    'Jan'
)

Op deze manier zou je dus de huidige datumtijd-stempel in kunnen voegen in de database. Ga dus niet meer in PHP met de date() functie aan de gang, dit is veel makkelijker.

Meer datum- en tijdfuncties
De toepassingen van het rekenen met data en tijdens die ik hier heb laten zien, zijn nog maar een klein topje van een hele grote ijsberg. Dit onderwerp is veel te uitgebreid om hier te bespreken, dus wil ik je graag doorverwijzen naar een van de volgende links:

Vorige Volgende