Edu'Actief

Tabellen en SQL-query's

In dit practicum wordt gekeken naar de verschillende mogelijkheden, die ACCESS biedt bij het ontwerpen van tabellen. Ook leer je queries maken in de 'Ontwerpweergave'.
Tijdens dit practicum wordt de MEDIAGROEP-database gebruikt. Het ontwerp van deze database is aan de orde geweest tijdens de digitale practica over het onderwerp 'Een efficiënt database ontwerp'.

Het ontwerp van de tabel ABONNEMENT

Bekijk de bijbehorende ACCESS database De tabel ABONNEMENT bestaat uit de kolommen abonneenummer, tijdschrifttitel en ingangsdatum.
Omdat abonnementen alleen kunnen worden afgesloten door abonnee's, die zijn ingevoerd in de tabel ABONNEE, maken we van de kolom abonneenummer een opzoekkolom.
De gebruiker van de applicatie kan bij het invoeren van een nieuw abonnement alleen maar kiezen uit bestaande abonneenummers. Ter ondersteuning wordt ook de naam van de abonnee getoond naast het abonneenummer:

Het ontwerp van de kolom 'abonneenummer'

De gegevens, die in de keuzelijst komen te staan, worden m.b.v. een query uit de tabel ABONNEE gehaald:

De keuzelijst wordt gevuld m.b.v. een query

Omdat abonnementen alleen kunnen worden afgesloten voor tijdschriften, die zijn ingevoerd in de tabel TIJDSCHRIFT, maken we ook van de kolom tijdschrifttitel een opzoekkolom:

Het ontwerp van de kolom 'tijdschrifttitel'

Hieronder zie je de keuzelijst bij de kolom abonneenummer:

De keuzelijst van de kolom 'abonneenummer'

De kolom ingangsdatum is van het type 'Datum/tijd', en moet verplicht worden ingevuld.
Ook de wijze, waarop de ingangsdatum moet worden ingevoerd, ligt vast in een invoermasker dd-mm-jjjj:

De kolom 'ingangsdatum' krijgt een invoermasker

Je kunt precies aangeven hoe het masker eruit moet komen te zien:

Een invoermasker maken

Het ontwerp van de query 'Overzicht afgesloten abonnementen in zelf te kiezen periode'

MEDIAGROEP wil een overzicht kunnen maken van alle abonnementen, die afgesloten zijn tussen een zelf te kiezen begindatum en einddatum.
Kies voor 'Query maken in de ontwerpweergave':

Een query maken in de ontwerpweergave

Selecteer vervolgens alle tabellen, die je nodig hebt om de query te maken:

Selecteer de tabellen ABONNEE en ABONNEMENT

Vervolgens kun je in de ontwerpweergave de query gaan bouwen: De query in de ontwerpweergave

Terwijl je bezig bent in de 'Ontwerpweergave' maakt Access op de achtergrond alle benodigde SQL-code aan.
Deze SQL-code wijkt af van de code, die je geleerd hebt in het theorieboek.
Bij een query over 2 tabellen zouden wij de volgende code gebruiken:

SELECT naam, tijdschrifttitel, ingangsdatum
FROM abonnee, abonnement
WHERE ingangsdatum >= [Geef begindatum periode:] AND ingangsdatum <= [Geef einddatum periode:]
AND abonnee.abonneenummer = abonnement.abonneenummer;


Access gebruikt voor het koppelen van 2 tabellen de SQL-opdracht INNER JOIN ON. Ook wordt voor iedere kolomnaam de naam van de tabel geplaatst. Verder gebruikt Access erg veel haakjes:

Op de achtergrond wordt de SQL-code aangemaakt

Het ontwerp van de query 'Overzicht van het aantal abonnees per woonplaats'

Een query, waarbij wordt gegroepeerd (GROUP BY) of waarbij een functie (SUM, MAX, ...) wordt gebruikt, vereist in de ontwerpweergave een extra regel.
Je kunt deze extra regel krijgen door met de rechtermuisknop te kiezen voor 'Totalen'.
Er wordt een extra regel 'Totaal' aangemaakt:

De extra regel 'Totaal' toevoegen

In de extra regel 'Totaal' kun je aangeven, dat je wilt groeperen op plaats en wilt tellen op abonneenummer:

De query in de ontwerpweergave

Verschillende querytypen

Access kent verschillende querytypen:

Het ontwerp van de toevoegquery 'Rekeningen maken'

Abonnee's ontvangen van MEDIAGROEP ieder jaar een rekening voor hun tijdschrift in de maand, dat zij het abonnement op het tijdschrift hebben afgesloten.
De unieke rekeningnummers uit de tabel REKENING zijn allemaal op dezelfde manier opgebouwd: abonneenummer- maand- jaartal, met

abonneenummer: Dit is het unieke nummer van de abonnee, waarnaar de rekening verzonden moet worden.
maand: Dit is de maand, waarin de abonnee het abonnement op het tijdschrift heeft afgesloten.
jaartal: Dit is het jaar, waarin de rekening verstuurd wordt

Omdat er rijen moeten worden toegevoegd aan de tabel REKENING, maak je gebruik van een Toevoegquery:

Kies voor het type 'Toevoegquery'

En je kiest de tabel, waaraan de rijen moeten worden toegevoegd:

Selecteer de tabel, waaraan je rijen wilt toevoegen

Met de functie Month( ) kun je uit een datum de maand selecteren.
Met de functie Year( ) kun je uit een datum het jaartal selecteren.
Met de functie Date( ) kun je de systeemdatum opvragen.
Met de functie Str( ) kun je een datum omzetten naar tekst.
Vervolgens worden alle abonneenummers opgezocht, die horen bij de abonnementen, die afgesloten zijn in de geselecteerde maand.
Tenslotte worden de nieuwe rijen toegevoegd aan de tabel:

De query in de ontwerpweergave

Het ontwerp van de toevoegquery 'Rekeningregels maken'

Op de rekening, die abonnee's ontvangen van MEDIAGROEP, staan alleen rekeningregels voor de tijdschriften, waarop de abonnee in de betreffende maand een abonnement heeft afgesloten.
Rekeningregels, die geprint gaan worden op de nieuw aangemaakte rekeningen uit de tabel REKENING moeten dus voldoen aan een aantal voorwaarden: De query in de ontwerpweergave

Natuurlijk is het mooier om de toevoegquery's 'Rekeningen maken' en 'Rekeningregels maken' direct na elkaar te laten uitvoeren.
In een volgend practicum komen we daar op terug.