Upload
anke-hendriks
View
219
Download
4
Tags:
Embed Size (px)
Citation preview
oktober 2003 Giel Jacobs
Jan v
an B
rabant
Colle
ge
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
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
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
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
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
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
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
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
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
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.
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.
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.
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.
oktober 2003 Giel Jacobs
Jan v
an B
rabant
Colle
ge Microsoft Access
& SQL
Kies de tab Query’s
oktober 2003 Giel Jacobs
Jan v
an B
rabant
Colle
ge Microsoft Access
& SQL
Kies daarna voor:Nieuw
oktober 2003 Giel Jacobs
Jan v
an B
rabant
Colle
ge Microsoft Access
& SQL
En druk daarna op: OK
Kies dan voor:Ontwerpweergave
oktober 2003 Giel Jacobs
Jan v
an B
rabant
Colle
ge Microsoft Access
& SQLKies Sluiten in de tabel
Toevoegen
oktober 2003 Giel Jacobs
Jan v
an B
rabant
Colle
ge Microsoft Access
& SQLKies voor: Beeld
En kies daarna voor: SQL
oktober 2003 Giel Jacobs
Jan v
an B
rabant
Colle
ge Microsoft Access
& SQLOf kies meteen:
SQL
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
oktober 2003 Giel Jacobs
Jan v
an B
rabant
Colle
ge Microsoft Access
& SQLBasisstructuur van een eenvoudige query
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.
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.
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.
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.
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
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
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
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
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 ??
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
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”
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.
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.
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????..
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
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.
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???
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
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
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
))
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
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
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.
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
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