MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI HOGESCHOOL ROTTERDAM/CMI Databases 1 (Databases en SQL) INFDTB01 Goedgekeurd door: Aantal studiepunten: 2 ects Modulebeheerder: B. Joziasse (namens toetscommissie) Datum: INFDTB01 15-6-2011 1 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI Modulebeschrijving: Modulenaam: Modulecode: Aantal studiepunten en studiebelastinguren: Vereiste voorkennis: Werkvorm: Toetsing: Leermiddelen: Draagt bij aan (HBOi) competentie: Leerdoelen: Inhoud: Databases 1 (Inleiding databases, SQL) INFDTB01 Dit studieonderdeel levert de student 2 studiepunten op, hetgeen overeenkomt met een studielast van 56 uren. De verdeling van deze 56 uren over de collegeweken is als volgt: Begeleide colleges: gedurende 8 weken: 8 * 120 minuten 16 uur Begeleide uren practicum : gedurende 8 weken: 8 * 120 minuten 16 uur Zelfstudie en individuele opdrachten 8 weken: 8 * 180 minuten 24 uur Totaal 56 uur INFIAN01 College en practicum (5 weken) Schriftelijk tentamen (gesloten boek), Practicumopdracht Boek: Auteur: R.F. van der Lans Titel: Het SQL leerboek Uitgever: Academic Service ISBN: 90-395-2302-9 Deze module draagt bij tot het verwerven van de volgende competenties: Analyseren (niveau 1) Ontwerpen (niveau 1) Realiseren (niveau 1) Begrijpen van de principes van relationele databases Creëren van database-objecten (en de onderlinge relaties) aan de hand van een gegevensmodel Beoordelen of een database structuur voldoet aan de BCNF normaalvorm Afleiden van een logische datastructuur uit de SQL definities van de tabellen Invoeren van gegevens in een database m.b.v. SQL Opvragen van gegevens uit een database m.b.v. SQL Muteren van gegevens in een database m.b.v. SQL Kennen en kunnen omschrijven van de volgende begrippen: relatie, tabel, rij, kolom, record, veld, attribuut, domein, datatype, constraint, selectie, vereniging, verschil, doorsnede, cartesisch product, natural join, DDL, DML, DCL. Principes van relationele databases Implementeren van logisch ontwerp van een datastructuur in een relationele database door de tabellen en de relaties tussen die tabellen te creëren; een logische datastructuur kunnen afleiden uit de SQL definities van de tabellen de SQL datatypen, keywords en commando's die in hoofdstuk 1 t/m 21 (behalve h. 19) van [van der Lans] worden behandeld kennen en kunnen gebruiken om o tabellen te definiëren [CREATE TABLE …] o gegevens toe te voegen, te wijzigen, en te verwijderen [INSERT, UPDATE, DELETE] o gegevens uit een database op te vragen [SELECT] o voorwaarden aan rijen stellen [WHERE] o rijen kunnen groeperen op waarden van attributen met eventueel aanvullende voorwaarden [GROUP BY, HAVING] o gegevens uit meerdere tabellen kunnen combineren [alle JOIN statements uit H7] o een willekeurige combinatie van bovenstaande typen vragen met behulp van SQL kunnen beantwoorden Bovenstaande onderdelen van de taal SQL moeten kunnen worden toegepast in databases van gemiddelde grootte, zoals een videotheek, CD winkel, autodealer of dokterspraktijk. Opmerkingen INFDTB01 15-6-2011 2 MODULEWIJZER Modulebeheerder: Datum: INFDTB01 15-6-2011 HOGESCHOOL ROTTERDAM /CMI B. Joziasse, M.E.Prins-Wenink November 2010 3 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 1. Inhoudsopgave 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Inleiding ................................................................................................................. 5 Leerdoelen ............................................................................................................ 6 Begineisen ............................................................................................................ 6 Leerstof ................................................................................................................. 6 Kwartaalschema .................................................................................................... 7 Verdere aanwijzingen, organisatorische informatie, en toetsing ............................ 8 Practicumopdracht ................................................................................................ 9 Opdrachtomschrijving ............................................................................................ 9 Inleiding ................................................................................................................. 9 Indeling .................................................................................................................. 9 Oplevering ............................................................................................................. 9 Voorbeeldtentamen ............................................................................................. 10 Hogeschool Rotterdam ........................................................................................ 10 Uitwerking oefententamen ................................................................................... 13 Zelfstudieopdrachten ........................................................................................... 16 INFDTB01 15-6-2011 4 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 2. Inleiding Wat zijn de titels van de LP’s / Cd's die door de Beatles zijn gemaakt? Zijn alle videobanden van Titanic al uitgeleend ? Hoeveel baby's zijn er vorig jaar geboren? Welk merk en type auto werd vorige maand in Nederland het meest verkocht? Wat is de gemiddelde leeftijd van een informatica student? Welke Albert Heijn klant koopt daar geen aardappelen, maar wel groente? Wat is de favoriete kleur van Ferrarikopers? Hoeveel studiepunten heb ik dit jaar gehaald? Hoeveel belminuten heb ik nog over op mijn mobiele telefoon? In welke maand heb ik het meest gebeld? Wat kost het als ik alle boeken van Tom Clancy op deze website bestel? Deze vragen komen uit de dagelijkse praktijk, en iedereen heeft ooit wel eens zo’n vraag gehad. Elke vraag is te beantwoorden, tenminste als de benodigde gegevens correct zijn opgeslagen in een database en als je weet hoe je daar de correcte informatie uit moet halen. Databases zijn niet meer weg te denken in ons dagelijks leven. We komen databases praktisch overal tegen, bijvoorbeeld bij de supermarkt, de CD-winkel, de bank, het reisbureau, de verzekeringsmaatschappij, de gemeente, de studentenadministratie, de apotheker, de mobiele telefoon, enzovoort. Als informatica-ingenieur bouw je informatiesystemen. De belangrijkste functie van deze systemen is het opslaan en leveren van informatie. Die informatie wordt vrijwel altijd opgeslagen in een relationele databases. Bij een relationele database wordt de vraagtaal SQL gebruikt om gegevensverzamelingen te definiëren, gegevens in te voeren en / of te wijzigen en om gegevens op te vragen. Het beheersen van SQL en het kunnen omgaan met gegevensverzamelingen behoort dus tot de belangrijkste competenties van een informaticus. In de database-industrie wordt enorm veel geld omgezet. Oracle, IBM, en Microsoft, de drie grootste leveranciers van databases, behoren niet voor niets tot de allergrootste bedrijven ter wereld, met miljardenomzetten. Na het succesvol doorlopen van deze module moet de student voldoende kennis en vaardigheden bezitten om zelfstandig of in teamverband te kunnen functioneren bij de ontwikkeling van relationele databaseapplicaties. Deze module vormt een belangrijke bijdrage bij het optimaal kunnen vervullen van functies als gegevensbeheerder, Database Administrator (DBA), database ontwerper, software engineer en applicatie programmeur. Deze module is een vervolg op de module INFIAN01, waarin het opzetten van een datastructuur wordt behandeld. Na deze module is er nog DTB02, waarin wordt ingegaan op de problemen rond multi-userdatabases en data-integriteit. Verder bevat deze module noodzakelijke voorkennis voor diverse hogerejaars-vakken waarin complete informatiesystemen dienen te worden gerealiseerd. In deze modulewijzer is een oefententamen opgenomen. Deze geeft het niveau en de vorm aan waarop getoetst wordt voor het theoretische deel van deze module. Verder bevat deze modulewijzer opdrachten die je mogelijk als extra oefening zelfstandig uit kunt voeren. INFDTB01 15-6-2011 5 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 3. Leerdoelen Zie blz. 2. 4. Begineisen Voor deze module is het noodzakelijk om de module INFIAN01 afgerond te hebben. Hierin wordt het opzetten van een datastructuur behandeld. Deze kennis is vereist om een goede database te kunnen opzetten met SQL. Er is geen voorkennis nodig van de taal SQL. Voor studenten met een behoorlijke voorkennis van SQL (met minstens goed gebruik van geneste queries, het GROUP BY commando en JOINs) is er de mogelijkheid om vrijstelling te krijgen voor deze module. Neem hiervoor contact op met de docent, raadpleeg hiervoor hoofdstuk “organisatorische informatie”. 5. Leerstof Verplicht boek: Auteur: Titel: Uitgever: ISBN: R.F. van der Lans Het SQL leerboek (6e geheel herziene druk) Academic Service 90-395-2302-9 [van der Lans] wordt gebruikt bij de modules DTB01 en DTB02, en wordt aanbevolen bij de modules PROJ7, PROJ8 en MULT3 Aanbevolen literatuur: Als u meer wilt weten over het realiseren van wat grotere database applicaties, dan is dit een geschikt boek: Auteur Titel Uitgever ISBN : : : : T. Connolly Database Systems, A practical Approach to Design, Implementation and Management Addison Wesley 0 201 42277 8 Een standaardwerk uit de VS over dit onderwerp, van een van de belangrijkste personen uit dit vakgebied is: Auteur Titel Uitgever ISBN : : : : INFDTB01 15-6-2011 C.J. Date An introduction to database systems, 7th edition Addison Wesley 0 201 385902 6 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 6. Kwartaalschema In dit hoofdstuk staat een beknopte omschrijving van de onderwerpen per week. In het volgende hoofdstuk volgt een gedetailleerde beschrijving van de kennis en vaardigheden die moet zijn opgedaan tijdens een lesweek. Toelichting: TH = theorie, in de vorm van hoorcollege en werkcollege, ZS = zelfstudie, PR = computerpracticum week 1 15/11 19/11 werk- sbu inhoud vorm TH 2 Wat is een relationele database, wat is SQL? Tabellen, rijen, kolommen, domeinen, waarden, primaire sleutels, constraints. Verzamelingen en relationele algebra (vereniging, doorsnede, verschil, projectie, selectie). CREATE, INSERT en SELECT statements. ZS 4 PR 2 2 TH 2 Het SELECT statement uitgebreid (zonder GROUP BY). De natural join. Referentiële integriteit. Database ontwerp en normaliseren. 22/11 26/11 ZS 4 Bestudeer de behandelde leerstof en de hoofdstukken 6, 7, 8, 16, 17 en 18 uit het boek. Maak opdrachten uit die hoofdstukken. PR 2 3 TH 2 29/11 03/12 ZS 4 PR 2 4 TH 2 06/12 10/12 ZS 4 Bestudeer de behandelde leerstof en de hoofdstukken 20 en 21 uit het boek. Maak opdrachten uit die hoofdstukken. PR 2 5 TH 2 13/12 17/12 Inleveren uitwerkingen week 3 Uitwerken case t.b.v. eindopdracht Cartesisch product, natural join, andere typen joins. SELECT met subquery. IN, EXISTS, ANY, ALL. Subqueries vs. joins. INSERT. DELETE. UPDATE ZS 4 PR 2 INFDTB01 15-6-2011 Bestudeer de modulewijzer. Bestudeer de behandelde leerstof en de hoofdstukken 1, 2, 4, 5 en 12 uit het boek. Maak opdrachten uit die hoofdstukken. Extra oefening: opgaven 9.1 en 9.2 uit de modulewijzer. Uitwerken case t.b.v. eindopdracht Extra oefening: opgaven 9.3 en 9.4 uit de modulewijzer. Inleveren uitwerkingen week 1 Uitwerken case t.b.v. eindopdracht SET functies (COUNT, MIN, MAX, SUM, AVG, STDEV). GROUP BY en HAVING. Implementatie van 1:N en N:M relaties. Bestudeer de behandelde leerstof en de hoofdstukken 9, 10, 11, en 17 uit het boek. Maak opdrachten uit die hoofdstukken. Extra oefening: opgaven 9.5 en 9.6 uit de modulewijzer Inleveren uitwerkingen week 2 Uitwerken case t.b.v. eindopdracht GROUP BY op meer kolommen. VIEWs. Bestudeer de behandelde leerstof en de hoofdstukken 13, 14 en 15 uit het boek. Maak opdrachten uit die hoofdstukken. Inleveren uitwerkingen week 4 Uitwerken case t.b.v. eindopdracht. 7 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 7. Verdere aanwijzingen, organisatorische informatie, en toetsing Het verkrijgen van vrijstelling voor deze module is alleen mogelijk na overleg met de docent in de eerste lesweek van de module. Deze module wordt gegeven in een kwartaal van 10 weken met 5 weken contacttijd, waarbij er per week 4 contacturen met de docent zijn. Daarvan zijn de 2 uren computerpracticum verplicht (tenminste 80%). Indien niet aan deze aanwezigheidsplicht is voldaan, moeten aanvullende opdrachten worden ingeleverd! Het practicumverslag moet uiterlijk aan het eind van week 5 zijn ingeleverd. Bij te laat inleveren van het verslag wordt er 1 punt van het practicumcijfer afgetrokken. Bij de beoordeling van het practicum worden de verschillende onderdelen volgens onderstaand schema gewogen: Weekopdrachten uit het practicum: 10% per opdracht Opleveren database: 50% De theorie wordt getoetst dmv een schriftelijk tentamen. Het tentamen valt in de eerstkomende tentamenperiode. Tijdens dit tentamen mogen geen boeken of aantekeningen worden gebruikt. Het eindcijfer voor deze module wordt als volgt bepaald uit het tentamencijfer (t) en het practicumcijfer (p): - als ( t>=5.5 én p>=5.5 ) als ( t<3.5 óf p<3.5 ) anders eindcijfer = het gemiddelde van p en t eindcijfer = het gemiddelde van p en t, maar nooit hoger dan 3 eindcijfer = het gemiddelde van p en t, maar nooit hoger dan 5 In deze modulewijzers is een voorbeeldtentamen (inclusief uitwerking) opgenomen. INFDTB01 15-6-2011 8 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 8. Practicumopdracht Opdrachtomschrijving Ontwerp en implementeer in een groepje van maximaal 2 personen een informatiesysteem. Inleiding Een beginnende Dierentuin heeft een informatiesysteem nodig in de vorm van een database. In de huidige situatie worden de gegevens bijgehouden in een Excel-sheet, maar in verband met diverse toekomstplannen wil de dierentuin overstappen op een betere onderhoudbare informatievoorziening, een relationele database. Deze database moet minimaal zorgdragen voor: opslag van belangrijke gegevens en het genereren van rapportages. Indeling Per week wordt een deel van de case uitgewerkt. Dit gebeurt aan de hand van weekopdrachten. Dit kunnen extra informatie aanvragen zijn of verzoeken om extra gegevens toe te voegen aan de database. De case krijgt zo steeds meer vorm en wordt aan het eind van de module ingeleverd. Oplevering Per week wordt een deelopdracht ingeleverd in de vorm van twee onderdelen; De gevraagde informatie (rapportage van de informatie) De methode van het ophalen van de informatie (SQL + ERD). Aan het eind van de module wordt de werkende database opgeleverd in de vorm van een ERD, CREATE statements en de bijbehorende SELECT, INSERT, DELETE en UPDATE statements. Het opleveren van de opdrachten gebeurd in elke practicum week en vormt samen met de database in totaal 50% van het eindcijfer. INFDTB01 15-6-2011 9 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 9. Voorbeeldtentamen Hogeschool Rotterdam Datum Module infDtb01-theorie Studierichting HIO / TLM Aantal pagina's 2 Aantal opgaven 7 geen Hulpmiddelen Eindcijfer = 1 + aantal behaalde punten / 60 Tijd Duur 90 minuten Lokaal Docent Opgave Lees de vragen en de inleiding van de vragen goed door. Verdeel je tijd goed : besteed in eerste instantie niet te veel tijd aan de moeilijke vraag 6. Succes ! Inleiding bij vragen 1 t/m 6 Een leesclubje houdt in een database de beoordeling van gelezen boeken bij. De tabellen in de database zijn gemaakt door onderstaande SQL statements uit te voeren. create table auteurs( auteurnr integer not null, naam varchar, geb_datum date, primary key(auteurnr) ); auteurs auteurnr create table boeken( boeknr integer not null, auteurnr integer not null, titel varchar, prijs float, primary key(boeknr) ); boeken boeknr create table gelezen_boeken( boeknr integer not null, lezernr integer not null, cijfer float, opmerkingen varchar, primary key(boeknr,lezernr) ); create table lezers( lezernr integer not null, naam varchar, geslacht char, geb_datum date, woonplaats varchar, primary key(lezernr) ); INFDTB01 15-6-2011 auteurnr gelezen_boeken boeknr lezernr lezers lezernr naam naam titel cijfer geb_datum geslacht geb_datum prijs opmerkingen woonplaats 10 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 1. (2p) Geef het SQL statement om een overzicht van de lezers te maken met naam, geslacht en geboortedatum. Sorteer op naam. 2. (2p) Geef het SQL statement om een overzicht te maken van de vrouwelijke lezers die geboren zijn tussen 1 januari 1975 en 1 januari 1985. Geef naam en leeftijd. Sorteer op leeftijd. TIP: De leeftijd van een lezer kan worden berekend met TIMESTAMPDIFF(8,geb_datum,curdate()). Om je schrijfwerk te besparen mag je in de rest van het tentamen het woord ‘leeftijd’ gebruiken als vervanging van ‘TIMESTAMPDIFF(8,geb_datum,curdate())’. 3. (6p) Geef de SQL statements om te berekenen: a. het aantal mannelijke lezers b. de leeftijd van de jongste mannelijke lezer c. 4. (12p) de gemiddelde leeftijd van de vrouwelijke lezers Geef het SQL statement om een overzicht te maken van: a. het aantal lezers per woonplaats b. het aantal lezers per woonplaats, uitgesplitst naar geslacht c. het aantal lezers en de gemiddelde leeftijd van de lezers per woonplaats, uitgesplitst naar geslacht. d. het aantal lezers en de gemiddelde leeftijd van de lezers per woonplaats, maar alleen als er meer dan één lezer in die woonplaats woont 5. (9p) Geef het SQL statement om een overzicht te maken van: a. gelezen boeken; vermeld boeknummer, beoordeling, en naam van de lezer b. gelezen boeken; vermeld auteurnr, titel, en de naam van de lezer c. 6. (14p) gelezen boeken; vermeld naam van de auteur, titel, en de naam van de lezer Geef het SQL statement om een overzicht te maken van: a. het gemiddelde cijfer van de boeken die door minstens twee lezers zijn gelezen; vermeld naam vd auteur, titel van het boek, en het gemiddelde cijfer b. vervallen vraag c. het gemiddelde cijfer van een auteur mits deze auteur minstens 3 keer beoordeeld is; INFDTB01 15-6-2011 11 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 7. (15p) Het bedrijf KinderPret organiseert uitstapjes voor kinderen. KinderPret gebruikt een database-applicatie, in de eerste plaats om de reserveringen bij te houden. Onderstaand rapport is één van de overzichten die de database applicatie kan maken. klant Bakker Vlas Voeten Jansen Pietersen de Wit Hazebroek Stolk attractie Blijdorp Efteling Madurodam Drievliet Hellendoorn Duinrell Plaswijck Blijdorp datum 19-1-02 12-1-02 5-1-02 12-1-02 5-1-02 12-1-02 12-1-02 19-1-02 aantal_kinderen 4 5 6 4 5 6 5 6 Begeleider Joke Els Janneke Marjoes Hans Joke Els Marjoes Elke begeleider zorgt zelf voor vervoer. Een uitstapje duurt de hele dag. Dat betekent dat een begeleider maar één uitstapje per dag kan verzorgen. Klanten kunnen uiteraard meerdere uitstapjes hebben gereserveerd. Het is geen bezwaar als verschillende begeleiders op dezelfde dag dezelfde attractie bezoeken. Ontwerp de genormaliseerde tabellen waarop dit rapport is gebaseerd. Zorg ervoor dat de tabellen zo gedefinieerd zijn dat dubbele boekingen niet kunnen voorkomen, en dat het verwijderen van een begeleider en/of klant wordt tegengehouden als er nog uitstapjes door/voor hem/haar zijn gepland. Geef de SQL statements om de tabellen aan te maken. INFDTB01 15-6-2011 12 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 10. Uitwerking oefententamen 1. (2p) Geef het SQL statement om een overzicht van de lezers te maken met naam, geslacht en geboortedatum. Sorteer op naam. SELECT naam, geslacht, geb_datum FROM lezers ORDER BY naam; 2. (2p) Geef het SQL statement om een overzicht te maken van de vrouwelijke lezers die geboren zijn tussen 1 januari 1975 en 1 januari 1985. Geef naam en leeftijd. Sorteer op leeftijd. TIP: De leeftijd van een lezer kan worden berekend met TIMESTAMPDIFF(8,geb_datum,curdate()). Om je schrijfwerk te besparen mag je in de rest van het tentamen het woord ‘leeftijd’ gebruiken als vervanging van ‘TIMESTAMPDIFF(8,geb_datum,curdate())’. SELECT naam, TIMESTAMPDIFF(8,curdate(),geb_datum) as leeftijd FROM lezers WHERE geslacht='V' AND geb_datum BETWEEN '1975-01-01' AND '1985-01-01' ORDER BY leeftijd; 3. (6p) Geef de SQL statements om te berekenen: a. het aantal mannelijke lezers SELECT count(*) FROM lezers WHERE geslacht='M'; b. de leeftijd van de jongste mannelijke lezer SELECT MIN(TIMESTAMPDIFF(8,curdate(),geb_datum)) FROM lezers WHERE geslacht='M'; c. de gemiddelde leeftijd van de vrouwelijke lezers SELECT AVG(TIMESTAMPDIFF(8,curdate(),geb_datum)) FROM lezers WHERE geslacht='V'; 4. (12p) Geef het SQL statement om een overzicht te maken van: a. het aantal lezers per woonplaats SELECT woonplaats, count(*) FROM lezers GROUP BY woonplaats; b. het aantal lezers per woonplaats, uitgesplitst naar geslacht SELECT woonplaats, geslacht, count(*) FROM lezers GROUP BY woonplaats, geslacht; c. het aantal lezers en de gemiddelde leeftijd van de lezers per woonplaats, uitgesplitst naar geslacht. INFDTB01 15-6-2011 13 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI SELECT woonplaats, geslacht, count(*),AVG(TIMESTAMPDIFF(8,curdate(),geb_datum)) FROM lezers GROUP BY woonplaats, geslacht; d. het aantal lezers en de gemiddelde leeftijd van de lezers per woonplaats, maar alleen als er meer dan één lezer in die woonplaats woont SELECT woonplaats, count(*),AVG(TIMESTAMPDIFF(8,curdate(),geb_datum)) FROM lezers GROUP BY woonplaats HAVING count(*)>1; 5. (9p) Geef het SQL statement om een overzicht te maken van: a. gelezen boeken; vermeld boeknummer, beoordeling, en naam van de lezer SELECT boeknr, cijfer, naam FROM gelezen_boeken NATURAL JOIN lezers; b. gelezen boeken; vermeld auteurnr, titel, en de naam van de lezer SELECT auteurnr, titel,naam FROM boeken NATURAL JOIN gelezen_boeken NATURAL JOIN lezers ; c. gelezen boeken; vermeld naam vd auteur, titel, en de naam van de lezer SELECT auteurs.naam, titel, lezers.naam FROM auteurs, boeken, gelezen_boeken, lezers WHERE auteurs.auteurnr=boeken.auteurnr AND gelezen_boeken.lezernr=lezers.lezernr AND gelezen_boeken.boeknr=boeken.boeknr; 6. (14p) Geef het SQL statement om een overzicht te maken van: a. het gemiddelde cijfer van de boeken die door minstens twee lezers zijn gelezen; vermeld naam vd auteur, titel van het boek, en het gemiddelde cijfer SELECT naam, titel, AVG(cijfer) FROM gelezen_boeken NATURAL JOIN boeken NATURAL JOIN auteurs GROUP BY boeknr,naam,titel HAVING count(*)>=2; b. het hoogste cijfer van de gelezen boeken per woonplaats van de lezers; vermeld naam vd auteur, titel, woonplaats van de lezer, en hoogste cijfer vervallen vraag c. het gemiddelde cijfer van een auteur mits deze auteur minstens 3 keer beoordeeld is; SELECT auteurs.naam, AVG(cijfer) FROM auteurs,boeken,gelezen_boeken WHERE auteurs.auteurnr=boeken.auteurnr AND gelezen_boeken.boeknr=boeken.boeknr GROUP BY auteurs.naam,auteurs.auteurnr HAVING count(*) >=3 ; INFDTB01 15-6-2011 14 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 7. (15p) Het bedrijf KinderPret organiseert uitstapjes voor kinderen. KinderPret gebruikt een database-applicatie, in de eerste plaats om de reserveringen bij te houden. Onderstaand rapport is één van de overzichten die de database applicatie kan maken. klant Bakker Vlas Voeten Jansen Pietersen de Wit Hazebroek Stolk attractie Blijdorp Efteling Madurodam Drievliet Hellendoorn Duinrell Plaswijck Blijdorp datum 19-1-02 12-1-02 5-1-02 12-1-02 5-1-02 12-1-02 12-1-02 19-1-02 aantal_kinderen 4 5 6 4 5 6 5 6 Begeleider Joke Els Janneke Marjoes Hans Joke Els Marjoes Elke begeleider zorgt zelf voor vervoer. Een uitstapje duurt de hele dag. Dat betekent dat een begeleider maar één uitstapje per dag kan verzorgen. Klanten kunnen uiteraard meerdere uitstapjes hebben gereserveerd. Het is geen bezwaar als verschillende begeleiders op dezelfde dag dezelfde attractie bezoeken. Ontwerp de genormaliseerde tabellen waarop dit rapport is gebaseerd. Zorg ervoor dat de tabellen zo gedefinieerd zijn dat dubbele boekingen niet kunnen voorkomen, en dat het verwijderen van een begeleider en / of klant wordt tegengehouden als er nog uitstapjes door / voor hem / haar zijn gepland. Geef de SQL statements om de tabellen aan te maken. CREATE TABLE klanten( klantnr integer not null, naam varchar, telnr char(11), straat varchar, huisnr varchar, postcode varchar, woonplaats varchar, PRIMARY KEY(klantnr)); CREATE TABLE attracties( attractienr integer not null, naam varchar, telnr char(11), straat varchar, huisnr varchar, postcode varchar, woonplaats varchar, PRIMARY KEY(attractienr)); CREATE TABLE begeleiders( begeleidernr integer not null, naam varchar, telnr char(11), PRIMARY KEY(begeleidernr)); CREATE TABLE reserveringen( klantnr integer not null, begeleidernr integer not null, attractienr integer not null, datum date not null, aantal_kinderen integer, PRIMARY KEY(datum,begeleidernr), FOREIGN KEY (klantnr) REFERENCES klanten, FOREIGN KEY (begeleidernr) REFERENCES begeleiders, FOREIGN KEY (attractienr) REFERENCES attracties); INFDTB01 15-6-2011 15 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI 11. Zelfstudieopdrachten De artikelen - leveranciers database: leveranciers : L(LNR,LNAAM,STATUS,STAD) LNR L1 L2 L3 L4 L5 LNAAM Smith Chirac Boulanger Blair Papandreou STATUS 20 10 30 20 30 STAD Londen Parijs Parijs Londen Athene artikelen: A(ANR,ANAAM,KLEUR,GEWICHT,STAD) ANR A1 A2 A3 A4 A5 A6 ANAAM moer bout schroef schroef kamrad nok KLEUR rood groen blauw rood blauw groen GEWICHT 12 17 17 14 12 19 STAD Londen Parijs Rome Londen Parijs Londen leverbare artikelen: LA(LNR,ANR,AANTAL) LNR L1 L1 L1 L1 L1 L1 L2 L2 L3 L4 L4 L4 ANR A1 A2 A3 A4 A5 A6 A1 A2 A3 A4 A5 A6 AANTAL 300 200 400 200 100 100 300 400 200 200 300 400 9.1 Geef het SQL commando voor onderstaande opdrachten: a) b) c) d) e) f) geef de nummers en namen van alle artikelen geef de nummers en namen van alle leveranciers geef de nummers en namen van alle rode artikelen geef de nummers en namen van alle artikelen met een gewicht van 17 kg geef de nummers en namen van alle leveranciers met status 20 geef de nummers van leverbare artikelen 9.2 Geef het SQL commando voor onderstaande opdrachten: Geef het SQL commando voor onderstaande opdrachten: a) geef de artikelnummers van alle rode schroeven b) geef de nummers van leveranciers in Londen met status kleiner dan 20 c) geef nummer en naam van de alle leveranciers uit Londen en Parijs INFDTB01 15-6-2011 16 MODULEWIJZER HOGESCHOOL ROTTERDAM /CMI d) geef de nummers van artikelen die door leverancier L2 geleverd kunnen worden 9.3 Geef het SQL commando voor onderstaande opdrachten: Geef het SQL commando voor onderstaande opdrachten: a) geef een lijst van namen van alle leveranciers die artikelen leveren b) geef een lijst van namen van alle artikelen die leverbaar zijn c) geef een lijst van namen van alle leveranciers die artikelnummer A4 kunnen leveren d) geef een lijst van namen van alle artikelen die door leverancier L2 geleverd worden 9.4 Geef het SQL commando voor onderstaande opdrachten: Geef het SQL commando voor onderstaande opdrachten: a) geef een lijst van namen van alle leveranciers die het artikelen ‘moer’ leveren b) geef een lijst van namen van alle artikelen die door leverancier Smit geleverd worden 9.5 Geef het SQL commando voor onderstaande opdrachten: Geef het SQL commando voor onderstaande opdrachten: c) geef het aantal verschillende artikelen d) geef het aantal verschillende leverbare artikelen e) geef het aantal leveranciers dat artikel A5 kan leveren f) geef het aantal leveranciers dat artikel ‘kamrad’ kan leveren g) geef de hoeveelheid van het artikel A5 die geleverd kan worden h) geef de hoeveelheid van het artikel ‘kamrad’ die geleverd kan worden i) geef het artikelnummer met het laagste gewicht j) geef de naam van de leverancier met de hoogste status 9.6 Geef het SQL commando voor onderstaande opdrachten: Geef het SQL commando voor onderstaande opdrachten: a) geef de leveranciernummers die meer dan 3 verschillende artikelen kunnen leveren b) geef de nummers van de artikelen die door meer dan 2 leveranciers geleverd worden c) geef de totale hoeveelheid die van artikel A1 geleverd kan worden d) geef het aantal verschillende artikelen die leverancier L1 kan leveren e) geef een lijst met artikelnummers waarvan er meer dan 200 leverbaar zijn INFDTB01 15-6-2011 17