LauwersCollege Buitenpost LauwersCollege Buitenpost Informatica Informatica klas 5 Hoofdstuk 9...
-
Upload
renee-veenstra -
Category
Documents
-
view
217 -
download
1
Transcript of LauwersCollege Buitenpost LauwersCollege Buitenpost Informatica Informatica klas 5 Hoofdstuk 9...
LauwersCollege Buitenpost
Informatica klas 5 Hoofdstuk 9
Relationele databasesen
SQL
Inleiding
SQL: basis
twee tabellen
functies
oefeningen
subqueries
exists
LauwersCollege Buitenpost
Een aantal termen
• Database Gegevensbank = verzameling van gegegevens
• DBMSDatabase Management systeem
• Relationeel model Een manier om een database te organiseren, nl. met tabellen
• Een rij in de tabel:Alle gegevens van een bepaalde kaart of record
• Kolommen in de tabel:Worden ook wel velden genoemd
• Een aantal DBMS’en:AccessFilemakerOracleMySQL
LauwersCollege Buitenpost
Taken van een databasesysteem
Het opslaan van gegevens en het mogelijk maken van wijzigingen
Het kunnen opvragen van informatie en het verwerken van informatie
Het bewaken van de integriteit (dus het voorkomen van fouten)
LauwersCollege Buitenpost
Voorbeeld database
Tabel: LEERLINGENLLNR - VOORNAAM - TUSSENVOEGSEL - ACHTERNAAM - STRAAT - HUISNUMMER - POSTCODE - PLAATS - TELEFOON - GESLACHT - GEB_DATUM - KLAS
Tabel: AUTEURSAUTEURNR - VOORNAAM - VOORLETTERS - TUSSEN-VOEGSEL - ACHTERNAAM - GEB_DATUM - STERF_JAAR
Tabel: BOEKENBOEKNR - AUTNR - TITEL - RUBRIEK
Tabel: EXEMPLARENEXNR - BOEKNR - UITLEENBAAR - STATUS
De voorbeelden op de volgende dia’s hebben betrekking op de database Bibliotheek, met de volgende tabellen:
LauwersCollege Buitenpost
Kolommen met alleen een nummer
Er komen kolommen voor die alleen maar een nummer bevatten:
LLNR / AUTEURNR / BOEKNR / EXNR
Reden: • Een nummer is altijd uniek. Je kunt twee leerlingen met exact dezelfde naam hebben, maar de leerlingennummers verschillen altijd.
• Met een nummer kun je gemakkelijk verwijzen naar een andere tabel.
LauwersCollege Buitenpost
SQL in AccessBasisstructuur van een
eenvoudige query
LauwersCollege Buitenpost
SQL: select en from
SELECT: Achter SELECT geef je de kolommen op die je in de uitvoer wilt zien.
Zet je achter select een sterretje in plaats van kolomnamen, dan krijg je de inhoud van alle kolommen op het scherm.
FROM: Achter FROM geef je de naam van de tabel (of tabellen) waaruit deze kolommen komen.
LauwersCollege Buitenpost
SELECT VOORNAAM, TUSSENVOEGSEL, ACHTERNAAM, KLAS
FROM LEERLINGEN
ORDER BY ACHTERNAAM
Je kunt ook op twee of meer kolommen laten sorteren, door achter ORDER BY de twee kolommen op te geven.
SQL: order by
Door de opdracht ORDER BY wordt de lijst gesorteerd.
LauwersCollege Buitenpost
SQL: desc
SELECT VOORNAAM, TUSSENVOEGSEL, ACHTERNAAM, KLAS
FROM LEERLINGEN
ORDER BY 3 DESC
DESC betekent: Aflopend (Descending), dus van Z naar A.Als er niets vermeld wordt (of ASC = ascending) wordt oplopend gesorteerd.
Nu wordt op de 3e kolom gesorteerd (ACHTERNAAM)
LauwersCollege Buitenpost
SQL: distinct
SELECT PLAATS
FROM LEERLINGEN
Het resultaat is een lange rij van plaatsnamen.Die plaatsnamen kunnen meerdere keren voorkomen.
SELECT DISTINCT PLAATS
FROM LEERLINGEN
Door DISTINCT wordt elke plaats maar één keer afgedrukt.
LauwersCollege Buitenpost
SQL: where
Er kunnen voorwaarden worden gesteld aan de rijen, die moeten worden afgedrukt.
SELECT
FROMWHERE
VOORNAAM, TUSSENVOEGSEL, ACHTERNAAMLEERLINGEN
GESLACHT = "M"
Voorwaarden geef je achter het sleutelwoord: WHERE
Alleen de leerlingen, die als geslacht M hebben, worden
afgedrukt
LauwersCollege Buitenpost
SQL: like
Je mag wildcards gebruiken bij de voorwaarden, maar je moet dan geen = maar like als vergelijkingsoperator gebruiken.
SELECT
FROMWHERE
VOORNAAM, TUSSENVOEGSEL, ACHTERNAAMLEERLINGENVOORNAAM like "M*"
Alle leerlingen, waarvan de voornaam met een M begint, worden afgedrukt
LauwersCollege Buitenpost
SQL:Wildcards en vergelijkingsoperatoren:
%
_
< en >
<= en >=
< >
Standaard SQL: er mag alles staan (ook meer tekens)
Standaard SQL: één willekeurig teken
Kleiner dan / groter dan
Kleiner dan of gelijk aan / groter dan of gelijk aan
Niet gelijk aan
* In Access: er mag alles staan (ook meerdere tekens)
In Access: één willekeurig teken?
LauwersCollege Buitenpost
SQL: is null
SELECT *
FROM LEERLINGEN
WHERE TELEFOON IS NULL
Dit betekent:
Er is niets ingevuld
LauwersCollege Buitenpost
SQL: Samengestelde voorwaarden
Als er aan meer dan één voorwaarde moet worden voldaan gebruik je AND
SELECT *
FROM LEERLINGEN
WHERE ACHTERNAAM = "Bakker"
AND TUSSENVOEGSEL = "de"
AND VOORNAAM = "Jantine"
Alleen de gegevens van Jantine de Bakker worden afgedrukt
LauwersCollege Buitenpost
SQL: OR
Deze OR is niet exclusief. D.w.z.: rijen die aan allebei de voorwaarden voldoen worden ook afgedrukt.
SELECT *
FROM LEERLINGEN
WHERE KLAS = "4A" OR KLAS = "4B"
Leerlingen die in klas 4A of 4B zitten worden afgedrukt, dus je krijgt een lijstje van de leerlingen van 4a en van 4b
Als aan de ene of aan de andere voorwaarde moet worden voldaan gebruik je OR
LauwersCollege Buitenpost
Functies in SQL
SUM(KOLOMNAAM)
MAX(KOLOMNAAM)
MIN(KOLOMNAAM)
AVG(KOLOMNAAM)
De gemiddelde waarde in de kolom
COUNT(KOLOMNAAM)
De kleinste waarde in de kolom
De grootste waarde in de kolom
De som van alle getallen in de kolom
Het aantal getallen of woorden in de kolom
LauwersCollege Buitenpost
SQL: subqueries
We willen weten welke leerling de hoogste boete heeft betaald na het lenen van een boek
Dat doen we eerst m.b.v. twee queries, of als je de naam van de leerling ook wilt weten, zelfs drie
1: Wat is de maximale boete die betaald is?
2: Welke leerling(en) moesten die boete betalen?
Daarna laten we zien hoe het ook met één query kan m.b.v. subqueries
LauwersCollege Buitenpost
SELECT MAX (BOETE) FROM UITLENINGEN
We gaan eerst de maximale boete uitzoeken m.b.v. een query:
Dan zoeken we uit welk leerlingennummer uit de tabel UITLENINGEN bij die maximale boete hoort.
Die maximale boete blijkt 4 euro te zijn
SELECT LLNR
FROM UITLENINGEN
WHERE BOETE = 4
Deze twee queriesgaan we
combineren toteen query
Deze twee queriesgaan we
combineren totéén query
SQL: subqueries
LauwersCollege Buitenpost
SQL: subqueries
SELECT LLNR FROM UITLENINGEN
WHERE BOETE =
( SELECT MAX (BOETE)
FROM UITLENINGEN )
Dit is eensubquery
Nu weet je alleen het LLNR ennog niet de naam. Als je die wilt weten
moet er nog een subquery bij.Die staat op de volgende dia
LauwersCollege Buitenpost
SQL: subqueries
SELECT NAAM, KLAS
FROM LEERLINGEN
WHERE LLNR IN
( SELECT LLNR
FROM UITLENING
WHERE BOETE =
( SELECT MAX(BOETE) FROM UITLENINGEN
))
LauwersCollege Buitenpost
SQL: Tabellen combineren
Boeknr Auteurnr Titel Pub_jaar Rubriek
88 47 De woeste wandeling 1981 nederl
89 48 Jan van Gent 1968 nederl
We willen weten wie de auteur is van het boek met de titel: De woeste wandeling. Daarvoor moeten we twee tabellen combineren: AUTEURS en BOEKEN
Tabel Boeken:
Tabel Auteurs:
Auteurnr Voornaam Achternaam Geb_jaar
47 Willem Frederik Hermans 1921
48 Ward Hermans
Deze nummers moeten gelijk zijn
Deze nummers moeten gelijk zijn
LauwersCollege Buitenpost
SQL: subqueries
SELECT TITEL, VOORNAAM, ACHTERNAAM
FROM BOEKEN, AUTEURS
WHERE TITEL = "De woeste wandeling" AND
BOEKEN.AUTEURNR = AUTEURS. AUTEURNR
Dit noem je eenjoin
Denk bij een query met twee tabellen
altijd om de join (zie hierboven)
De query, die de naam van de auteur van het boek met de titel De woeste wandeling levert, is:
LauwersCollege Buitenpost
SQL: GROUP BY
Met GROUP BY kun je groeperen: de rijen van een kolom worden ingedeeld in groepen, die dezelfde gegevens in een kolom hebben. Daar kun je dan een functie op toepassen, bijv. het aantal rijen tellen, of de getallen optellen.
SELECT PLAATS, COUNT(*)
FROM LEERLINGEN
GROUP BY PLAATS
Voorbeeld: geef de plaatsen, waar leerlingen wonen, met het aantal leerlingen per plaats
Het aantal perplaats wordt geteld
LauwersCollege Buitenpost
SQL: HAVING
SELECT PLAATS, COUNT(*)
FROM LEERLINGEN
GROUP BY PLAATS
HAVING COUNT(*) > 5
Alleen de plaatsenwaar meer dan vijf
leerlingen wonen worden afgedrukt
Stel je bij het gebruik van GROUP BY een extra voorwaarde aan de uitkomst van de functie, dan doe je dat met HAVING
LauwersCollege Buitenpost
SQL: Exists
SELECT VOORNAAM, ACHTERNAAM
FROM LEERLINGEN
WHERE NOT EXISTS
( SELECT * FROM UITLENINGEN
Die zijn er dus niet!
Geef de leerlingen die nooit een boek geleend hebben
De query, waarin je om de boeken vraagt die de leerling heeft geleend, moet geen resultaten opleveren!
WHERE UITLENINGEN.LLNR = LEERLINGEN.LLNR)
LauwersCollege Buitenpost
Er komen nu een aantal vragen die betrekking hebben op een database waarin de administratie van rundveehouderijenwordt bijgehouden
SQL-oefeningen
Bedenk na elke opgave zelf wat de sql-query zal zijn, druk dan op PageDown of klik op de muis
LauwersCollege Buitenpost
Bedrijven
Rundvee administratie:De tabellen en velden
bedrijfsnr naam adres postc plaats tel
Koeien
koenr vader moeder gebdat bedrijfsnr
koenr jaar kgmelk vetgeh eiwitgeh
Jaarprod
Tabellen
Kolommenof Velden
LauwersCollege Buitenpost
Geef naam, adres en plaats van het bedrijf met nummer 213
Select naam,adres,plaats
SQL, de basis
From bedrijven
Where bedrijfsnr=‘213’ ;
LauwersCollege Buitenpost
Geef alle gegevens van de koeien van het bedrijf met nummer 213 gesorteerd op geboortedatumSelect *
Alle kolommen
From koeien Where bedrijfsnr=‘213’Order by gebdat ;
LauwersCollege Buitenpost
Geef een lijstje van alle plaatsen waar bedrijven zijn gevestigd (elke plaats maar één keer tonen)
Select distinct plaats
Duplicaten voorkomen
From bedrijven ;
LauwersCollege Buitenpost
Geef de nummers van de koeien die in 2002 een melkproductie hadden van meer dan 8000 kg.Select koenr
Samengestelde voorwaarde
From jaarprod Where jaar=‘2002’
and kgmelk>8000;
LauwersCollege Buitenpost
Geef naam, adres en plaats van alle bedrijven waarvan de postcode met 92 begint
Select naam, adres, plaats
Wildcards
From bedrijven Where postcode like ‘92*’ ;
LauwersCollege Buitenpost
Geef het aantal koeien dat ze op het bedrijf met nummer 213 hebben
Select count(*)
De rijen tellen
From koeien
Where bedrijfsnr=‘213’ ;
LauwersCollege Buitenpost
Geef het totaal aantal kg. melk dat in 2002 is gemolken
Select sum(kgmelk)
De som van alle getallen in een kolom
From jaarprod
Where jaar=‘2002’ ;
LauwersCollege Buitenpost
Geef een lijstje van alle bedrijfsnummers met het aantal koeien op dat bedrijf
Select bedrijfsnr, count(*)
Verdeel in groepjes en tel de aantallen daarin
From koeien
Group by bedrijfsnr;
LauwersCollege Buitenpost
Geef een lijstje van alle koe-nummers met het aantal kg. melk dat ze in totaal hebben gegevenSelect koenr, sum(kgmelk)
Groeperen
From jaarprod Group by koenr;
N.B.:achter group by en achter select altijd dezelfde kolomnamen zetten !
LauwersCollege Buitenpost
Geef een lijstje van alle moeders die meer dan 10 kinderen hebben Select moeder, count(*)
Having
From koeien Group by moeder Having count(*)>10;
LauwersCollege Buitenpost
Geef het nummer van de koe die in 2002 de grootste hoeveelheid melk gaf
Select koenr
Een subquery
from jaarprod where
Kgmelk=(select max(kgmelk) from jaarprod where jaar=‘2002’) ;
LauwersCollege Buitenpost
Geef een lijstje van de koenummers van de koeien van bedrijven die gevestigd zijn in OenkerkSelect koenr from koeien
Subquery met in
Where bedrijfsnr in (select
bedrijfsnr from bedrijven where plaats = ‘Oenkerk’) ;
LauwersCollege Buitenpost
Geef van koenr 213 de geboorte-datum en de naam en plaats van het bijbehorende bedrijfSelect gebdatum,naam,plaats
Twee tabellen gebruiken
From bedrijven, koeien Where koenr=‘213’ and bedrijven.bedrijfsnr=koeien.bedrijfsnr;
LauwersCollege Buitenpost
Geef een lijstje met de nummers en de geboorte-data van de koeien en de naam en plaats van het bedrijf van de koeien die in 2002 meer dan 8000 kg. melk gaven.Select koeien.koenr,gebdat,naam,plaats
Drie tabellen gebruiken
From bedrijven, koeien, jaarprod Where kgmelk>8000 and jaar=‘2002’ and bedrijven.bedrijfsnr=koeien.bedrijfsnrand koeien.koenr=jaarprod.koenr;
LauwersCollege Buitenpost
Geef alle bedrijfsnrs van bedrijven die geen koeien hebben die meer dan 8000 kg. melk hebben gegevenSelect distinct bedrijfsnr from koeien
Exists en not exists
Where not exists (select koenrFrom jaarprod where kgmelk>8000And jaarprod.koenr=koeien.koenr);
Einde