Computervaardigheden Hoofdstuk 5 — Databanken (Let op: dit is enkel voor studenten Bio-Ingenieur.)
-
Upload
sofie-verstraeten -
Category
Documents
-
view
219 -
download
0
Transcript of Computervaardigheden Hoofdstuk 5 — Databanken (Let op: dit is enkel voor studenten Bio-Ingenieur.)
ComputervaardighedenHoofdstuk 5 — Databanken
(Let op: dit is enkel voor studenten Bio-Ingenieur.)
2
Inhoud
• Terminologie• Data importeren• Basis queries• Allerhande Joins
“Doe dit.”
“Aandachtspunt!”
“Wat gebeurt hier ?”
“Controleer wat je ziet.”
3
Anatomie van een databank
• Een databank is een verzameling van tabellen.• Een tabel is een lijst van records.• Een record is een lijst van velden.
• Alle records binnen éénzelfde tabel hebben dezelfde structuur.- Ariteit (aantal velden).- Type (soort veld; hoofdzakelijk getal of tekst)
4
Elk Access project is één databank
Hier vind je een
overzicht van de
tabellen in deze
databank.
Dit is een
voorbeeld van
zo’n tabel. Elke
tabel heeft een
unieke naam.
Deze tabel heet
“Data”.
Hier zie je het aantal records in een tabel.
5
Een nieuwe databank starten
1. Open Microsoft Access
2. Menu: File/New ...
3. Kies voor “blank database”
4. Kies een naam voor je database
5. En sla op.
6
Data importeren
1. File > Get External Data > Import...
Let op: kies niet voor “Link Tables...” ! Dit laat je
wel toe de data te gebruiken, maar importeert
deze niet in Access. Als je bewaart wordt de data
niet mee bewaard, en als je je Access project
nadien doorstuurt (of indient op het examen)
werkt je verdere code niet meer.
2. Kies je databestand.
Let op: kies het juiste type bij “Files of type”!
7
Data importeren
3. Selecteer “Delimited”; Next4. Kies de juiste delimiter. Zorg dat “First
Row contains Field Names” geselecteerd is.
Next.
Gebruik de preview om het effect van je keuzes te
bekijken en te verifiëren.
8
Data importeren
5. Kies voor “In a New Table”; Next 6. Next.
9
Data importeren
7. Kies voor “No primary key”; Next 8. Kies een naam voor je tabel; Finish.
10
Queries
• Een query is een bevraging van de databank.• Een query gebeurt op basis van de records in één
of meer tabellen.• Het resultaat van een query is zelf ook een tabel.
- Deze tabel blijft gebonden aan de query, en verandert als de records in de andere tabellen veranderen.
11
Nieuwe Query starten
1. Klik op “Queries”, en dubbelklik op
“Create Query in Design View”
2. Voor elke tabel die je wil bevragen,
selecteer deze en klik op “Add”. Sluit af
met “Close”.
Let op: kies uitsluiten de tabellen die je echt nodig
hebt ! Overbodige tabellen zullen het resultaat van
je query beïnvloeden.
12
De Query maken en evalueren
3. Dubbelklik op “*” in tabel “Data”.4. Klik op het “View” icoon linksboven.
Kies voor “Datasheet View”. De design
view wordt dan vervangen door een tabel
met de resultaten van de query.
Deze stap bouwt de query op. De query
hierboven selecteert alle records. Andere
soorten queries volgen later in de slides.
13
SQL: de code achter je Query
5. Klik linksboven op het “View” icoon. Kies
deze keer voor “SQL View”. De datasheet
view wordt vervangen door een tekstveld
met daarin de code van je Query.
Deze code is SQL code. SQL is een standaard
query taal (Standard Query Language => SQL) die
door zowat alle databanken gesproken wordt. Wat
je in de design view doet, is eigenlijk het opstellen
van zo’n SQL query die dan door Access wordt
verwerkt.
Let op: Deze cursus verwacht niet dat je zelf zo’n
code kan schrijven. Je moet echter wel weten hoe
je ze terug kan vinden, aangezien deze code vaak
als antwoord dient op examenvragen.
14
Sorteren op velden
1. Keer terug naar de “Design View”.
2. Verwijder de kolom met de “*” uit je
query. (Klik op het kleine balkje, dan
delete of rechtsklik en “Cut”.)
3. Voeg velden “day” en “sunshine” toe.
4. Kies bij de kolom voor “day” bij “Sort”
voor “Ascending”.
5. Ga naar de “Datasheet View”.
Je krijgt als resultaat een tabel met volgende
eigenschappen:
• elke record heeft slechts twee velden, en
• alle records zijn gesorteerd op datum.
15
Formules
1. Keer terug naar de “Design View”.
2. Selecteer “day” in de cel “Field:” van de
eerste kolom.
3. Vervang dit met:
month: Month(day)
rain: rainAM + rainPM
4. In de “Field:” cel van kolom drie, schrijf:
5. Ga naar de “Datasheet View”.
De tabel bevat nu records met drie velden:
• het maandnummer bevat,
• de hoeveelheid zon, en
• de som is van de regen in voor- en namiddag van de
oorspronkelijke record.
16
Algemene vorm van formules
Elke formule is van de vorm:
field_name : expr
function_name ( params )
Hierbij is field_name een naam voor het nieuwe veld. Dit is vrij te kiezen, maar moet uniek
zijn.
Na de dubbelpunt volgt een expressie die de waarde voor het nieuwe veld berekent. Dit is
een combinatie van rekenkundige bewerkingen (+, -, *, /) en/of aanroepen van functies. Die
laatste zien er steeds als volgt uit:
Hierbij is function_name natuurlijk de naam van de functie die je wil aanroepen. In ons
voorbeeld was dat “Month”. De parameters geef je op als een lijst, eventueel gescheiden
met komma’s (dus geen punt-komma’s als in Excel).
17
Queries met voorwaarden
Probeer elk van deze queries en vergelijk:
De linker-query selecteert alle records
waarvan zowel sunshine als rain
groter zijn dan 5. Er zijn 13 dergelijke
records.
De rechter query selecteert alle records
waarvan ofwel sunshine ofwel rain
groter is dan 5. Er zijn 204 dergelijke
records.
18
Queries met voorwaarden
Elke voorwaarde die je plaatst in één van de cellen van de “Criteria:” rijen test de waarde van
het veld in de overeenkomstige kolom.
Als twee voorwaarden in eenzelfde rij staan (zoals hierboven), dan moet aan beide
voorwaarden voldaan zijn vooraleer een record aanvaard wordt.
Als twee voorwaarden in verschillende rijen staan (zoals hieronder), dan is het
voldoende dat de record aan de voorwaarden van één rij voldoet om geselecteerd te worden.
Zelfde rij: logische “AND”
Verschillende rijen: logische
“OR”
19
Queries met voorwaarden
Je kan ook meerdere voorwaarden in één cel plaatsen:
Bovenstaande query kijkt of sunshine kleiner is dan 1 of
(omwille van de OR) groter dan 5, en (omdat de
voorwaardan in dezelfde rij staan) of rain groter is dan 1 en
(omwille van de AND) kleiner dan 5. M.a.w.:
(sun < 1 Or sun > 5) And (rain > 1 And rain < 5)
20
Queries over groepen van records
1. Start een nieuwe query op basis van de tabel “Data”.
2. Klik op het “Totals” icoon in de toolbar.
Verifieer dat je design view nu ook een “Total:” rij bevat.
21
Queries over groepen van records
3. Voeg drie keer veld “sunshine” aan de query toe.
4. Selecteer bij “Total:” voor de eerste sunshine “Min”, voor de tweede sunshine “Max” en
voor de derde sunshine “Avg”.
5. Geef elke sunshine een naam (“min”, “max”, “average”).
7. Bekijk het resultaat in de datasheet view.
22
Totals
“Totals” laat toe om karakteristieken te berekenen op basis van een groep records in
plaats van individuele records.
Mogelijkheden: min, max, avg, stdev, count, sum,...
Het resultaat is één record per groep, met daarin de berekende karakteristieken als velden.
Zo berekende deze query de minimum, maximum en gemiddelde hoeveelheid zonneschijn
over het gehele jaar.
23
Totals + Group ByPas vorige query als volgt aan:
1. Voeg een nieuwe kolom toe met “day”.
2. Pas de waarde “day” aan met de expressie voor het berekenen van de maand.
3. Kies bij “Total:” voor “Group By”.
Bekijk het resultaat in de datasheet view.
De tabel bevat nu twaalf records, één voor elke maand.
Dit is omdat we alle records gegroepeerd hebben op
basis van de waarde voor maand. Zo zijn er natuurlijk
juist twaalf.
24
Elke query levert een tabel op!
Je kan dus queries doen op basis van de
resultaten van eerdere queries.
25
Queries op resultaten van queriesBewaar de vorige query als “SunshinePerMonth”. Start dan een nieuwe query op basis van
SunshinePerMonth (zie figuur linksonder).
Voeg dan month en average toe, en stel dat average groter moet
zijn dan 5 (zie figuur rechtsboven).
Bekijk het resultaat in de datasheet view (figuur rechts).
Sla de query op als “MonthsWithSunshineOver5” (wordt later in de
slides opnieuw gebruikt).
26
Voorbereiding: tabel MonthsImporteer de data uit months.txt in een nieuwe tabel genaamd “Months”.
27
Queries over meerdere tabellenStart een nieuwe query op basis van de “Months” tabel en op basis van de
“SunshinePerMonth” query.
Voeg daarna elk veld uit elke tabel toe aan de query.
Bekijk het resultaat in de datasheet view.
28
Queries over meerdere tabellen
Months SunshinePerMonth
X
= 12 x 12
29
Inner Join
Het resultaat van vorige query is een tabel waarbij elke record uit de eerste tabel
(Months) wordt gecombineerd met elke record uit de tweede tabel
(SunshinePerMonth).
Wat we eigenlijk willen is dat records uit beide tabellen pas worden gecombineerd als hun
waarde voor maand overeenkomt. Dit is wat we nu gaan doen:
Sleep “Number” uit “Months” op “month” uit “SunshinePerMonth”. Access toont hierna een
verbinding tussen deze twee velden. Dit is een “Inner Join”.
Bekijk het resultaat in de datasheet view.
30
Inner JoinMonths SunshinePerMonth
Merk op dat door het leggen van een inner join nu alleen
records worden samengesteld waarvoor de waarden die
meespelen in de inner join dezelfde zijn.
31
Primary en Foreign Keys
Gegeven dit:
Je kan nu zeggen dat “Number” en “month” keys zijn.
Van een primary key wordt verwacht dat elke record binnen een tabel een unieke waarde
voor deze key heeft. Dit is het geval voor “Number” in “Months”.
Een foreign key is een veld waarvan de waarde overeen komt met de primary key van
records in een bepaalde tabel. Dit is het geval voor “month” in “SunshinePerMonth”.
Keys worden dus gebruikt om records in verschillende tabellen aan elkaar te linken. Dit is in
essentie wat we doen in een Join.
32
Inner Join + Voorwaarden
Pas de query als volgt aan: Bekijk het resultaat:
Bij combinatie van joins en voorwaarden: eerst gebeurt de join, daarna wordt het resultaat
gefilterd door de voorwaarden.
33
Voorbereiding
Maak volgende query: Bekijk het resultaat:
De definitie van “MonthsWithSunshineOver5” vind
je terug op slide 25.
Merk op: dit levert het zelfde resultaat op als de
query in de vorige slide. Les geleerd: er zijn altijd
wel meerdere oplossingen mogelijk.
34
Outer Join
Dubbelklik op de verbinding tussen
Number en month. Kies optie 2 (ALL from
“Months”), en klik OK.
Verifieer dat er de verbinding
tussen Number en month nu een
richting heeft gekregen (van
Number naar month).
Dit maakt van je inner join een outer join. De pijl toont aan dat je join nu een outer join is.
35
Outer Join
Merk op dat elke record uit Months nu mee wordt
opgenomen in het resultaat, ook al was er geen
record in SunshinePerMonthOver5 met een
overeenkomstige waarde voor number. De overige
velden worden leeg gelaten.
?
?
?
36
Voorbereiding
Importeer de data in “haltes.txt” in een nieuwe
tabel “Haltes”.
Importeer de data in “lijnen.txt” in een nieuwe
tabel “Lijnen”.
37
Recursieve Join
Start een nieuwe query. Voeg de tabel
“Haltes” twee keer toe.
Bouw daarna de query als volgt op:
38
Recursieve Join
Een recursieve join werkt dus als een gewone join. Het enige verschil is dat je twee keer dezelfde
tabel bevraagt.
Haltes Haltes
39
Meerdere joins in één query
Rechtsklik naast één van de tabellen in de
query, en kies “Show Table...”
Voeg één keer tabel “Lijnen” toe
aan de query.
40
Meerdere joins in één query
Pas de query als volgt aan en bekijk het resultaat.
41
Meerdere joins in één query
Het resultaat toont voor elke lijn de naam van die lijn, samen met twee opeenvolgende
halten op die lijn.
42
Meerdere joins in één query
Dit werkt als volgt:
1
2 3
Join 1 combineert twee records waarvan “Volgende” in de eerste record dezelfde waarde heeft als “Halte” in de
tweede record. Dit geeft ons dus twee opeenvolgende haltes.
Join 2 combineert twee records als ze dezelfde waarde voor “Lijn” hebben. Samen met vorige join hebben we
dus: twee opeenvolgende haltes op dezelfde lijn.
Join 3 linkt het lijnnummer van één van de eerste twee records (die wegens join 2 hetzelfde zijn voor beide
records) aan het nummer in de records van Lijnen. Het resultaat is dus dat voor elke twee opeenvolgende
haltes op een zelfde lijn we nu ook de naam van die lijn kennen.
43
Extra: voorwaarde “Like”Breidt de vorige query als volgt uit:
“Like” kijkt of de waarde tekstueel overeenkomt met de waarde die er op volgt. Je mag “*”
gebruiken in de betekenis van “eender welke combinatie van letters”.
Dat betekent dat we hier kijken of de eerste halte ofwel “Meir” is, ofwel begint met een “S”.
Like “Meir”Like “S*”
44
Survival guideEssentiële vaardigheden• Importeren van gegevens• Query met enkelvoudige criteria• Sorteren binnen een query• Query met rekenkundige bewerkingen• one-to-many" relatie definiëren• join-query over een "one-to-many" relatie
Belangrijke vaardigheden• Query met meervoudige criteria• Query met rekenkundige bewerkingen over reeksen (COUNT, MIN, MAX, AVG)• "Group By" query; inclusief het gebruik van operatoren als COUNT, MIN, MAX,
AVG• Outer join-query (links of rechts)
Nuttige vaardigheden• Recursieve join (een tabel met zichzelf joinen)
45
Conclusie
• Databank- Terminologie, Navigeren, Importeren
• Tabellen- Records/Velden manipuleren
• Queries- SQL- sorteren- filter volgens criteria- rekenkundige bewerkingen (ook over reeksen)- GROUP BY
• Joins- Inner Joins- Outer Joins- Recursive Joins