voorbeeldexamen Databases and SQL Foundation (DBSQLF) I-Tracks Databases and SQL Foundation Voorbeeldexamen DBSQLF Uitgave juni 2006 inhoud 3 4 21 44 inleiding voorbeeldexamen antwoordindicatie beoordeling EXIN Kantoor Janssoenborch, Hoog Catharijne Godebaldkwartier 365, 3511 DT Utrecht Postbus 19147, 3501 DC Utrecht Telefoon (030) 234 48 11 Fax (030) 231 59 86 E-mail [email protected] Internet http://www.exin.nl Copyright © 2006 EXIN Alle rechten voorbehouden. Niets uit deze uitgave mag worden openbaar gemaakt of verveelvoudigd, opgeslagen in een dataverwerkend systeem of uitgezonden in enige vorm door middel van druk, fotokopie of welke andere vorm dan ook zonder toestemming van EXIN. © EXIN, DBSQLF 2/44 Inleiding Dit is het voorbeeldexamen Databases and SQL Foundation (DBSQLF). Het examen bestaat uit 30 meerkeuzevragen. Elke vraag heeft één correct antwoord. Elk goed beantwoorde vraag levert u 1 punt op. Het maximaal aantal te behalen punten is 30. Bij 20 punten of meer bent u geslaagd. De beschikbare tijd is 60 minuten. Aan deze gegevens kunnen geen rechten worden ontleend. Veel succes! © EXIN, DBSQLF 3/44 Voorbeeldexamen 1 van 30 Een verkooporganisatie heeft een relationele database, waarin onder andere de volgende relatie is ondergebracht: KLANT(klantnr, klantnaam, klantadres, klantsaldo) De organisatie wil ook gegevens van klanten in het buitenland kunnen vastleggen en moet daarvoor de relatie KLANT met een aantal attributen uitbreiden. Is het altijd mogelijk om de relatie KLANT uit te breiden zonder dat bestaande queries daarvoor moeten worden aangepast? A. Ja, dit is altijd mogelijk. B. Nee, dit is niet mogelijk. C. Dit is alleen mogelijk indien in de gebruikte queries in SELECT het gebruik van * niet voorkomt. 2 van 30 Er worden verschillende eisen gesteld waaraan een database-managementsyteem (DBMS) en een database moeten voldoen. Hoort: 'Verschillende views van gebruikers op dezelfde gegevens moeten worden ondersteund' tot die eisen? A. ja B. nee 3 van 30 Kan men in een relationele database zoeken op elk gegeven, zonder daar eerst een index voor te creëren? A. ja B. nee © EXIN, DBSQLF 4/44 4 van 30 Een winkelketen wil gegevens vastleggen van artikelen en leveranciers. Men wil zowel overzichten van leveranciers per artikel kunnen maken, als van artikelen per leverancier. In welk databasemodel moeten gegevens dubbel worden opgeslagen om beide soorten overzichten mogelijk te maken? A. in het hiërarchische model B. in het netwerkmodel C. in het relationele model 5 van 30 Welke van onderstaande beweringen over een kandidaatsleutel is juist? A. Elke kandidaatsleutel is tevens vreemde sleutel. B. Elke kandidaatsleutel omvat alle attributen van de primaire sleutel. C. Elke relatie heeft precies één kandidaatsleutel. D. Elke waarde van een kandidaatsleutel in een relationele tabel is uniek. 6 van 30 Onderstaande relaties hebben betrekking op afschriften van een bankrekening: AFSCHRIFT (jaar, volgnummer, beginsaldo, eindsaldo) POST (<jaar, volgnummer>, postnummer, omschrijving, valutadatum, bedrag, activiteitnummer) Elk afschrift bevat één of meer posten. Elke post hoort bij één bepaald afschrift. Om deze samenhang vast te leggen wordt in het relationele model gebruik gemaakt van primaire en vreemde sleutels. Lees in dit verband onderstaande bewering: ‘De referentiële integriteit schrijft voor dat het bij een post behorende afschrift aanwezig is.’ Is deze bewering juist? A. Ja, maar alleen omdat de vreemde sleutel ook deel uitmaakt van de primaire sleutel. B. Ja, omdat referentiële integriteit dit nu eenmaal voorschrijft. C. Nee, want het is het gevolg van entiteitsintegriteit. © EXIN, DBSQLF 5/44 7 van 30 Onderstaande relaties hebben betrekking op een vereniging en haar leden: VERENIGING (verenigingnaam, contributie, betaalperiode) LID (lidnaam, adres, postcode, plaats, ingangsdatum, betaalperiode) Voor de relatie VERENIGING voert men één tupel in (en niet meer dan één) met als sleutel 'St Caecilia'. Lees in dit verband deze bewering: 'De hoogte van de contributie is voor alle leden hetzelfde.' Is deze bewering juist? A. Ja, doordat in de relatie VERENIGING één tupel voorkomt geldt die voor alle leden. B. Nee, want er is geen vreemde sleutel naar de relatie VERENIGING opgenomen. C. Nee, want wat wordt opgeslagen voor betaalperiode in de relatie VERENIGING hoeft niet hetzelfde te zijn als in relatie LID. 8 van 30 Onderstaande relatie heeft betrekking op leden van een vereniging: LID (lidnaam, adres, postcode, plaats, ingangsdatum, betaalperiode) Lees in dit verband deze bewering: 'Bij het registreren van een lid hoeft het adres niet ingevuld te worden.' Is deze bewering juist? A. ja B. nee © EXIN, DBSQLF 6/44 9 van 30 Onderstaande relatie betreft leden van een vereniging: LID (lidnaam, adres, postcode, plaats, ingangsdatum, betaalperiode) Lees in dit verband deze bewering: 'Bij deze vereniging kan één persoon tegelijkertijd op twee verschillende adressen geregistreerd staan.' Is deze bewering juist? A. Ja, door maar alleen door het opnemen van twee tupels voor eenzelfde lid met verschillende waarden voor het attribuut adres. B. Nee, je kunt per persoon maar één tupel in de relatie LID opnemen. C. Nee, want een bepaalde waarde voor het attribuut lidnaam komt dan dubbel voor. 10 van 30 Hoeveel attributen bevat een vreemde sleutel? A. meer dan één attribuut B. minimaal één attribuut C. niet meer dan één attribuut 11 van 30 Bekijk de volgende relatie: STUDENT (studentnummer, studentnaam, studentadres, ...) In de relatie STUDENT komen bij studentnummer gegarandeerd slechts unieke waarden voor. Hoe wordt studentnummer in dit verband genoemd? A. kandidaatsleutel B. samengestelde sleutel C. vreemde sleutel © EXIN, DBSQLF 7/44 12 van 30 Een verhuurder hanteert een database waarin onder andere gegevens van panden en van verhuur zijn vastgelegd: PANPAND (nummer, naam, adres, plaats, huur) HUUR (huurdernaam, <nummer>, contractbegindatum, contracteinddatum, bankrekeningnummer) Kent een pand meer dan één contractperiodes? A. Ja, als er in de relatie HUUR voor het pand voor zowel contractbegindatum als contracteinddatum een waarde is opgenomen. B. Ja, wanneer er voor een pand meer dan één tupel in de relatie HUUR voorkomt waarin waarden zijn opgenomen voor contractbegindatum en voor contracteinddatum. C. Nee, want er is in de relatie HUUR niet altijd een waarde opgenomen voor het attribuut contracteinddatum. 13 van 30 Bekijk de volgende relatie: filmnr. titel regisseurnr Jaar tijdsduur 1 Manhattan 1 1979 96 2 Crimes of the heart 2 1986 105 3 Looking for Mr Goodbar 3 1977 135 4 Pretty Woman 4 1990 117 5 The postman always rings twice 5 1981 113 6 The postman always rings twice 5 1946 113 Wat is een juiste benaming voor het vet weergegeven deel? A. attribuut B. attribuutnaam C. attribuutwaarde 14 van 30 Met welk begrip in relationele database komt het begrip 'tupel' overeen? A. kolom B. rij C. tabel © EXIN, DBSQLF 8/44 15 van 30 Bekijk de volgende relatie: SPORTCLUB (clubnaam, woonplaats, contributie, sport) Sportclub clubnaam woonplaats contributie sport Vitesse Rotterdam 300 voetbal Vitesse Schiedam 300 atletiek Vita Rotterdam 280 voetbal Vita Schiedam 280 voetbal Is de inhoud van bovenstaande tabel toegestaan uitgaande van de gegeven relatie? A. ja B. nee 16 van 30 Bekijk de volgende relaties: REISGIDS (gidsnr, titel, ingangsdatum, einddatum) DRUKORDER (bestelnr, <gidsnr>, datumbestelling, aantalbesteld, datumgeleverd) Waarom is er uitgaande van de gegeven relaties sprake van referentiële integriteit? A. Elk tupel van de relatie REISGIDS heeft een unieke waarde voor het attribuut gidsnr. B. Het attribuut gidsnr in de relatie DRUKORDER is een vreemde sleutel. Hierdoor kan een tupel alleen worden toegevoegd als in de relatie REISGIDS een tupel voorkomt met dezelfde waarde van het attribuut gidsnr als dat van het toe te voegen tupel. C. Omdat het attribuut gidsnr een vreemde sleutel is die in de relatie DRUKORDER geen onderdeel van de primaire sleutel uitmaakt. 17 van 30 ‘In een database kunnen gegevens met Data Control Language (DCL) worden gewijzigd en toegevoegd.’ Is deze bewering juist? A. ja B. nee © EXIN, DBSQLF 9/44 18 van 30 Bekijk de volgende relaties uit een database: KLANT (klantnr, naam, adres, woonpl, regio) FACTUUR (factnr, datum, klantnr, bedrag, betaald) Bekijk onderstaande opdracht: SELECT naam, factnr FROM klant, factuur WHERE bedrag > 600 AND factuur.klantnr = klant.klantnr Lees in dit verband onderstaande bewering: ‘De opdracht toont de namen van klanten en de nummers van aan hen gezonden facturen met een bedrag van ten minste 600 euro.’ Is deze bewering juist? A. ja B. nee 19 van 30 Bekijk onderstaande DCL-opdrachten: GRANT SELECT ON TABLE activiteit TO Carla, Lies GRANT INSERT, DELETE ON TABLE lid TO Carla Gegeven twee DML-opdrachten. 1: SELECT a-omschrijving FROM activiteit WHERE activiteitnummer = 27 2: UPDATE lid SET ingangsdatum = '2006-04-01' WHERE naam = 'J. van Heumel' Welke personen zijn gerechtigd beide DML-opdrachten door het DBMS te laten uitvoeren? A. alleen Carla B. alleen Lies C. Carla en Lies D. geen van beiden © EXIN, DBSQLF 10/44 20 van 30 Aankoop Klantnr Datum Bedrag 1 2005-01-20 100 2 2005-01-20 50 4 2005-02-04 30 3 2005-02-05 110 2 2005-03-30 70 4 2005-04-18 70 SELECT klantnr FROM aankoop GROUP BY klantnr HAVING SUM (Bedrag) > 100 Welk resultaat wordt verkregen als de gegeven SELECT-opdracht op de gegeven tabel wordt toegepast? A. 1, 2, 3, 4 B. 1, 3 C. 2, 3 D. 3 © EXIN, DBSQLF 11/44 21 van 30 Bekijk de volgende relaties: VESTIGING (vesnaam, branche, plaats) WERKNEMER (w#, wnaam, afdeling, fnaam, salaris, <vesnaam>) De volgende CREATE TABLE opdracht geeft een deel van de statements weer om de tabel WERKNEMER te creëren op basis van de gegeven relaties. CREATE TABLE werknemer (w# SMALLINT NOT NULL, wnaam CHAR (8), afdeling CHAR (12), fnaam CHAR (12), salaris DECIMAL (10), vesnaam CHAR (10), .....) Wat moet op de plaats van de puntjes komen te staan op basis van bovenstaande gegevens? A. PRIMARY KEY (vesnaam) FOREIGN KEY (w#) REFERENCES vestiging B. PRIMARY KEY (w#), FOREIGN KEY (vesnaam) REFERENCES vestiging C. PRIMARY KEY (w#), FOREIGN KEY (w#) REFERENCES vestiging D. PRIMARY KEY (w#, FOREIGN KEY vesnaam) REFERENCES vestiging © EXIN, DBSQLF 12/44 22 van 30 Teams Teamnummer Datum Punten T1 2006-01-01 3 T1 2006-01-01 8 T1 2006-02-06 1 T2 2006-01-01 5 T3 2006-02-06 7 Resultaat: T1 T2 Welke SELECT opdracht heeft het gegeven resultaat? A. SELECT DISTINCT Teamnummer FROM Teams B. SELECT DISTINCT Teamnummer FROM Teams WHERE datum = '2006-01-01' C. SELECT Teamnummer FROM Teams WHERE datum = '2006-01-01' D. SELECT Teamnummer FROM Teams WHERE datum = '2006-02-06' © EXIN, DBSQLF 13/44 23 van 30 Drukorder bestelnr gidsnr datumbestelling aantalbesteld 501 1038 2005-02-01 400 502 1038 2005-04-01 300 503 2038 2005-02-01 600 504 1038 2005-05-01 200 505 2038 2005-06-28 300 506 2038 2005-09-01 100 SELECT gidsnr, COUNT (aantalbesteld) FROM drukorder WHERE datumbestelling < '2005-07-01' AND aantalbesteld > 200 GROUP BY gidsnr Deze SQL-opdracht geeft het volgende resultaat: Drukorder gidsnr count (aantalbesteld) 1038 x 2038 y Wat moet voor x en y worden ingevuld om het resultaat van de gegeven SQL-opdracht op de gegeven tabel DRUKORDER weer te geven? A. x=2 en y=2 B. x=3 en y=2 C. x=700 en y=900 D. x=900 en y=900 © EXIN, DBSQLF 14/44 24 van 30 Gegeven zijn de volgende relaties: REISGIDS (gidsnr, titel, ingangsdatum, einddatum) REISPRODUCT (productnr, soortproduct, <gidsnr>, omschrijving, bestemming, aantal dagen, soortverblijf, soortvervoer, soortvermaak) Men wil met de opdracht CREATE TABLE de tabel REISPRODUCT creëren. De volgende onvolledige DDL-opdracht wordt hiervoor gebruikt: CREATE TABLE reisproduct ( soortproduct CHAR(30) NOT NULL, gidsnr INTEGER, omschrijving CHAR(30), bestemming CHAR(30), aantaldagen INTEGER, soortverblijf CHAR(20) NOT NULL, soortvervoer CHAR(20) NOT NULL, soortvermaak CHAR(20), ... ) Hoe moet de DDL-opdracht worden aangevuld om de tabel REISPRODUCT correct te creëren? A. productnr INTEGER NOT NULL, FOREIGN KEY(productnr, gidsnr) REFERENCES reisgids B. productnr INTEGER NOT NULL, PRIMARY KEY(productnr), FOREIGN KEY(gidsnr) REFERENCES reisgids C. PRIMARY KEY(productnr INTEGER), FOREIGN KEY(gidsnr) REFERENCES reisgids © EXIN, DBSQLF 15/44 25 van 30 Bekijk het volgende relationele schema: REISGIDS (gidsnr, titel, ingangsdatum, einddatum) KLANT (klantnr, soortklant, naam, adres, postcode, woonplaats, telefoonnr, faxnr, emailadres, contactpersoon) GIDSAANVRAAG (<klantnr>, <gidsnr>, datumaanvraag, aantalgevraagd, datumverzending, aantalverzonden) De systeembeheerder wil de tabel GIDSAANVRAAG schonen. Hij wil met behulp van een SQLopdracht alle rijen, waarvan het aantal aangevraagd gelijk is aan het aantal verzonden, uit de tabel verwijderen. Welke SQL-opdracht levert het gewenste resultaat? A. DELETE FROM gidsaanvraag WHERE aantalgevraagd = aantalverzonden B. DELETE FROM gidsaanvraag WHERE klantnr IN (SELECT klantnr FROM gidsaanvraag WHERE aantalgevraagd = aantalverzonden) C. DELETE FROM gidsaanvraag WHERE gidsnr IN (SELECT gidsnr FROM gidsaanvraag WHERE aantalgevraagd = aantalverzonden) © EXIN, DBSQLF 16/44 26 van 30 Bekijk onderstaande tabel TARIEF: Tarief typehandeling bedrag controle 32 eenvlaksvulling 37 tweevlaksvulling 50 wortelkanaal 85 Bij de overgang naar de euro moest in de tabel TARIEF elk bedrag worden gedeeld door 2.2. Welke SQL-query leidt tot het gewenste resultaat? A. INSERT INTO bedrag VALUES ((32/2.2), (37/2.2), (50/2.2), (85/2.2)) B. INSERT INTO tarief VALUES ((32/2.2), (37/2.2), (50/2.2), (85/2.2)) C. UPDATE bedrag SET bedrag = bedrag/2.2 D. UPDATE tarief SET bedrag = bedrag/2.2 27 van 30 Bekijk de volgende GRANT-opdracht: GRANT ALTER ON werknemer TO Piet Wat mag Piet volgens de GRANT-opdracht doen? A. nieuwe kolommen aan de tabel WERKNEMER toevoegen B. rijen aan de tabel WERKNEMER toevoegen C. waarden in rijen in de tabel WERKNEMER wijzigen © EXIN, DBSQLF 17/44 28 van 30 SELECT klas FROM klas WHERE leerlingaantal < 14 AND klas IN (SELECT klas FROM vak GROUP BY klas HAVING (SUM) lesaantal = 5) Wat is het resultaat als de gegeven SELECT-opdracht op de gegeven tabellen wordt toegepast? A. 1B 2B 2C B. 1B 2B 2C 3A C. 1B 2C D. 1B 2C 3A © EXIN, DBSQLF 18/44 29 van 30 Kookboek kookboek recept calorieën Lekker Wokken Hete kip 400 Lekker Wokken Roerbak 300 Pasta en zo Macaroni Napoli 600 Pasta en zo Pesto 200 Pasta en zo Lasagne 400 Ovenschotels Lasagne 500 Lees de volgende informatiebehoefte: Geef alle gegevens van recepten waarvoor geldt dat het recept in vergelijking met de andere recepten in hetzelfde kookboek het maximaal aantal calorieën bevat. Gegeven is de volgende SELECT opdracht: SELECT * FROM kookboek WHERE calorieën = (SELECT MAX (calorieën) FROM kookboek GROUP BY kookboek) Kan door middel van de SELECT-opdracht de gevraagde informatie worden verkregen? A. ja B. nee © EXIN, DBSQLF 19/44 30 van 30 Bekijk de volgende tabel en informatiebehoefte: Circuit loper datum plaats punten 1 2005-01-01 1 100 2 2005-02-01 2 150 1 2005-02-01 1 200 3 2005-02-01 3 50 2 2005-04-01 1 300 Geef van de lopers die op plaats 1 hebben gestaan het aantal keren dat ze op plaats 1 hebben gestaan. Om de informatie te verkrijgen wordt gebruik gemaakt van de volgende SELECT-opdracht: SELECT loper, count(*) FROM circuit GROUP BY loper HAVING plaats = 1 Is de gegeven SELECT-opdracht juist? A. ja B. nee © EXIN, DBSQLF 20/44 Antwoordindicatie 1 van 30 Een verkooporganisatie heeft een relationele database, waarin onder andere de volgende relatie is ondergebracht: KLANT(klantnr, klantnaam, klantadres, klantsaldo) De organisatie wil ook gegevens van klanten in het buitenland kunnen vastleggen en moet daarvoor de relatie KLANT met een aantal attributen uitbreiden. Is het altijd mogelijk om de relatie KLANT uit te breiden zonder dat bestaande queries daarvoor moeten worden aangepast? A. Ja, dit is altijd mogelijk. B. Nee, dit is niet mogelijk. C. Dit is alleen mogelijk indien in de gebruikte queries in SELECT het gebruik van * niet voorkomt. A. Onjuist. Bij het gebruik maken van * in de select wordt de uitkomst na het toevoegen van kolommen anders. B. Onjuist. Het is onder voorwaarden wel mogelijk, zie bij alternatief C. C. Juist. In het geval van het niet gebruiken van * in de select kunnen queries nooit gebruik maken van nog niet bestaande attributen. Het toevoegen van nieuwe attributen is daarom geen probleem. Bij het verwijderen van bestaande attributen, die misschien in queries voorkomen, zou dat wel een probleem kunnen zijn. 2 van 30 Er worden verschillende eisen gesteld waaraan een database-managementsyteem (DBMS) en een database moeten voldoen. Hoort: 'Verschillende views van gebruikers op dezelfde gegevens moeten worden ondersteund' tot die eisen? A. ja B. nee A. Juist. Deze eis moet volgens de literatuur inderdaad worden gesteld (boek A: blz 12). B. Onjuist. Deze eis moet volgens de literatuur wel worden gesteld (boek A: blz. 12). © EXIN, DBSQLF 21/44 3 van 30 Kan men in een relationele database zoeken op elk gegeven, zonder daar eerst een index voor te creëren? A. ja B. nee A. Juist. Een index versnelt het zoeken, maar is voor het zoeken zelf niet noodzakelijk. B. Onjuist. Een index versnelt het zoeken, maar is voor het zoeken zelf niet noodzakelijk. 4 van 30 Een winkelketen wil gegevens vastleggen van artikelen en leveranciers. Men wil zowel overzichten van leveranciers per artikel kunnen maken, als van artikelen per leverancier. In welk databasemodel moeten gegevens dubbel worden opgeslagen om beide soorten overzichten mogelijk te maken? A. in het hiërarchische model B. in het netwerkmodel C. in het relationele model A. Juist. Bij het hiërarchische model vindt de benadering altijd plaats vanuit de 'root'. Wil men artikelen per leverancier, dan staat de leverancier in de root van de fysieke database en de bijbehorende artikelen staan in de hiërarchie daaronder. Wil men leveranciers per artikel, dan staat het artikel in de root van de fysieke database en de bijbehorende leveranciers staan in de hiërarchie daaronder. Dat houdt in dat er twee fysieke databases nodig zijn met, per definitie, overtollige gegevens. B. Onjuist. In het netwerkmodel benadert men artikelen per leverancier door een leverancierrecord te zoeken en vervolgens de ketting van bijbehorende artikelen af te lopen. Leveranciers per artikel krijgt men door een artikelrecord te zoeken en vervolgens de ketting van bijbehorende leveranciers af te lopen. Al deze records en bijbehorende kettingen bevinden zich in één fysieke database, zonder overtollige gegevens. C. Onjuist. In het relationele model benadert men artikelen per leverancier door in de tabel 'leveranciersartikelen' alle rijen te nemen die dezelfde leverancierscode hebben. Leveranciers per artikel krijgt men door in dezelfde tabel alle rijen te nemen die dezelfde artikelcode hebben. Heeft men behoefte aan leveranciers- of artikelgegevens, dan zoekt men die met de betreffende code (sleutel) op in de tabel 'leveranciers', respectievelijk 'artikelen'. In het relationele model heeft men geen redundantie van gegevens (anders dan sleutels). © EXIN, DBSQLF 22/44 5 van 30 Welke van onderstaande beweringen over een kandidaatsleutel is juist? A. Elke kandidaatsleutel is tevens vreemde sleutel. B. Elke kandidaatsleutel omvat alle attributen van de primaire sleutel. C. Elke relatie heeft precies één kandidaatsleutel. D. Elke waarde van een kandidaatsleutel in een relationele tabel is uniek. A. Onjuist. Een vreemde sleutel in een relatie geeft het verband weer met een andere relatie, waar deze vreemde sleutel de primaire sleutel is. Dezelfde waarde kan daardoor in meer dan één tupel voorkomen. Een voorwaarde voor een kandidaatsleutel is dat elke waarde uniek is. Daar wordt dan niet aan voldaan. B. Onjuist. Het is waar dat de primaire sleutel tevens een kandidaatsleutel was. De bewering dat elke kandidaatsleutel alle attributen van de primaire sleutel bevat, is niet waar. Dan zou er in elke relatie maar één kandidaatsleutel mogelijk zijn. C. Onjuist. Een relatie kan meer dan één kandidaatsleutel hebben; één wordt verkozen als primaire sleutel. D. Juist. Een kandidaatsleutel is een mogelijke primaire sleutel van een tabel. Een voorwaarde voor een primaire sleutel is dat elke waarde uniek is. © EXIN, DBSQLF 23/44 6 van 30 Onderstaande relaties hebben betrekking op afschriften van een bankrekening: AFSCHRIFT (jaar, volgnummer, beginsaldo, eindsaldo) POST (<jaar, volgnummer>, postnummer, omschrijving, valutadatum, bedrag, activiteitnummer) Elk afschrift bevat één of meer posten. Elke post hoort bij één bepaald afschrift. Om deze samenhang vast te leggen wordt in het relationele model gebruik gemaakt van primaire en vreemde sleutels. Lees in dit verband onderstaande bewering: ‘De referentiële integriteit schrijft voor dat het bij een post behorende afschrift aanwezig is.’ Is deze bewering juist? A. Ja, maar alleen omdat de vreemde sleutel ook deel uitmaakt van de primaire sleutel. B. Ja, omdat referentiële integriteit dit nu eenmaal voorschrijft. C. Nee, want het is het gevolg van entiteitsintegriteit. A. Onjuist. Het deel uitmaken van de primaire sleutel zorgt er alleen voor dat er een waarde is. Deze waarde komt door het deel uitmaken van de primaire sleutel zelf niet noodzakelijk ook voor als primaire sleutel van de relatie AFSCHRIFT. Dit komt alleen door de referentiële integriteit. B. Juist. Door in POST een vreemde sleutel op te nemen die verwijst naar de primaire sleutel van AFSCHRIFT wordt er voor gezorgd dat geen posten kunnen worden toegevoegd voordat het bijbehorende afschrift is ingevoerd, en dat een afschrift niet kan worden verwijderd zolang er nog posten van aanwezig zijn. C. Onjuist. Entiteitsintegriteit zorgt alleen voor het opnemen van een unieke waarde van de primaire sleutel. Deze waarde hoeft (voor entiteitsintegriteit) niet een waarde te zijn die aansluit op één van de waarden van de primaire sleutel van de relatie AFSCHRIFT. © EXIN, DBSQLF 24/44 7 van 30 Onderstaande relaties hebben betrekking op een vereniging en haar leden: VERENIGING (verenigingnaam, contributie, betaalperiode) LID (lidnaam, adres, postcode, plaats, ingangsdatum, betaalperiode) Voor de relatie VERENIGING voert men één tupel in (en niet meer dan één) met als sleutel 'St Caecilia'. Lees in dit verband deze bewering: 'De hoogte van de contributie is voor alle leden hetzelfde.' Is deze bewering juist? A. Ja, doordat in de relatie VERENIGING één tupel voorkomt geldt die voor alle leden. B. Nee, want er is geen vreemde sleutel naar de relatie VERENIGING opgenomen. C. Nee, want wat wordt opgeslagen voor betaalperiode in de relatie VERENIGING hoeft niet hetzelfde te zijn als in relatie LID. A. Juist. In de relatie LID komt geen contributie voor, dus er kan maar één waarde worden vastgelegd, in de relatie VERENIGING. B. Onjuist. Door het opnemen van precies één tupel geldt de waarde voor contributie algemeen. Een vreemde sleutel is nodig wanneer er meer tupels in de relatie VERENIGING worden vastgelegd. C. Onjuist. Betaalperiode zegt niets over de hoogte van de contributie. 8 van 30 Onderstaande relatie heeft betrekking op leden van een vereniging: LID (lidnaam, adres, postcode, plaats, ingangsdatum, betaalperiode) Lees in dit verband deze bewering: 'Bij het registreren van een lid hoeft het adres niet ingevuld te worden.' Is deze bewering juist? A. ja B. nee A. Onjuist. Adres is een deel van de primaire sleutel; deze moet altijd volledig worden ingevuld. B. Juist. Adres is een deel van de primaire sleutel; deze moet altijd volledig worden ingevuld. © EXIN, DBSQLF 25/44 9 van 30 Onderstaande relatie betreft leden van een vereniging: LID (lidnaam, adres, postcode, plaats, ingangsdatum, betaalperiode) Lees in dit verband deze bewering: 'Bij deze vereniging kan één persoon tegelijkertijd op twee verschillende adressen geregistreerd staan.' Is deze bewering juist? A. Ja, door maar alleen door het opnemen van twee tupels voor eenzelfde lid met verschillende waarden voor het attribuut adres. B. Nee, je kunt per persoon maar één tupel in de relatie LID opnemen. C. Nee, want een bepaalde waarde voor het attribuut lidnaam komt dan dubbel voor. A. Juist, want het is de combinatie van lidnaam en adres die uniek moet zijn. De betreffende persoon wordt in deze situatie dan wel als twee verschillende leden gezien. B. Onjuist. Beperkingen gelden alleen voor het opnemen van tupels. Als iemand meer dan één adres heeft, dan kunnen diens naam in combinatie met de verschillende adressen gewoon vastgelegd worden. C. Onjuist. Lidnaam is slechts een deel van een primaire sleutel. Waarden van delen van de primaire sleutel mogen dubbel voorkomen. Alleen combinaties van alle waarden voor de attributen van een primaire sleutel mogen dit niet. 10 van 30 Hoeveel attributen bevat een vreemde sleutel? A. meer dan één attribuut B. minimaal één attribuut C. niet meer dan één attribuut A. Onjuist. Een vreemde sleutel kán uit meer dan één attribuut bestaan, maar het hoeft niet. B. Juist. Een vreemde sleutel kán uit meer dan één attribuut bestaan, maar het hoeft niet. C. Onjuist. Een vreemde sleutel kán uit meer dan één attribuut bestaan, maar het hoeft niet. © EXIN, DBSQLF 26/44 11 van 30 Bekijk de volgende relatie: STUDENT (studentnummer, studentnaam, studentadres, ...) In de relatie STUDENT komen bij studentnummer gegarandeerd slechts unieke waarden voor. Hoe wordt studentnummer in dit verband genoemd? A. kandidaatsleutel B. samengestelde sleutel C. vreemde sleutel A. Juist. Ieder attribuut (of combinatie van ...) dat primaire sleutel zou kunnen zijn is een kandidaatsleutel. Dat geldt dus ook voor 'studentnummer'. B. Onjuist. Een samengestelde sleutel is een combinatie van attributen. Dat geldt niet voor 'studentnummer', dat hier kandidaatsleutel (of mogelijk zelfs primaire sleutel) is. C. Onjuist. Een vreemde sleutel is een attribuut dat in een andere (of dezelfde) tabel als primaire sleutel voorkomt. Dat geldt niet voor 'studentnummer', dat hier kandidaatsleutel is. Het is niet zeker of 'studentnummer' ook primaire sleutel is. 12 van 30 Een verhuurder hanteert een database waarin onder andere gegevens van panden en van verhuur zijn vastgelegd: PANPAND (nummer, naam, adres, plaats, huur) HUUR (huurdernaam, <nummer>, contractbegindatum, contracteinddatum, bankrekeningnummer) Kent een pand meer dan één contractperiodes? A. Ja, als er in de relatie HUUR voor het pand voor zowel contractbegindatum als contracteinddatum een waarde is opgenomen. B. Ja, wanneer er voor een pand meer dan één tupel in de relatie HUUR voorkomt waarin waarden zijn opgenomen voor contractbegindatum en voor contracteinddatum. C. Nee, want er is in de relatie HUUR niet altijd een waarde opgenomen voor het attribuut contracteinddatum. A. Onjuist. Dit laat nog vrij dat voor een pand slechts één tupel in de relatie HUUR is vastgelegd. B. Juist. Zodra voor een pand meer dan één tupel in de relatie HUUR voorkomt zijn er meer contractperiodes. Een pand 'kent' deze periodes als er waarden zijn voor contractbegindatum en contracteinddatum. C. Onjuist. Er kan uiteraard een contractsperiode lopen die nog niet is afgesloten, maar er kan daarnaast meer dan één tupel zijn opgenomen met ingevulde waarden voor contractbegindatum en contracteinddatum. © EXIN, DBSQLF 27/44 13 van 30 Bekijk de volgende relatie: filmnr. titel regisseurnr Jaar tijdsduur 1 Manhattan 1 1979 96 2 Crimes of the heart 2 1986 105 3 Looking for Mr Goodbar 3 1977 135 4 Pretty Woman 4 1990 117 5 The postman always rings twice 5 1981 113 6 The postman always rings twice 5 1946 113 Wat is een juiste benaming voor het vet weergegeven deel? A. attribuut B. attribuutnaam C. attribuutwaarde A. Juist. Het weergegeven deel is de combinatie van attribuutnaam en attribuutwaarden, samen een attribuut. B. Onjuist. Het weergegeven deel is de combinatie van attribuutnaam en attribuutwaarden, samen een attribuut. C. Onjuist. Het weergegeven deel is de combinatie van attribuutnaam en attribuutwaarden, samen een attribuut. 14 van 30 Met welk begrip in relationele database komt het begrip 'tupel' overeen? A. kolom B. rij C. tabel A. Onjuist. Het begrip 'kolom' komt overeen met het begrip 'attribuut'. B. Juist. Het begrip 'rij' komt overeen met het begrip 'tupel'. C. Onjuist. Het begrip 'tabel' komt overeen met het begrip 'relatie'. © EXIN, DBSQLF 28/44 15 van 30 Bekijk de volgende relatie: SPORTCLUB (clubnaam, woonplaats, contributie, sport) Sportclub clubnaam woonplaats contributie sport Vitesse Rotterdam 300 voetbal Vitesse Schiedam 300 atletiek Vita Rotterdam 280 voetbal Vita Schiedam 280 voetbal Is de inhoud van bovenstaande tabel toegestaan uitgaande van de gegeven relatie? A. ja B. nee A. Juist. De inhoud van de tabel is een toegestane inhoud. De entiteitsintegriteit is niet overtreden. B. Onjuist. De inhoud van de tabel is een toegestane inhoud. De entiteitsintegriteit is niet overtreden. 16 van 30 Bekijk de volgende relaties: REISGIDS (gidsnr, titel, ingangsdatum, einddatum) DRUKORDER (bestelnr, <gidsnr>, datumbestelling, aantalbesteld, datumgeleverd) Waarom is er uitgaande van de gegeven relaties sprake van referentiële integriteit? A. Elk tupel van de relatie REISGIDS heeft een unieke waarde voor het attribuut gidsnr. B. Het attribuut gidsnr in de relatie DRUKORDER is een vreemde sleutel. Hierdoor kan een tupel alleen worden toegevoegd als in de relatie REISGIDS een tupel voorkomt met dezelfde waarde van het attribuut gidsnr als dat van het toe te voegen tupel. C. Omdat het attribuut gidsnr een vreemde sleutel is die in de relatie DRUKORDER geen onderdeel van de primaire sleutel uitmaakt. A. Onjuist. Deze uitspraak geeft entiteitsintegriteit aan en niet referentiële integriteit. B. Juist. In relatie drukorder is de vreemde sleutel gidsnr. Het attribuut gidsnr in relatie drukorder mag alleen waarden bevatten die overeen komen met waarden voor gidsnr in relatie reisgids. C. Onjuist. Referentiële integriteit bestaat ongeacht of en vreemde sleutel deel uitmaakt van de primaire sleutel in de relatie waarin hij voorkomt. © EXIN, DBSQLF 29/44 17 van 30 ‘In een database kunnen gegevens met Data Control Language (DCL) worden gewijzigd en toegevoegd.’ Is deze bewering juist? A. ja B. nee A. Onjuist. Met DCL verlenen we gebruikers toegang tot gegevens (autorisatie), DML is er voor het benaderen van de gegevens zelf. B. Juist. Met DCL verlenen we gebruikers toegang tot gegevens (autorisatie), DML is er voor het benaderen van de gegevens zelf. 18 van 30 Bekijk de volgende relaties uit een database: KLANT (klantnr, naam, adres, woonpl, regio) FACTUUR (factnr, datum, klantnr, bedrag, betaald) Bekijk onderstaande opdracht: SELECT naam, factnr FROM klant, factuur WHERE bedrag > 600 AND factuur.klantnr = klant.klantnr Lees in dit verband onderstaande bewering: ‘De opdracht toont de namen van klanten en de nummers van aan hen gezonden facturen met een bedrag van ten minste 600 euro.’ Is deze bewering juist? A. ja B. nee A. Onjuist: 'ten minste' houdt in: 600 of groter, '> 600' is alleen maar groter dan 600. B. Juist: 'ten minste' houdt in: 600 of groter, '> 600' is alleen maar groter dan 600. © EXIN, DBSQLF 30/44 19 van 30 Bekijk onderstaande DCL-opdrachten: GRANT SELECT ON TABLE activiteit TO Carla, Lies GRANT INSERT, DELETE ON TABLE lid TO Carla Gegeven twee DML-opdrachten. 1: SELECT a-omschrijving FROM activiteit WHERE activiteitnummer = 27 2: UPDATE lid SET ingangsdatum = '2006-04-01' WHERE naam = 'J. van Heumel' Welke personen zijn gerechtigd beide DML-opdrachten door het DBMS te laten uitvoeren? A. alleen Carla B. alleen Lies C. Carla en Lies D. geen van beiden A. Onjuist. Opdracht 1 mag worden uitgevoerd door Carla en Lies. Opdracht 2 mag worden uitgevoerd door geen van beide (UPDATE ontbreekt in GRANT). Geen van beiden mogen dus beide opdrachten uitvoeren. B. Onjuist. Opdracht 1 mag worden uitgevoerd door Carla en Lies. Opdracht 2 mag worden uitgevoerd door geen van beide (UPDATE ontbreekt in GRANT). Geen van beiden mogen dus beide opdrachten uitvoeren. C. Onjuist. Opdracht 1 mag worden uitgevoerd door Carla en Lies. Opdracht 2 mag worden uitgevoerd door geen van beide (UPDATE ontbreekt in GRANT). Geen van beiden mogen dus beide opdrachten uitvoeren. D. Juist. Opdracht 1 mag worden uitgevoerd door Carla en Lies. Opdracht 2 mag worden uitgevoerd door geen van beide (UPDATE ontbreekt in GRANT). Geen van beiden mogen dus beide opdrachten uitvoeren. © EXIN, DBSQLF 31/44 20 van 30 Aankoop Klantnr Datum Bedrag 1 2005-01-20 100 2 2005-01-20 50 4 2005-02-04 30 3 2005-02-05 110 2 2005-03-30 70 4 2005-04-18 70 SELECT klantnr FROM aankoop GROUP BY klantnr HAVING SUM (Bedrag) > 100 Welk resultaat wordt verkregen als de gegeven SELECT-opdracht op de gegeven tabel wordt toegepast? A. 1, 2, 3, 4 B. 1, 3 C. 2, 3 D. 3 A. Onjuist. Door middel van de gegeven SELECT-opdracht wil je de klantnr's selecteren die ieder voor zich voor hun totale aankopen meer dan 100 hebben besteed. Klantnr. 1 heeft in totaal 100 besteed, klantnr. 2 heeft in totaal 120 besteed, klantnr. 3 heeft 110 besteed en klantnr. 4 heeft 100 besteed. De klantnr.'s die voldoen aan de voorwaarden zijn alleen klantnr. 2 en 3. B. Onjuist. Door middel van de gegeven SELECT-opdracht wil je de klantnr's selecteren die ieder voor zich voor hun totale aankopen meer dan 100 hebben besteed. Klantnr. 1 heeft in totaal 100 besteed, klantnr. 2 heeft in totaal 120 besteed, klantnr. 3 heeft 110 besteed en klantnr. 4 heeft 100 besteed. De klantnr.'s die voldoen aan de voorwaarden zijn alleen klantnr. 2 en 3. C. Juist. Door middel van de gegeven SELECT-opdracht wil je de klantnr's selecteren die ieder voor zich voor hun totale aankopen meer dan 100 hebben besteed. Klantnr. 1 heeft in totaal 100 besteed, klantnr. 2 heeft in totaal 120 besteed, klantnr. 3 heeft 110 besteed en klantnr. 4 heeft 100 besteed. De klantnr.'s die voldoen aan de voorwaarden zijn alleen klantnr. 2 en 3. D. Onjuist. Door middel van de gegeven SELECT-opdracht wil je de klantnr's selecteren die ieder voor zich voor hun totale aankopen meer dan 100 hebben besteed. Klantnr. 1 heeft in totaal 100 besteed, klantnr. 2 heeft in totaal 120 besteed, klantnr. 3 heeft 110 besteed en klantnr. 4 heeft 100 besteed. De klantnr.'s die voldoen aan de voorwaarden zijn alleen klantnr. 2 en 3. © EXIN, DBSQLF 32/44 21 van 30 Bekijk de volgende relaties: VESTIGING (vesnaam, branche, plaats) WERKNEMER (w#, wnaam, afdeling, fnaam, salaris, <vesnaam>) De volgende CREATE TABLE opdracht geeft een deel van de statements weer om de tabel WERKNEMER te creëren op basis van de gegeven relaties. CREATE TABLE werknemer (w# SMALLINT NOT NULL, wnaam CHAR (8), afdeling CHAR (12), fnaam CHAR (12), salaris DECIMAL (10), vesnaam CHAR (10), .....) Wat moet op de plaats van de puntjes komen te staan op basis van bovenstaande gegevens? A. PRIMARY KEY (vesnaam) FOREIGN KEY (w#) REFERENCES vestiging B. PRIMARY KEY (w#), FOREIGN KEY (vesnaam) REFERENCES vestiging C. PRIMARY KEY (w#), FOREIGN KEY (w#) REFERENCES vestiging D. PRIMARY KEY (w#, FOREIGN KEY vesnaam) REFERENCES vestiging A. Onjuist. De primaire sleutel van de tabel werknemer is w#. De vreemde sleutel is vesnaam. B. Juist. De primaire sleutel van de tabel werknemer is w#. De vreemde sleutel is vesnaam. C. Onjuist. De primaire sleutel van de tabel werknemer is w#. De vreemde sleutel is vesnaam. D. Onjuist. De primaire sleutel van de tabel werknemer is w#. De vreemde sleutel is vesnaam. Syntaxis is verkeerd. © EXIN, DBSQLF 33/44 22 van 30 Teams Teamnummer Datum Punten T1 2006-01-01 3 T1 2006-01-01 8 T1 2006-02-06 1 T2 2006-01-01 5 T3 2006-02-06 7 Resultaat: T1 T2 Welke SELECT opdracht heeft het gegeven resultaat? A. SELECT DISTINCT Teamnummer FROM Teams B. SELECT DISTINCT Teamnummer FROM Teams WHERE datum = '2006-01-01' C. SELECT Teamnummer FROM Teams WHERE datum = '2006-01-01' D. SELECT Teamnummer FROM Teams WHERE datum = '2006-02-06' A. Onjuist. Deze SELECT-opdracht heeft als resultaat alle verschillende teamnummers. Dit wil zeggen T1, T2 en T3. B. Juist. Deze SELECT-opdracht heeft als resultaat alle verschillende teamnummers waar bij datum 2006-01-01 is ingevoerd. C. Onjuist. Deze SELECT-opdracht heeft als resultaat alle teamnummers (ook de dubbele) waar bij datum 2006-01-01 is ingevoerd. Dit wil zeggen T1, T1, T2. D. Onjuist. Deze opdracht heeft T1 en T3 als resultaat. © EXIN, DBSQLF 34/44 23 van 30 Drukorder bestelnr gidsnr datumbestelling aantalbesteld 501 1038 2005-02-01 400 502 1038 2005-04-01 300 503 2038 2005-02-01 600 504 1038 2005-05-01 200 505 2038 2005-06-28 300 506 2038 2005-09-01 100 SELECT gidsnr, COUNT (aantalbesteld) FROM drukorder WHERE datumbestelling < '2005-07-01' AND aantalbesteld > 200 GROUP BY gidsnr Deze SQL-opdracht geeft het volgende resultaat: Drukorder gidsnr count (aantalbesteld) 1038 x 2038 y Wat moet voor x en y worden ingevuld om het resultaat van de gegeven SQL-opdracht op de gegeven tabel DRUKORDER weer te geven? A. x=2 en y=2 B. x=3 en y=2 C. x=700 en y=900 D. x=900 en y=900 A. Juist. B. Onjuist. In het resultaat zijn ook aantalbesteld = 200 meegenomen. C. Onjuist. Deze uitkomst zou het geval zijn indien er SUM in plaats van COUNT was gebruikt. D. Onjuist. Deze uitkomst zou het geval zijn indien er SUM in plaats van COUNT was gebruikt én de voorwaarde 'aantal besteld > 200' beschreven was als 'aantal besteld > = 200'. © EXIN, DBSQLF 35/44 24 van 30 Gegeven zijn de volgende relaties: REISGIDS (gidsnr, titel, ingangsdatum, einddatum) REISPRODUCT (productnr, soortproduct, <gidsnr>, omschrijving, bestemming, aantal dagen, soortverblijf, soortvervoer, soortvermaak) Men wil met de opdracht CREATE TABLE de tabel REISPRODUCT creëren. De volgende onvolledige DDL-opdracht wordt hiervoor gebruikt: CREATE TABLE reisproduct ( soortproduct CHAR(30) NOT NULL, gidsnr INTEGER, omschrijving CHAR(30), bestemming CHAR(30), aantaldagen INTEGER, soortverblijf CHAR(20) NOT NULL, soortvervoer CHAR(20) NOT NULL, soortvermaak CHAR(20), ... ) Hoe moet de DDL-opdracht worden aangevuld om de tabel REISPRODUCT correct te creëren? A. productnr INTEGER NOT NULL, FOREIGN KEY(productnr, gidsnr) REFERENCES reisgids B. productnr INTEGER NOT NULL, PRIMARY KEY(productnr), FOREIGN KEY(gidsnr) REFERENCES reisgids C. PRIMARY KEY(productnr INTEGER), FOREIGN KEY(gidsnr) REFERENCES reisgids A. Onjuist. Productnr is primaire sleutel en niet de vreemde sleutel. Vreemde sleutel is gidsnr. B. Juist. Juiste syntaxis voor aangeven gegevenstype productnr: INTEGER en NOT NULL. Productnr is primaire sleutel en vreemde sleutel is gidsnr. C. Onjuist. Verkeerde syntaxis voor het weergeven van primaire sleutel en het weergeven gegevenstype voor productnr. © EXIN, DBSQLF 36/44 25 van 30 Bekijk het volgende relationele schema: REISGIDS (gidsnr, titel, ingangsdatum, einddatum) KLANT (klantnr, soortklant, naam, adres, postcode, woonplaats, telefoonnr, faxnr, emailadres, contactpersoon) GIDSAANVRAAG (<klantnr>, <gidsnr>, datumaanvraag, aantalgevraagd, datumverzending, aantalverzonden) De systeembeheerder wil de tabel GIDSAANVRAAG schonen. Hij wil met behulp van een SQLopdracht alle rijen, waarvan het aantal aangevraagd gelijk is aan het aantal verzonden, uit de tabel verwijderen. Welke SQL-opdracht levert het gewenste resultaat? A. DELETE FROM gidsaanvraag WHERE aantalgevraagd = aantalverzonden B. DELETE FROM gidsaanvraag WHERE klantnr IN (SELECT klantnr FROM gidsaanvraag WHERE aantalgevraagd = aantalverzonden) C. DELETE FROM gidsaanvraag WHERE gidsnr IN (SELECT gidsnr FROM gidsaanvraag WHERE aantalgevraagd = aantalverzonden) A. Juist. B. Onjuist. Door deze opdracht worden eerst de klanten geselecteerd waarvoor geldt dat aantalgevraagd gelijk is aan aantalverzonden. Vervolgens worden alle tupels van de geselecteerde klanten uit gidsaanvraag verwijderd. Hierin kunnen ook tupels zitten waar aantalgevraagd niet gelijk is aan aantalverzonden. C. Onjuist. Door deze opdracht worden eerst de gidsnr's geselecteerd waarvoor geldt dat aantalgevraagd gelijk is aan aantalverzonden. Vervolgens worden alle tupels van de geselecteerde gidsnr's uit gidsaanvraag verwijderd. Hierin kunnen ook tupels zitten waar aantalgevraagd niet gelijk is aan aantalverzonden. © EXIN, DBSQLF 37/44 26 van 30 Bekijk onderstaande tabel TARIEF: Tarief typehandeling bedrag controle 32 eenvlaksvulling 37 tweevlaksvulling 50 wortelkanaal 85 Bij de overgang naar de euro moest in de tabel TARIEF elk bedrag worden gedeeld door 2.2. Welke SQL-query leidt tot het gewenste resultaat? A. INSERT INTO bedrag VALUES ((32/2.2), (37/2.2), (50/2.2), (85/2.2)) B. INSERT INTO tarief VALUES ((32/2.2), (37/2.2), (50/2.2), (85/2.2)) C. UPDATE bedrag SET bedrag = bedrag/2.2 D. UPDATE tarief SET bedrag = bedrag/2.2 A. Onjuist. De tabel tarief moet doormiddel van een opdracht UPDATE tarief worden aangepast. Een INSERT opdracht voegt alleen rijen toe en brengt geen wijzigingen in de bestaande rijen aan. B. Onjuist. De tabel tarief moet doormiddel van een opdracht UPDATE tarief worden aangepast. Een INSERT opdracht voegt alleen rijen toe en brengt geen wijzigingen in de bestaande rijen aan. C. Onjuist. De tabel tarief moet doormiddel van een opdracht UPDATE op de tabel tarief worden aangepast. Bedrag is niet de naam van deze tabel. D. Juist. De tabel tarief moet doormiddel van de opdracht UPDATE tarief worden aangepast. Doormiddel van SET bedrag = bedrag/2.2 worden alle bedragen door 2.2 gedeeld. © EXIN, DBSQLF 38/44 27 van 30 Bekijk de volgende GRANT-opdracht: GRANT ALTER ON werknemer TO Piet Wat mag Piet volgens de GRANT-opdracht doen? A. nieuwe kolommen aan de tabel WERKNEMER toevoegen B. rijen aan de tabel WERKNEMER toevoegen C. waarden in rijen in de tabel WERKNEMER wijzigen A. Juist. De GRANT-opdracht geeft toestemming aan Piet om kolommen toe te voegen. Om rijen te mogen toevoegen wordt GRANT INSERT...... gebruikt. Om waarden in rijen te mogen wijzigen wordt GRANT UPDATE ....... gebruikt. B. Onjuist. De GRANT-opdracht geeft toestemming aan Piet om kolommen toe te voegen. Om rijen te mogen toevoegen wordt GRANT INSERT...... gebruikt. Om waarden in rijen te mogen wijzigen wordt GRANT UPDATE ....... gebruikt. C. Onjuist. De GRANT-opdracht geeft toestemming aan Piet om kolommen toe te voegen. Om rijen te mogen toevoegen wordt GRANT INSERT...... gebruikt. Om waarden in rijen te mogen wijzigen wordt GRANT UPDATE ....... gebruikt. © EXIN, DBSQLF 39/44 28 van 30 SELECT klas FROM klas WHERE leerlingaantal < 14 AND klas IN (SELECT klas FROM vak GROUP BY klas HAVING (SUM) lesaantal = 5) Wat is het resultaat als de gegeven SELECT-opdracht op de gegeven tabellen wordt toegepast? A. 1B 2B 2C B. 1B 2B 2C 3A C. 1B 2C D. 1B 2C 3A © EXIN, DBSQLF 40/44 A. Onjuist. In de WHERE wordt de voorwaarde gesteld dat de klassen minder leerlingen dan 14 moeten hebben. Alleen klas 1B, 2B en 2C voldoen aan deze voorwaarde. In de subquery worden alle klassen geselecteerd die na groepering een opgeteld aantal lesuren hebben van 5. Alleen klas 1B, 2C, 3A voldoen hieraan. De klassen die uiteindelijk worden geselecteerd moeten aan beide voorwaarden voldoen. Alleen klas 1B en 2C voldoen aan de voorwaarden. B. Onjuist. In de WHERE wordt de voorwaarde gesteld dat de klassen minder leerlingen dan 14 moeten hebben. Alleen klas 1B, 2B en 2C voldoen aan deze voorwaarde. In de subquery worden alle klassen geselecteerd die na groepering een opgeteld aantal lesuren hebben van 5. Alleen klas 1B, 2C, 3A voldoen hieraan. De klassen die uiteindelijk worden geselecteerd moeten aan beide voorwaarden voldoen. Alleen klas 1B en 2C voldoen aan de voorwaarden. C. Juist. In de WHERE wordt de voorwaarde gesteld dat de klassen minder leerlingen dan 14 moeten hebben. Alleen klas 1B, 2B en 2C voldoen aan deze voorwaarde. In de subquery worden alle klassen geselecteerd die na groepering een opgeteld aantal lesuren hebben van 5. Alleen klas 1B, 2C, 3A voldoen hieraan. De klassen die uiteindelijk worden geselecteerd moeten aan beide voorwaarden voldoen. Alleen klas 1B en 2C voldoen aan de voorwaarden. D. Onjuist. In de WHERE wordt de voorwaarde gesteld dat de klassen minder leerlingen dan 14 moeten hebben. Alleen klas 1B, 2B en 2C voldoen aan deze voorwaarde. In de subquery worden alle klassen geselecteerd die na groepering een opgeteld aantal lesuren hebben van 5. Alleen klas 1B, 2C, 3A voldoen hieraan. De klassen die uiteindelijk worden geselecteerd moeten aan beide voorwaarden voldoen. Alleen klas 1B en 2C voldoen aan de voorwaarden. © EXIN, DBSQLF 41/44 29 van 30 Kookboek kookboek recept calorieën Lekker Wokken Hete kip 400 Lekker Wokken Roerbak 300 Pasta en zo Macaroni Napoli 600 Pasta en zo Pesto 200 Pasta en zo Lasagne 400 Ovenschotels Lasagne 500 Lees de volgende informatiebehoefte: Geef alle gegevens van recepten waarvoor geldt dat het recept in vergelijking met de andere recepten in hetzelfde kookboek het maximaal aantal calorieën bevat. Gegeven is de volgende SELECT opdracht: SELECT * FROM kookboek WHERE calorieën = (SELECT MAX (calorieën) FROM kookboek GROUP BY kookboek) Kan door middel van de SELECT-opdracht de gevraagde informatie worden verkregen? A. ja B. nee A. Onjuist. De subquery levert drie waarden op, namelijk 400, 600 en 500. Als vergelijkingsoperator kunnen we dan geen = gebruiken. Bovendien vergelijk je zo het aantal calorieën zo met het maximum uit andere kookboeken wat in strijd is met de probleemstelling. B. Juist. Er moet gebruik gemaakt worden van een gecorreleerde subquery. Een juiste SELECTopdracht is: SELECT * FROM kookboek A WHERE calorieën = (SELECT MAX (calorieën) FROM kookboek WHERE kookboek = A.kookboek) De voorwaarde 'kookboek = A.kookboek' zorgt er voor dat het maximum alleen van het eigen kookboek wordt bepaald. © EXIN, DBSQLF 42/44 30 van 30 Bekijk de volgende tabel en informatiebehoefte: Circuit loper datum plaats punten 1 2005-01-01 1 100 2 2005-02-01 2 150 1 2005-02-01 1 200 3 2005-02-01 3 50 2 2005-04-01 1 300 Geef van de lopers die op plaats 1 hebben gestaan het aantal keren dat ze op plaats 1 hebben gestaan. Om de informatie te verkrijgen wordt gebruik gemaakt van de volgende SELECT-opdracht: SELECT loper, count(*) FROM circuit GROUP BY loper HAVING plaats = 1 Is de gegeven SELECT-opdracht juist? A. ja B. nee A. Onjuist. Een voorwaarde gesteld in een WHERE clausule wordt op een rij uitgevoerd. Een voorwaarde gesteld in de HAVING clausule wordt uitgevoerd per groep. Een juiste SELECT-opdracht is: SELECT loper, count(*) FROM circuit WHERE plaats = 1 GROUP BY loper Door de WHERE clausule krijg je alle rijen met lopers op plaats 1. Deze lopers worden per loper gegroepeerd, waarna het aantal rijen per groep geteld kan worden. B. Juist. Een voorwaarde gesteld in een WHERE clausule wordt op een rij uitgevoerd. Een voorwaarde gesteld in de HAVING clausule wordt uitgevoerd per groep. Een juiste SELECT-opdracht is: SELECT loper, count(*) FROM circuit WHERE plaats = 1 GROUP BY loper Door de WHERE clausule krijg je alle rijen met lopers op plaats 1. Deze lopers worden per loper gegroepeerd, waarna het aantal rijen per groep geteld kan worden. © EXIN, DBSQLF 43/44 Beoordeling Het maximaal te behalen punten voor dit examen is 30. Bij het behalen van 20 punten of meer bent u geslaagd. In alle andere gevallen bent u gezakt. In onderstaande tabel wordt bij het aantal punten het bijbehorende cijfer gegeven. gezakt behaalde aantal punten 0-8 9 - 11 12 - 14 15 - 16 17 - 19 © EXIN, DBSQLF cijfer 1 2 3 4 5 geslaagd behaalde aantal punten 20 – 22 23 – 24 25 – 27 28 – 29 30 cijfer 6 7 8 9 10 44/44