2.1.1 Wat is een query
Een query is in principe een vraagstelling. We zoeken selectief databasegegevens op of gaan deze bewerken. We zouden met een query bijvoorbeeld het volgende kunnen doen:
Men onderscheidt twee groepen querys:
Binnen elke groep zijn er verschillende soorten:
1) Selectiequerys:
a) gewone selectiequerys
b) parameter querys
c) totaalquerys
d) kruistabelquerys
2) Actiequerys:
a) tabelmaakquerys
b) verwijderquerys
c) toevoegquerys
d) bijwerkquerys
Selectiequerys helpen ons bij het weergeven van gegevens met één of meerdere
tabellen als basis, maar veranderen de gegevens in de basistabel(len) niet.
Actiequerys daarentegen veranderen de tabelgegevens wel.
2.1.2 Selectiequery's
2.1.2.1 Gewone selectiequerys
Een selectiequery maken en uitvoeren
Kies uit de lijst van de database-objecten de knop Querys
Kies de knop "Nieuw"
Vervolgens verkrijg je het volgende dialoogvenster:

Net zoals bij het maken van een nieuwe tabel kan je ook hier weer kiezen tussen
"begeleid" ontwerpen (verschillende Query Wizards) of
"zelfstandig" werken (Ontwerpweergave).
Wij opteren voor de keuze "ontwerpweergave".
Elke query is gebaseerd op één of meerdere tabellen. Logisch dus dat je
eerst het volgende venster verkrijgt:

Kies de tabel en klik op toevoegen. Je kan ook dubbelklikken.
Let op: je mag enkel maar die tabellen aan het ontwerpvenster van je selectiequery
toekennen die je ook effectief voor het selecteren van de gegevens nodig hebt.
Indien je bijvoorbeeld alleen een lijst van de klassen wenst, mag je maar enkel de tabel tblKlassen
toevoegen aan het onwerpvenster. Wens je daarentegen de titels van de boeken per klas dan
moet je zowel de tabel tblKlassen, tblBoeken als tblBoekenperklas aan het
ontwerpvenster van je selectiequery toevoegen. Selecteer in dit geval met
<CTRL><ENTER>.
Het query- venster is horizontaal verdeeld in twee delen. Bovenaan vind je de tabellen,
onderaan de query-informatie. De grenslijnen kun je met de muiscursor verplaatsen. Zo
vergroot of verklein je de delen.
Kiezen van de velden
Selecteer bij de bestanden de velden die je in de query wenst op te nemen. Met <SHIFT> en/of <CTRL> in te drukken is het mogelijk meerdere velden ineens te selecteren.
Sleep de geselecteerde velden naar het query-venster (het onderste gedeelte), naar de rij van de veldnamen. De veldnamen van de geselecteerde velden komen in het query-venster in de volgorde van de selectie (één per één selecteren) of in de volgorde van de bestandsstructuur (meerdere velden ineens selecteren). Deze volgorde is wel van belang als je later wilt sorteren.
Naast slepen van de velden kun je ook dubbelklikken op de velden of kiezen uit de lijstknop in de rij VELD.
Wens je alle velden op te nemen kies dan voor het sterretje uit de lijst van veldnamen (slepen of dubbelklikken). In het query-venster zie je dan alleen bestandsnaam.* . Bij het uitvoeren zie je alle velden.
Het query-venster geeft maximaal 5 zichtbare kolommen weer. Heb je meer velden dan kun je deze altijd terugvinden via de onderste schuifbalk.
Selecteer het veld dat je wenst te verplaatsen en sleep het in de rij van veldnamen naar de kolom waar je het veld wil hebben. Vanaf deze kolom schuiven alle velden naar rechts op zodat de gevraagde kolom vrij komt voor een nieuw veld.
je bewaart de query via Bestand, opslaan.
Je kan ook gewoon de query sluiten, dan wordt automatisch gevraagd om op te slaan.
Nadat je een aantal velden in de query toegevoegd hebt (minstens één) kun je het
resultaat opvragen via de knop gegevensblad
of via
starten
.
Tips:
|
sorteren van gegevens
In de rij "Sorteervolgorde" bepaal je de volgorde waarin de gegevens voorkomen.
Sorteer je op meerdere velden, dan heeft de sortering in een linkse kolom altijd
prioriteit op de sortering in een kolom rechts ervan. Om de sorteervolgorde te wijzigen,
kan je eventueel kolommen van plaats veranderen.
oefening
We wensen bijvoorbeeld bij het begin van het schooljaar een lijst van alle klassen, met de onderwijsvorm, de klasomschrijving, de klascode en het aantal leerlingen per klas, te starten vanaf het eerste jaar. De oplossing is als volgt:

