2.1 Soorten query's

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 query’s:

Binnen elke groep zijn er verschillende soorten:

1) Selectiequery’s:

a) gewone selectiequery’s
b) parameter query’s
c) totaalquery’s
d) kruistabelquery’s

2) Actiequery’s:
a) tabelmaakquery’s
b) verwijderquery’s
c) toevoegquery’s
d) bijwerkquery’s


Selectiequery’s helpen ons bij het weergeven van gegevens met één of meerdere tabellen als basis, maar veranderen de gegevens in de basistabel(len) niet. Actiequery’s daarentegen veranderen de tabelgegevens wel.

2.1.2 Selectiequery's


2.1.2.1 Gewone selectiequery’s

Kies uit de lijst van de database-objecten de knop Query’s
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 Wizard’s) 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.

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:
  • Het is nu duidelijk dat een query geen nieuwe tabel is maar een programma dat bij het opvragen telkens opnieuw uitgevoerd wordt. De gegevens worden afgedrukt zoals bij het raadplegen van bestandsgegevens. Je kan de gegevens (kolombreedte, verlaatsen,...) dan ook op dezelfde manier bewerken zoals in een bestand.
  • De naam van een query mag niet gelijk zijn aan de naam van een tabel, anders wordt de tabel overschreven.

 


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:

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:

  • Kies dan voor bestandsnaam.*
  • Voeg het veld met de voorwaarde toe
  • Zet weergave af bij het veld met de voorwaarde

 

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:

Net zoals in DOS zijn in ACCESS de jokers het ? en het *.

? vervangt één willekeurig karakter

* vervangt een groep karakters

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?

 antwoorden

2.1.2.2 Parameterquery’s

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.

 antwoord

2.1.2.3 Totaalquery’s


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:

 

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.

 antwoorden

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:

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 query’s 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. Actiequery’s 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 en pas indien de wijzigingen goed zijn, uit te voeren via .

 

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.


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

antwoord

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.

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.

antwoord

2.1.3.3 Toevoegquery's

Je gebruikt een toevoegquery om records uit je actieve tabel aan een andere tabel toe te voegen..


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.

antwoord 

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).

antwoord