47
oktober 2003 Giel Jacobs Jan van Brabant College Relationele Databases Hoofdstuk 10

Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

Embed Size (px)

Citation preview

Page 1: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge

Relationele Databases

Hoofdstuk 10

Page 2: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Inleiding

Database = Gegevensbank=verzameling van gegevens

Relationeel modelEen goede manier om een database te

organiseren DBMS

DataBase Management SystemGegevensbankbeheersysteemHulpmiddel om de database te beheren

Page 3: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Structuur

Eenvoudige structuur: bijv. telefoonklapper

Grotere database (bijv. Schooladministratie) Structuur wordt moeilijker Bijhouden van: >gegevens van leerlingen

> gegevens van docenten> klassen/ roosters/

resultaten/ absentie/ enz

Page 4: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge

Taak 1: OpslaanDe eerste belangrijke taak

Taak 2: Opvragen en verwerkenDe opgeslagen gegevens gebruikenom allerlei taken goed uit tekunnen voeren

Taak 3: IntegriteitHet systeem kan controleren of deingevoerde gegevens aan eenaantal regels voldoen

Structuur

Page 5: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Relationeel model

Alle gegevens worden opgeslagen in tabellen

Rijen in de tabelAlle gegevens van een bepaalde kaart

Kolommen in de tabelGegevens van de velden van de systeemkaart

Page 6: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Relationeel model

LLN Voor-naam

Tussen-voegsel

Achter-naam

Straat Huis-nr

Post-code

Plaats Tel.-nummer

24 Jan Jansen Keiweg 23 1234 AA Helmond 0492-521234

33 Maria ter Steeg Kerkstraat 12 1345 AB Helmond 0492-521345

44 Astrid van Veldhoven Markt 45 2345 BB Helmond 0492-525678

55 Gerard Pieters Plein 67 2456 BC Stiphout 0492-537890

66 Koos van de Vorst Stations-straat

12 3456 FG Helmond 0492-554321

77

Kolommen

Kolommen

Kolommen

Kolommen

Kolommen

Kolommen

Kolommen

Kolommen

RijenRijenRijenRijenRijen

Page 7: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge

SQLStructured Query Language =Gestructureerde Vraagtaal

Alle softwareprogramma’s voor relationele databases bevatten dezelfde kern van SQL.

Relationeel model

Page 8: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge

Term “relationeel” komt uit de wiskunde > uit de verzamelingenleer.

Bijv.: met zinnen als: “Leerling Jan uit klas 4B” leg je een relatie tussen leerling en klas.

De elementen van de relatie (leerling en klas) geven de kolommen aan. De in te vullen gegevens komen dan in de rijen.

Relationeel model

Leerling Klas:

Jan Jansen 4B

Elementen in de

kolommen

Gegevens in de regels

Page 9: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Voorbeeld database

Een database met informatie over deschoolbibliotheek

Deze database bevat 6 tabellen

Elke tabel bevat een aantal kolommen

Page 10: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Structuur

Voorbeeld database

Tabel: LEERLINGEN Met de kolommen:LLNR - VOORNAAM - TUSSENVOEGSEL -

ACHTERNAAM - STRAAT - HUISNUMMER - POSTCODE - PLAATS - TELEFOON - GESLACHT - GEB_DATUM - KLAS

Tabel: AUTEURS Met de kolommen:

AUTEURNR - VOORNAAM - VOORLETTERS - TUSSENVOEGSEL - ACHTERNAAM - GEB_DATUM - STERF_JAAR

Page 11: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Structuur

Voorbeeld database

Met de kolommen:

Met de kolommen:

Tabel: BOEKENBOEKNR - AUTNR - TITEL - RUBRIEK

Tabel: EXEMPLAREN

EXNR - BOEKNR - UITLEENBAAR - STATUSEr kunnen namelijk

verschillende exemplaren van hetzelfde boek zijn.

Page 12: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Structuur

Voorbeeld database

Er komen kolommen voor die alleen maar een nummer bevatten:

LLNR / AUTEURNR / BOEKNR / EXNR

Reden: Makkelijker om een bepaalde rij aan te duiden.Twee leerlingen met exact dezelfde naam.Bij het stellen van complexere vragen staan de gegevens in verschillende tabellen.

Page 13: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Database

management systemen

Microsoft ACCES

FileMaker

Oracle

SybaseIngresSolid

Al deze systemen: 1. Gaan uit van het relationele model

2. Hebben de mogelijkheid om SQL te gebruiken.

Page 14: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLProcedure voor het maken van een SQL-query:

1. Kies de tab Query’s 2. Kies Nieuw (New) in het menu – rechts.3. Kies Ontwerpweergave (Design new) en Klik dan op OK.4. Kies Sluiten in het venster “Tabel Toevoegen” (Add Table).5. Klik via het menu: “Beeld” op SQL (View: SQL)6. Klik op SQL uit het submenu.

Nu krijg je een venster waarin je een query kunt typen.

Page 15: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

Kies de tab Query’s

Page 16: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

Kies daarna voor:Nieuw

Page 17: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