enkelvoudige voorwaarden
Om voorwaarden te formuleren kan je deze bij het juiste veld in de criteria-zone typen. Willen we alleen de gegevens van het BSO dan lossen we dit op als volgt:
Voor het opstellen van voorwaarden kunnen we beschikken over relationele operatoren.
= |
...is gelijk aan... |
< |
... is kleiner dan... of komt alfabetisch voor... |
> |
...is groter dan ... of komt alfabetisch na... |
<= |
...is kleiner of gelijk aan... of komt alfabetisch voor of is gelijk aan... |
>= |
...is groter of gelijk aan... of komt alfabetisch na of is gelijk aan... |
Bij numerieke velden worden alleen de cijfers en het decimaal teken getypt, geen formaatsymbolen zoals BEF of het scheidingsteken van de duizendtallen.
| tips: Wil je alle velden zien die aan een bepaalde voorwaarde voldoen:
|
samengestelde voorwaarden
De criteria-zone bestaat uit meerdere rijen, dit voor het invoeren van samengestelde voorwaarden. Bij samengestelde voorwaarden spelen de logische operatoren EN en OF een belangrijke rol. EN betekent dat alle voorwaarden moeten voldaan zijn, terwijl OF betekent dat slechts één van de voorwaarden voldaan moet zijn, om het record te mogen afdrukken.
Alle voorwaarden die je in dezelfde rij van de criteria-zone schrijft worden automatisch met de logische operator EN gekoppeld. Voorwaarden die je in verschillende rijen van de criteria-zone schrijft worden met de logische operator OF gekoppeld.
Zoek je alle klassen uit het BSO waar er meer dan 10 leerlingen zijn ( EN) dan los je dit als volgt op:

Zoek je echter ofwel de klassen BSO OF de klassen waarvan er meer dan 10 leerlingen zijn, dan is de oplossing zo:

