Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee...

43
Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabelle n functies oefeningen subqueries exists

Transcript of Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee...

Page 1: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College – Veldhoven

Hoofdstuk 9

Relationele databasesen

SQL

Inleiding

SQL: basis

twee tabellen

functies

oefeningen

subqueries

exists

Page 2: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

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

Sondervick College - Veldhoven

Page 3: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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)

Page 4: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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:

Page 5: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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.

Page 6: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

Basisstructuur van een eenvoudige query

Page 7: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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.

Page 8: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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.

Door de opdracht ORDER BY wordt de lijst gesorteerd.

Page 9: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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)

Page 10: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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.

Page 11: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 12: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 13: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

%

_

< 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?

Page 14: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

SELECT *

FROM LEERLINGEN

WHERE TELEFOON IS NULL

Dit betekent:

Er is niets ingevuld

Page 15: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 16: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 17: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 18: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 19: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 20: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 21: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

SELECT NAAM, KLAS

FROM LEERLINGEN

WHERE LLNR IN

( SELECT LLNR

FROM UITLENING

WHERE BOETE =

( SELECT MAX(BOETE) FROM UITLENINGEN

))

Page 22: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Boeknr Auteurnr Titel Pub_jaar Rubriek

88 47 De woeste wandeling 1981 nederl

89 48 Jan van Gent 1968 nederl

Auteurnr Voornaam Achternaam Geb_jaar

47 Willem Frederik Hermans 1921

48 Ward HermansSondervick College - Veldhoven

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:

Deze nummers moeten gelijk zijn

Deze nummers moeten gelijk zijn

Page 23: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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:

Page 24: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 25: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 26: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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)

Page 27: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 28: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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

Page 29: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

Geef naam, adres en plaats van het bedrijf met nummer 213

Select naam,adres,plaats

SQL, de basis

From bedrijven

Where bedrijfsnr=‘213’ ;

Page 30: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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 ;

Page 31: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

Geef een lijstje van alle plaatsen waar bedrijven zijn gevestigd (elke plaats maar één keer tonen)

Select distinct plaats

Duplicaten voorkomen

From bedrijven ;

Page 32: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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;

Page 33: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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*’ ;

Page 34: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

Geef het aantal koeien dat ze op het bedrijf met nummer 213 hebben

Select count(*)

De rijen tellen

From koeien

Where bedrijfsnr=‘213’ ;

Page 35: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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’ ;

Page 36: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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;

Page 37: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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 !

Page 38: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

Geef een lijstje van alle moeders die meer dan 10 kinderen hebben Select moeder, count(*)

Having

From koeien Group by moeder Having count(*)>10;

Page 39: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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’) ;

Page 40: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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’) ;

Page 41: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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;

Page 42: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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;

Page 43: Sondervick College – Veldhoven Hoofdstuk 9 Relationele databases en SQL Inleiding SQL: basis twee tabellen functies oefeningen subqueries exists.

Sondervick College - Veldhoven

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