En druk daarna op: OK

Kies dan voor:Ontwerpweergave

Page 18: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLKies Sluiten in de tabel

Toevoegen

Page 19: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLKies voor: Beeld

En kies daarna voor: SQL

Page 20: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLOf kies meteen:

SQL

Page 21: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLDit is dan het venster waarin de query

getypt kan worden

Het eerste woord: SELECT;staat er al

Page 22: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLBasisstructuur van een eenvoudige query

Page 23: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

SELECT:

Achter SELECT geef je de kolommen op die je in de uitvoer wilt zien.

FROM: Achter FROM geef je de naam van de tabel (of tabellen) waaruit deze kolommen komen.

SELECT *FROM LEERLINGEN

Door het sterretje krijg je de inhoud van de volledige tabel op het scherm.

Page 24: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

SELECT VOORNAAM, TUSSENVOEGSEL, ACHTERNAAM, KLAS

FROM LEERLINGEN

Welke kolommen, maar ook de volgorde van de kolommen is van belang.

Page 25: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

SELECT VOORNAAM, TUSSENVOEGSEL, ACHTERNAAM, KLAS

FROM LEERLINGEN

ORDER BY ACHTERNAAM

Door de regel: ORDER BY , wordt de lijst gesorteerd.Je zou ook op twee of meer kolommen kunnen laten sorteren, door achter ORDER BY, de twee kolommen op te geven.

Page 26: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

SELECT VOORNAAM, TUSSENVOEGSEL, ACHTERNAAM, KLAS

FROM LEERLINGEN

ORDER BY 3 desc

Nu wordt op de 3e kolom gesorteerd (ACHTERNAAM)DESC betekent: Aflopend > van Z naar A.Bij Niets vermelden (of ASC vermelden) wordt oplopend gesorteerd.

Page 27: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

SELECT PLAATS

FROM LEERLINGEN

Het resultaat is een lange waslijst van plaatsnamen.Die plaatsnamen kunnen allemaal meerdere keren voorkomen.

Door DISTINCT komt elke plaats maar 1 keer op het scherm voor.

SELECT DISTINCT PLAATSFROM LEERLINGEN

Page 28: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLNiet alleen kolommen, maar ook rijen kunnen geselecteerd worden.

Hiervoor moeten voorwaarden aan de rijen worden gesteldSELECT

FROM

WHERE

VOORNAAM, TUSSENVOEGSEL, ACHTERNAAMLEERLINGEN

GESLACHT = ‘M’

Voorwaarden geef je achter het sleutelwoord: WHERE

Dus selecteer:Uit de TABEL: LEERLINGEN

Die kolommen die achter SELECT staanEn alleen die rijen, die een M hebben in de

kolom GESLACHT

Page 29: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLWHERE: ACHTERNAAM = ‘Frederiks’

Of:….

WHERE: ACHTERNAAM LIKE ‘Frederi*’

Controle is: Teken voor teken controleren

* Geeft aan wat niet precies hoeft te kloppen

Page 30: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLLIKE operatoren:

*

?

< en >

<= en >=

<>

Er mag alles staan. (ook meerdere tekens)Er mag alles staan, maar niet meer dan 1 tekenKleiner dan... en Groter dan….

Kleiner dan of gelijk aan / groter dan of gelijk aan

Niet gelijk aan

Page 31: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLSamengestelde voorwaarden

AND Bindt voorwaarden aan elkaar

SELECT

FROM

WHERE

*

LEERLINGEN

ACHTERNAAM = ‘Bakker’AND TUSSENVOEGSEL = ‘de’AND VOORNAAM = ‘Jantine’

Maar wat nu als jeJantine Bakker wilt hebben

in plaats vanJantine de Bakker ??

Page 32: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLSELECT

FROM

WHERE

*

LEERLINGEN

ACHTERNAAM = ‘Bakker’AND TUSSENVOEGSEL = ‘de’AND VOORNAAM = ‘Jantine’

Vul je hier niets in,of een spatie, dan is

dat voor SQL toch een invulling

Dit weghalen eniets anders verzinnen

Page 33: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLSELECT

FROM

WHERE

*

LEERLINGEN

ACHTERNAAM = ‘Bakker’AND TUSSENVOEGSELAND VOORNAAM = ‘Jantine’

IS NULL

De waarde die nu staat ingevuldis: “er is niet ingevuld”

Page 34: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

Naast AND, bestaat er nog een ander sleutelwoord

Namelijk:... ORDeze OR is niet exclusief. D.w.z.: rijen die aan allebei de voorwaarden voldoen worden ook geselecteerd.SELECT

FROM

WHERE

*

LEERLINGEN

PLAATS = ‘Utrecht’OR KLAS = ‘4B’

Dus:…. Leerlingen die in klas 4B zitten ENde leerlingen die in Utrecht wonen

worden getoond.

Page 35: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

In een voorwaarden van AND en OR samen, gaat AND altijd voor OR.

Opmerking 1:

Opmerking 2:Om verwarring te voorkomen is het plaatsen van haakjes handig.

Page 36: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLVoorbeeld uit boek: (blz.: 55)