gebruik van wildcards in de voorwaarden
Net zoals in DOS zijn in ACCESS de jokers het ? en het *.
? vervangt één willekeurig karakter
* vervangt een groep karakters
oefeningen
vraag 1: Maak een query op tblBoeken en geef de titel weer van alle boeken informatica die te huur zijn.
vraag 2: Maak volgende query's op tblKlassen:
a Welke klassen hebben meer dan 20 leerlingen?
b Geef alle klassen uit het 5de jaar;
c Welke klassen hebben 10 tot 15 leerlingen?
2.1.2.2 Parameterquerys
Als je regelmatig dezelfde selectiequery uitvoert maar elke keer de bijbehorende criteria
wijzigt, kun je tijd besparen door een parameterquery te maken. Het voordeel van een
parameterquery is dat je niet telkens het query-ontwerpraster hoeft te wijzigen om andere
criteria op te geven. Nadat de query wordt gestart, worden de opgegeven criteria
automatisch gevraagd. Je kunt meerdere parameters opgeven voor een veld. Als je een
parameterquery uitvoert, word je gevraagd criteria in te voeren in het dialoogvenster
<Parameterwaarde invoeren>.
Een parameterquery maken en uitvoeren
We wensen het adres te weten van een bepaalde uitgeverij. Om deze query op te lossen gaan
we als volgt te werk:
Maak een selectiequery . Sleep in de query-ontwerpweergave de velden die
je wilt gebruiken uit de lijst met velden naar het query-ontwerpraster;
Typ in de rij "Criteria" onder elk veld dat je als parameter wilt gebruiken, een
aanwijzing tussen vierkante haakjes (vb. [Welke gemeente?]).
Deze aanwijzing wordt automatisch weergegeven wanneer de query wordt uitgevoerd. de tekst van de aanwijzing mag niet dezelfde zijn als de veldnaam, maar mag deze veldnaam wel bevatten.
Wens je ook gegevens op te vragen met jokers dan moet je voor de vraag het woordje zoals typen (vb. zoals[ Welke uitgeverij?]. zo kun je bijvoorbeeld alle uitgeverijen die starten met van* terugvinden.
Wens je het de gebruiker nog gemakkelijker te maken dan stel je de volgende vraag: zoals [welke uitgeverij?]&*.
In dit geval is het voldoende als je het eerste karakter van de uitgeverij kent.(&=ampersand en wordt gebruikt om tekstgegevens aan elkaar te plakken).
oefening
we wensen het adres te vinden van een uitgeverij .

vraag: Maak gebruik van tblKlassen. De gebruiker vraagt
telkens naar een nieuwe klas.
2.1.2.3 Totaalquerys
Een totaalquery maken en uitvoeren
Een totaalquery gebruik je om op gegevens uit je tabel één van de volgende bewerkingen
uit te voeren:
| Group By | groepeert de gegevens per categorie |
| Som | berekent het totaal (enkel bij numerieke velden en valutavelden) |
| Gem | berekent het gemiddelde (enkel bij numerieke velden en valutavelden) |
| Min | haalt de laagste waarde uit een reeks waarden |
| Max | haalt de hoogste waarde uit een reeks waarden |
| Aantal | telt het aantal geselecteerde records |
| Stdev | berekent de standaardafwijking van een aantal waarden (voor statistiek) |
| Var | berekent de variantie van een aantal waarden (voor statistiek) |
| Eerste | haalt de waarde uit het eerste record in een query |
| laatste | haalt de waarde uit het laatste record in een query |
| Expressie | opgeven expressie waarmee berekening wordt uitgevoerd |
| Where | geeft criterium op waaraan de gegevens getoetst worden |
Om van een selectiequery een totaalquery te kunnen maken, moet een totaalrij aan het
query-ontwerp toegevoegd worden. Dit kan op verschillende manieren gebeuren:
via <Beeld> <Totalen>
via de knop <Totalen>
via het snelmenu (rechter muisknop)
We willen weten hoeveel uitgeverijen er in elke gemeente zijn.

Hiervoor moeten we groeperen per gemeente en binnen elke groep dan het aantal records
tellen:
kolomtitels wijzigen
Als we met een totaalquery werken krijgen we bovenaan de kolom een titel weer die het gevraagde totaal weerspiegelt. Toch past deze niet altijd. Om nu een eigen titel toe te voegen moeten we gewoon bovenaan in de veldkolom de gewenste tekst toevoegen met daarna een dubbele punt.Bv.:
TOTAAL: Uitgeverij_benaming
vraag 1: Maak gebruik van tblUitgeverijen om volgende query op te lossen. Geef het aantal uitgeverijen in een gemeente. Telkens men naar gegevensweergave gaat wordt een nieuwe gemeente gevraagd.
vraag 2: Maak gebruik van tblKlassen om het totaal aantal klassen te berekenen in BSO en TSO, geef ook per richting het aantal leerlingen.
vraag 3:Bereken op basis van tblBoeken de gemiddelde kostprijs van de boeken die te koop zijn.
2.1.2.4 Een kruistabelquery maken en uitvoeren
Een kruistabelquery berekent resultaten aan de hand van minimum twee veranderlijke
gegevens (variabelen). De waarden van die variabelen worden in tabelvorm uitgezet waarbij
de eerste variabele als kolomkop uitgezet wordt en de overige variabelen als rijkoppen.
Het resultaat ziet er algemeen uit als volgt:
KOLOMKOP
| Variabele 1 | Variabele 1 | ||
| Variabele 2 | Variabele 3 | Berekende waarde | Berekende waarde |
| Variabele 2 | Variabele 3 | Berekende waarde | Berekende waarde |
| Variabele 2 | Variabele 3 | Berekende waarde | Berekende waarde |
we gaan als volgt te werk:
Maak een selectiequery en voeg de nodige velden in het ontwerpvenster toe.
Verander van selectiequery naar kruistabelquery via het menu <Query> <Kruistabelquery> of via de knop <Querytype>. Aan het queryontwerp zijn nu twee rijen toegevoegd. Een rij "Totaal" (zie totaalquerys hiervoor) en een rij "kruistabel".
Bij een kruistabel heb je minimum drie velden nodig:
- een kolomkop (veld met de eerste variabele)
- een rijkop (veld met de tweede variabele)
- een waarde (veld dat als basis van de berekening dient)
eventueel kun je meerdere rijkoppen in de kruistabel opnemen (bijvoorbeeld een rij die de
totalen van elke rij telt). Pas op: Je kunt altijd maar 1 veld als "kolomkop" en
1 veld als "Waarde" instellen.
In de rij "Kruistabel" plaats je deze waarden bij de juiste velden.
In de rij "Totaal" kies je:
- Voor de kolomkop en de eerste rijkop: Group By (groeperen per kolomkop en rijkop)
- De bewerking die je op de waarde wilt uitvoeren (in ons voorbeeld is dit <aantal>
het aantal records tellen die aan de voorwaarde voldoen)
oefening
We willen weten hoeveel boeken er hetzij te koop hetzij te huur zijn per vakgebied.
oplossing:

2.1.3 Action query's
hiervoor besproken querys helpen ons bij het weergeven en berekenen van gegevens met één of meerdere tabellen als basis, maar veranderen de gegevens in de basistabel(len) niet. Actiequerys daarentegen veranderen de tabelgegevens wel.
| Tips: Maak dus altijd eerst een kopie van de tabel die
je met een actiequery wilt veranderen. De wijzigingen zijn immers definitief. Het is dan
ook veiliger eerst de query uit te testen via gegevensblad |
2.1.3.1 Verwijderquery's
Met een verwijderquery verwijder je een aantal volledige records uit een
tabel. Het is niet mogelijk om alleen veldinhouden te wissen. Bij het uitvoeren van een
verwijderquery worden de records onmiddellijk gewist en deze kunnen niet meer hersteld
worden tenzij je ze eerst in een ander bestand bewaard hebt.
Een verwijderquery maken en uitvoeren
Maak een selectiequery en verander deze query in een verwijderquery (via de knop
"Querytype)

Je verkrijgt vervolgens in het ontwerpvenster een nieuwe rij "verwijderen"
Breng in het queryraster de selectiecriteria aan waaraan de te verwijderen records moeten
voldoen.
Klik op op de werkbalk om te bekijken welke records er zullen verwijderd worden). Breng
eventueel nog wijzigingen aan. Klik op
op de
werkbalk om terug te gaan naar de ontwerpweergave van de query.
Klik op
op de werkbalk om de records effectief uit
de tabel te verwijderen. Je verkrijgt de volgende waarschuwing:

klik op "Ja" als je de records wilt verwijderen.
oefening:
Alle boeken wiskunde "Levensecht rekenen" (diverse leergangen ) worden tijdelijk uit de handel gehaald. Verwijder ze uit de tabel.

vraag : verwijder uit tblboeken_Per_leerling alle leerlingen die de boeken reeds betaald hebben
2.1.3.2 Tabelmaakquery's
De tabelmaakquery maakt uit een (gedeelte van een) tabel, een nieuwe, aparte tabel. Met een tabelmaakquery maak je dus een nieuwe tabel waarin je een aantal welbepaalde records uit de actieve tabel kopieert. dit kan interessant zijn :
- als je gegevens wilt exporteren naar een andere database
- als je gegevens wilt wegschrijven in een historiek bestand
- als je een situatie op een bepaalde datum of tijd wilt bewaren om evoluties te volgen
- als je bepaalde bewerkingen vlugger wilt laten verlopen.
Een tabelmaakquery maken en uitvoeren
Maak een selectiequery door de tabellen of query's te selecteren met de records die je wilt opnemen in de nieuwe tabel. Neem vervolgens de nodige velden in je selectiequery op. Klik vervolgens op "Tabelmaakquery". Het dialoogvenster <Tabelmaakquery> verschijnt:

Typ in het vak "Tabelnaam" de naam van de tabel die u wilt maken
of klik in de lijst op de naam van de tabel die u wilt vervangen.
Klik op "Huidige database" als u de nieuwe tabel wilt opnemen in de database die
momenteel is geopend. Je kunt ook op "Andere database" klikken en de naam typen
van de database waarin je de nieuwe tabel wilt opnemen. Typ indien nodig ook het pad.
Klik op "OK"
Klik op op de werkbalk als je de nieuwe tabel eerst wilt bekijken (vooraleer ze effectief
aan te maken). Breng eventueel nog wijzigingen aan. Klik op op de werkbalk om terug te
gaan naar de ontwerpweergave van de query. Klik op
op de werkbalk om de nieuwe tabel te maken. Je verkrijgt de volgende waarschuwing:

Indien je op "Ja" klikt, wordt de tabel aangemaakt in onze databank. Dit kun je
controleren door in het databasevenster te klikken op het tabblad "Tabellen".
Eén van je tabellen is nu de nieuwe tabel.
Opmerkingen:
Met CTRL+BREAK kunt je de uitvoering van een actiequery stoppen.
Nadat je een tabelmaakquery hebt uitgevoerd, kun je naar de ontwerpweergave van de nieuwe
tabel gaan en een primaire sleutel en tabeleigenschappen instellen.
De gegevens in de nieuwe tabel nemen niet automatisch de veldeigenschappen van de
oorspronkelijke tabel over. In elk geval mag de query niet dezelfde naam hebben als de
tabel. Het volgende dialoogvenster verschijnt bij het toekennen van eenzelfde naam:

oefening:
Maak een nieuwe tabel aan waarin je alle te huren boeken opneemt
Oplossing:
We maken een gewone selectiequery waarin we alle velden opnemen nl.tblBoeken.*. We voegen het veld Huren_of_Kopen toe, maar zorgen ervoor dat "Weergeven" af staat. Daarna voeren we als Criteria "H" in. We We testen even via gegevensblad. We maken nu een tabelmaakquery en geven als naam tblHuren. We voeren uit via starten. Om te zien of de oefening gelukt is gaan we kijken bij tabellen. tblHuren werd aan de lijst toegevoegd.

vraag: Maak op basis van tblLeerlingen een klaslijst op van een 'gewenste klas'. Bv. we willen een klaslijst van 5BI, 6H... We willen in de nieuwe tabellen enkel de naam en het nummer van de leerling.
2.1.3.3 Toevoegquery's
Je gebruikt een toevoegquery om records uit je actieve tabel aan een andere tabel toe te
voegen..
Een toevoegquery maken en uitvoeren
Het spreekt vanzelf dat de structuur van beide tabellen zoveel mogelijk met elkaar moet
overeenkomen. Enkel gegevens uit velden die in beide bestanden voorkomen en van hetzelfde
gegevenstype zijn worden aan de tabel toegevoegd. Als bij tekstvelden de veldlengte in het
bestand waaraan je records wenst toe te voegen kleiner is dan de veldlengte van de toe te
voegen records in de actieve tabel, dan zal het toevoegen uitgevoerd worden, maar de
eventuele karakters die niet meer in het veld passen gaan verloren.
Om een toevoegquery te maken kan je als volgt te werk gaan:
Maak een selectiequery en selecteer de tabel waaruit je gegevens wil halen . Verander deze
query in een toevoegquery (via de knop "Querytype). Het volgende dialoogvenster
verschijnt:

Bij "Tabelnaam" vul je de naam in van de tabel waaraan je de
gegevens wil toevoegen. Dit doe je het best door de naam van de tabel te selecteren uit
het lijstje dat je verkrijgt door op het pijltje te klikken.
Selecteer "Huidige database" omdat we de records willen toevoegen aan een tabel
uit dezelfde databank. Met de keuze "Andere database" kunnen we records
toevoegen aan een tabel uit een andere databank je moet dan wel de naam (en
eventueel het pad) van deze andere databank bij "Bestandsnaam" intypen.
In je query-ontwerpvenster verkrijg je een nieuwe rij "Toevoegen
aan"
Selecteer de velden waarvan je de gegevens wil opnemen in de andere tabel. Met de asterisk
(*) geef je aan dat alle velden moeten toegevoegd worden. Je kan natuurlijk ook veld per
veld opgeven als je niet alle velden wil toevoegen. Via selectiecriteria beperk je het
toevoegen tot een bepaalde groep records.
Klik op op de werkbalk om te bekijken welke records er zullen toegevoegd worden. Breng
eventueel nog wijzigingen aan. Klik op
op de
werkbalk om terug te gaan naar de ontwerpweergave van de query. Klik op
op de werkbalk om de records uit de tabel effectief aan
de andere tabel toe te voegen. Je verkrijgt de volgende waarschuwing:

Opmerkingen
1.Als de veldnamen in beide tabellen gelijk zijn, zullen deze automatisch in het
query-raster in de "Toevoegen aan" rij ingevuld worden.
2.Indien beide tabellen verschillende veldnamen bevatten, dan kan je in het query-raster
in de rij "Toevoegen aan" de corresponderende velden selecteren.
3.Als je de velden met een asterisk (*) selecteert zullen alleen de gegevens van de velden
met dezelfde veldnamen toegevoegd worden.
4.Als je de velden met een asterisk (*) selecteert en nog bijkomende velden selecteert om
voorwaarde te definiëren, dan mag in de "Toevoegen aan" rij niets staan, anders
krijg je een foutmelding .
5.Bij het toevoegen van records aan een bestaande tabel moet je rekening houden met de
primaire sleutel van deze tabel.
6.Bij het uitvoeren van de toevoegquery worden de geselecteerde velden en
records aan het opgegeven bestand toegevoegd. In je actieve bestand verandert echter
niets.
vraag: Voeg aan de tabel tbl5BI alle namen en nummers toe van de
leerlingen uit de andere 5de jaars. Je maakte deze tabel in de vorige oefening op de
tabelmaakquery.
2.1.3.4 Bijwerkquery's
Een bijwerkquery gebruiken we om groepen gegevens te wijzigen in een
tabel.
Een bijwerkquery maak je als volgt:
- Activeer het query ontwerpvenster.
- Selecteer de tabel waarin je de gegevens wenst te wijzigen.
- Verander deze query in een bijwerkquery
.
Een rij met tabelnamen en een rij "Wijzigen in" verschijnt. In deze laatste rij moet je de wijzigingen typen.
Selecteer de velden waarin je de wijzigingen wil aanbrengen, en ook nog de
velden waarop je een voorwaarde wil definiëren.
Typ de wijzigingen (formule) in de rij "Wijzigen in" bij de juiste velden.
Oefening:
We willen in tblBoeken de eenheidsprijs met 10% verhogen. Het query-ontwerpvenster ziet er als volgt uit:

Klik op op de werkbalk om te bekijken hoeveel records er zullen bijgewerkt
worden. De "bijwerking" zelf kun je op deze manier niet zien . Klik op op de
werkbalk om terug te gaan naar de ontwerpweergave van de query. Klik op starten om de
records uit de tabel effectief bij te werken. Je krijgt de waarschuwing dat er x-aantal
recods bijgewerkt zullen worden.
Je kunt nooit van vooraf het resultaat van een bijwerkquery bekijken. In het gegevensblad
zie je namelijk enkel maar WELKE records er zullen bijgewerkt worden, niet HOE (of in
welke nieuwe waarde) ze zullen bijgewerkt worden. Daarenboven worden de "oude"
cijfers overschreven,zodat je de juistheid zelf moeilijk kan gaan controleren.
Bijvoorbeeld: als je een prijsverhoging van 10% doorvoert kun je nog moeilijk gaan
controleren ofdat de verhoging correct is, indien de oorspronkelijke gegevens niet meer
aanwezig zijn.
Daarom is het beter om voor bijwerkquery's de volgende procedure te volgen:
Maak een nieuwe tabel door middel van een tabelmaakquery ; plaats in deze tabel de
primaire sleutel en zowel de oude als de nieuwe waarde. Deze nieuwe waarde (Bv.
"Nieuwe_prijs") maak je a.d.h.v. een "Berekend veld". Op deze manier
kun je goed de gebruikte expressie controleren en blijf je ook over de oude waarden
beschikken. Bekijk het gegevensblad van deze query en indien het resultaat correct is mag
je deze query uitvoeren, zodat ook effectief een nieuwe tabel aangemaakt wordt.
vraag: de afdeling KANTOOR krijgt een nieuwe benaming nl. KANTOOR EN VERKOOP.
Wijzig nu in tblKlassen de naam van de afdeling (Klas_Code).