Jantine zoekt vriendinnen die met haar meefietsen.Liefst meisjes uit haar klas. Kan dat niet, dan meisjes uit een andere klas, als ze maar in de buurt wonen.

Hoe komt dit er in SQL uit te zien????..

Page 37: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

SELECT VOORNAAM, TUSSENVOEGSEL, ACHTERNAAM, HUISNR, POSTCODE, WOONPLAATS, TELEFOON

LEERLINGEN

WHERE GESLACHT = ‘v’ AND( KLAS = ‘4B’ OR( KLAS LIKE ‘4?’ ANDPOSTCODE LIKE ‘3253*’ ))

Meisje geen jongen

Klas 4Bof de andere keuze

is allebei goed

Vele invul-mogelijkheden

FROM

Hier magelke wille-

keurige letterkomen

Page 38: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

Functies in SQL:

SUM(KOLOMNAAM)

MAX(KOLOMNAAM)

MIN(KOLOMNAAM)

AVG(KOLOMNAAM)

De som van een aantal getallen in een kolom.Dit is niet hetzelfde als

het aantal rijen!

De grootste waarde ineen kolom

De kleinste waarde ineen kolom

De gemiddelde waarde in een kolom.

Kan alleen als er getallen staan.

Page 39: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLEen Query binnen een Query….

SUBQUERYVoorbeeld uit boek:

1e.: Wat is de maximale boete die betaald moet worden2e.: Welke leerlingen moeten die boete betalen?Samengeva

t:Welke leerlingen betalen de hoogste boete???

Page 40: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

SELECT

We gaan eerst de maximale boete uitzoeken MAX (BOETE)

FROM UITLENINGEN

Dan zoeken we uit welk LLNR uit de tabel UITLENINGEN bij die MAX(BOETE) hoort.Stel: MAX(BOETE) = 4.00

SELECT LLNR

FROM UITLENINGEN

WHERE BOETE = 4.00

Deze twee queriesgaan we

combineren toteen query

Deze twee queriesgaan we

combineren toteen query

Page 41: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

SELECT LLNR

FROM UITLENINGEN

WHERE BOETE =

( SELECT MAX (BOETE)

FROM UITLENINGEN

)

Dit heet eenSUBQUERY

Maar nu weet ik alleen het LLNR ennog niet de namen

Hoe moet je de Query met Subqueries zo uitbreiden dat i.p.v. LLNR de naam en klas van de leerlingen te zien zijn

Page 42: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLSELECT NAAM, KLAS

FROM LEERLINGEN

WHERE LLNR IN

( SELECT LLNR

FROM UITLENING

WHERE BOETE =

( SELECT MAX(BOETE) FROM UITLENINGEN

))

Page 43: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

Tabellen combineren:

Tabel 1 Tabel 2Pieters Jansenvan Dijk

SchiedamRotterdamBreda

GoosensGriekenGeerts

BredaOosterhoutSchiedam

Combinatie van deze twee tabellen:

SELECT *

FROMTabel 1, Tabel 2

Bedenk nu wat hiervan hetresultaat zal zijn

Page 44: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLHet resultaat van deze Query is:

Pieters Schiedam Goosens BredaJansens Rotterdam Goosens Bredavan Dijk Breda Goosens BredaPieters Schiedam Grieken OosterhoutJansens Rotterdam Grieken Oosterhoutvan Dijk Breda Grieken OosterhoutPieters Schiedam GeertsSchiedamJansens Rotterdam GeertsSchiedamvan Dijk Breda GeertsSchiedam

Dus een combinatie van 2 tabellen met elk 3 rijengeeft een tabel van 3 x 3 = 9 rijen

Dus een combinatie van 2 tabellen met 110 en 230 rijen geeft een tabel van 110 x 230 = 25.300 rijen

Dus niet zo maar alles (*)met elkaar combineren

Page 45: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

Groeperen met voorwaarden:

GROUP BY:

Hiermee kun je de rijen van een kolom indelen in groepen, die dezelfde gegevens in een kolom hebben.Bij SELECT heb je dezelfde kolommen als achter GROUP BY gezet.

Page 46: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQL

Nu kun je aan GROUP BY een extra voorwaarde stellen!

HAVING

Voorbeeld in boek op Blz.: 65

Page 47: Jan van Brabant College oktober 2003 Giel Jacobs Relationele Databases Hoofdstuk 10

oktober 2003 Giel Jacobs

Jan v

an B

rabant

Colle

ge Microsoft Access

& SQLSELECT AUTEURS.NAAM, BOEKEN.TITEL

COUNT(EXEMPLAARNR)FROMAUTTEURS, BOEKEN, EXEMPLAREN

WHERE AUTEURS.AUTEURNR = BOEKEN.BOEKNR AND EXEMPLAAR.BOEKNR = BOEKEN.BOEKNRGROUP BY BOEKEN.TITEL

HAVING COUNT(EXEMPLAARNR) >= 2

Hier wordt de voorwaardegesteld waaraan de

groepjes die bij GROUP BYgemaakt worden, moeten

voldoen