11 KiB
title | date | draft |
---|---|---|
SQL notities | 2023-06-13 | false |
SQL opdrachten & antwoorden
Onderdeel Een
Welke leerlingen hebben de achternaam Dijkstra ? (geef de voornaam en de achternaam)
SELECT
VOORNAAM, ACHTERNAAM
FROM
AUTEURS;
Welke schrijvers zijn na 1900 geboren ? (geef de voornaam, achternaam en geboortejaar)
SELECT
VOORNAAM, ACHTERNAAM, GEB_JAAR
FROM
AUTEURS
WHERE
GEB_JAAR < 1900;
Welke boeken vallen niet in de rubriek Nederlands ?
SELECT
TITEL, RUBRIEK
FROM
BOEKEN
WHERE
RUBRIEK != 'Nederlands';
Welke boeken zijn er van Gerard Reve in de bibliotheek (Er zijn twee SQL-query's nodig!)
SELECT
BOEKEN.*
FROM
BOEKEN
INNER JOIN
AUTEURS ON BOEKEN.AUTEURNR = AUTEURS.AUTEURNR
WHERE
AUTEURS.VOORNAAM = 'Gerard'
AND AUTEURS.ACHTERNAAM = 'Reve';
Welke leerlingen hebben een boete van meer dan twee euro gehad ?
SELECT DISTINCT
VOORNAAM, ACHTERNAAM
FROM
LEERLINGEN
INNER JOIN
UITLENINGEN ON LEERLINGEN.LLNR = UITLENINGEN.LLNR
WHERE
UITLENINGEN.BOETE > 2;
Onderdeel Twee
Welke leerlingen hebben de lettercombinatie 'an' in hun naam ? (geef de voornaam en de achternaam)
SELECT
VOORNAAM, ACHTERNAAM
FROM
LEERLINGEN
WHERE
VOORNAAM LIKE '%an%'
OR TUSSENVOEGSEL LIKE '%an'
OR ACHTERNAAM LIKE '%an'
Welke leerlingen uit klas 6 (dus 6a of 6b) wonen in Utrecht aan de Julianaweg ? (geef de voornaam, achternaam, klas, adres en woonplaats)
SELECT
VOORNAAM, ACHTERNAAM, KLAS, STRAAT, HUISNUMMER, PLAATS
FROM
LEERLINGEN
WHERE
KLAS LIKE '6%';
Welke leerlingen uit de vierde klas zijn na 1 juni 1991 geboren ? (geef de voornaam, achternaam, klas, geboortedatum)
SELECT
VOORNAAM, ACHTERNAAM, KLAS, GEB_DATUM
FROM
LEERLINGEN
WHERE
KLAS LIKE '4%'
AND GEB_DATUM > '1991-06-01'
N.B. Een datum moet je in Access (als je met SQL werkt) tussen hekjes # typen, dus 1 juni 1991 tik je in als #1-jun-1991#
Welke leerlingen wonen in Bunnik of Schalkwijk ? (geef de voornaam, achternaam, adres en woonplaats))
SELECT
VOORNAAM,ACHTERNAAM,STRAAT,HUISNUMMER,PLAATS
FROM
LEERLINGEN
WHERE
PLAATS = 'Bunnik'
OR PLAATS = 'Schalkwijk'
Komt de schrijver William Somerset Maugham voor bij de auteurs ?
SELECT exists (
SELECT *
FROM
AUTEURS
WHERE
VOORNAAM = 'William Somerset'
AND ACHTERNAAM = 'Maugham' ) as resultaat;
Onderdeel drie
Wat is de grootste boete, die iemand heeft moeten betalen ?
SELECT
MAX(boete)
FROM
UITLENINGEN
Wat is de gemiddelde boete die werd opgelegd, gerekend over alle uitleningen ?
SELECT
AVG(boete)
FROM
UITLENINGEN
Wat is de geboortedatum van de oudste leerling? En wat van de jongste ?
SELECT
min(GEB_DATUM), max(GEB_DATUM)
FROM
LEERLINGEN
Hoeveel boeken zijn er in reparatie ?
SELECT
COUNT(*)
FROM
EXEMPLAREN
WHERE
STATUS = 'in reparatie'
Onderdeel vier
Maak een lijstje van aantallen leerlingen per woonplaats (dus een lijstje van alle plaatsen met daarachter het aantal leerlingen uit die plaats)
SELECT
plaats, COUNT(PLAATS)
FROM
LEERLINGEN
GROUP BY PLAATS
Maak een lijstje waarin het aantal jongens en het aantal meisjes staat
SELECT
GESLACHT, COUNT(GESLACHT)
FROM
LEERLINGEN
GROUP BY GESLACHT
Maak een overzicht van de aantallen jongens en meisje per klas.
SELECT
KLAS, GESLACHT, COUNT(*) AS AANTAL
FROM
LEERLINGEN
GROUP BY KLAS , GESLACHT;
Maak een lijstje waarin het aantal boeken per rubriek staat.
SELECT
RUBRIEK, COUNT(*) AS AANTAL
FROM
BOEKEN
GROUP BY RUBRIEK;
Onderdeel vijf
Wie is de oudste leerling in de database (geef voornaam, achternaam, geboortedatum)
SELECT
VOORNAAM, ACHTERNAAM, GEB_DATUM
FROM
LEERLINGEN
WHERE
GEB_DATUM = (SELECT
MAX(GEB_DATUM)
FROM
LEERLINGEN);
Kun je IN DE QUERY VAN vraag a het beste WHERE GEB_DATUM = gebruiken of WHERE GEB_DATUM IN ? Leg uit waarom.
Je kan het beste WHERE GEB_DATUM = gebruiken omdat IN gebruikt wordt om meerder waardes te kunnen gebruiken, de oudste student is maar een leeftijd.
Welke boeken in de rubriek Nederlands zijn in reparatie ? (geef de titel en de rubriek)
SELECT
*
FROM
EXEMPLAREN
INNER JOIN
BOEKEN ON EXEMPLAREN.BOEKNR = BOEKEN.BOEKNR
WHERE
STATUS = 'in reparatie'
AND RUBRIEK = 'Nederlands'
Van welke auteurs werden er boeken gereserveerd ? (geef de voornaam en achternaam)
SELECT DISTINCT
A.VOORNAAM, A.ACHTERNAAM
FROM
AUTEURS A
JOIN
BOEKEN B ON A.AUTEURNR = B.AUTEURNR
JOIN
RESERVERINGEN R ON B.BOEKNR = R.BOEKNR
Er is een exemplaar van "Hoe vreselijk is dit alles" van Marten Toonder beschadigd. Welke leerling kan dat op zijn geweten hebben ?
Boek bestaat niet
Onderdeel zes
Maak een lijst van auteurs en de titels van hun boeken, die in de bibliotheek zijn (voornaam en achternaam van de auteur, titel van het boek)
SELECT
AUTEURS.VOORNAAM, AUTEURS.ACHTERNAAM, BOEKEN.TITEL
FROM
AUTEURS
JOIN
BOEKEN ON AUTEURS.AUTEURNR = BOEKEN.AUTEURNR;
Maak een lijst van leerlingen en de boetes die ze hebben betaald (alleen degenen die echt een boete hebben gehad, dus als er in de kolom boete 0,00 staat moet die niet worden afgedrukt)
SELECT
LEERLINGEN.VOORNAAM,
LEERLINGEN.ACHTERNAAM,
UITLENINGEN.BOETE
FROM
LEERLINGEN
JOIN
UITLENINGEN ON LEERLINGEN.LLNR = UITLENINGEN.LLNR
WHERE
UITLENINGEN.BOETE;
Welke boeken zijn er van schrijvers uit de negentiende eeuw (geef de titel, de voornaam en achternaam en geboortedatum van de auteur)
SELECT
BOEKEN.TITEL,
AUTEURS.VOORNAAM,
AUTEURS.ACHTERNAAM,
AUTEURS.GEB_JAAR
FROM
AUTEURS
JOIN
BOEKEN ON AUTEURS.AUTEURNR = BOEKEN.AUTEURNR
WHERE
AUTEURS.GEB_JAAR >= 1801
AND AUTEURS.GEB_JAAR <= 1900;
Van welke auteurs zijn er boeken in reparatie ? (geef de titel en de status van het boek, de voornaam en achternaam van de auteur)
SELECT
BOEKEN.TITEL,
EXEMPLAREN.STATUS,
AUTEURS.VOORNAAM,
AUTEURS.ACHTERNAAM
FROM
AUTEURS
JOIN
BOEKEN ON AUTEURS.AUTEURNR = BOEKEN.AUTEURNR
JOIN
EXEMPLAREN ON BOEKEN.BOEKNR = EXEMPLAREN.BOEKNR
WHERE
EXEMPLAREN.STATUS = 'in reparatie';
Maak een lijstje van de boeken uit de categorie Nederlands, die zijn uitgeleend aan leerlingen uit de zesde klas (geef de titel van het boek en de categorie, en de voornaam en achternaam en klas van de leerling)
SELECT
BOEKEN.TITEL,
BOEKEN.RUBRIEK,
LEERLINGEN.VOORNAAM,
LEERLINGEN.ACHTERNAAM,
LEERLINGEN.KLAS
FROM
BOEKEN
JOIN
UITLENINGEN ON BOEKEN.BOEKNR = UITLENINGEN.BOEKNR
JOIN
LEERLINGEN ON UITLENINGEN.LLNR = LEERLINGEN.LLNR
WHERE
BOEKEN.RUBRIEK = 'Nederlands'
AND LEERLINGEN.KLAS LIKE '6%';
Onderdeel zeven
Maak een lijstje van de plaatsen waar minstens tien leerlingen wonen (geef de plaatsnaam en het aantal leerlingen uit die plaats)
SELECT
PLAATS, COUNT(*) AS AANTAL_LEERLINGEN
FROM
LEERLINGEN
GROUP BY PLAATS
HAVING COUNT(*) >= 10;
Maak een lijstje van de auteurs, waarvan meer dan vijf boektitels aanwezig zijn (geef de voornaam, achternaam, en aantal boektitels)
SELECT
AUTEURS.VOORNAAM,
AUTEURS.ACHTERNAAM,
COUNT(BOEKEN.BOEKNR) AS AANTAL_BOEKTITELS
FROM
AUTEURS
JOIN
BOEKEN ON AUTEURS.AUTEURNR = BOEKEN.AUTEURNR
GROUP BY AUTEURS.AUTEURNR , AUTEURS.VOORNAAM , AUTEURS.ACHTERNAAM
HAVING COUNT(BOEKEN.BOEKNR) > 5;
Maak een lijstje van de boeken, die meer dan tien keer zijn uitgeleend (geef de titel en het aantal keren uitgeleend)
SELECT
BOEKEN.TITEL,
COUNT(UITLENINGEN.BOEKNR) AS AANTAL_UITLENINGEN
FROM
BOEKEN
JOIN
UITLENINGEN ON BOEKEN.BOEKNR = UITLENINGEN.BOEKNR
GROUP BY BOEKEN.BOEKNR , BOEKEN.TITEL
HAVING COUNT(UITLENINGEN.BOEKNR) > 10;
Onderdeel acht
Maak een lijstje met alle openstaande uitleningen (geef titel boek, naam auteur, naam en klas van leerling). Ga er daarbij vanuit dat het vandaag 3 maart 2006 is.
SELECT
BOEKEN.TITEL,
AUTEURS.ACHTERNAAM,
AUTEURS.VOORNAAM,
LEERLINGEN.ACHTERNAAM,
LEERLINGEN.VOORNAAM,
LEERLINGEN.KLAS
FROM
UITLENINGEN
JOIN
BOEKEN ON UITLENINGEN.BOEKNR = BOEKEN.BOEKNR
JOIN
AUTEURS ON BOEKEN.AUTEURNR = AUTEURS.AUTEURNR
JOIN
LEERLINGEN ON UITLENINGEN.LLNR = LEERLINGEN.LLNR
WHERE
UITLENINGEN.DATUM_TERUG IS NULL
Er komt iemand in de bibliotheek die het boek Giph! van Ronald Giphart wil lenen. Ga met een query na of er een uitleenbaar exemplaar is dat aan hem uitgeleend kan worden.
SELECT
*
FROM
BOEKEN
JOIN
EXEMPLAREN ON BOEKEN.BOEKNR = EXEMPLAREN.BOEKNR
WHERE
BOEKEN.TITEL = 'Giph!'
AND BOEKEN.AUTEURNR = (SELECT
AUTEURNR
FROM
AUTEURS
WHERE
ACHTERNAAM = 'Giphart'
AND VOORNAAM = 'Ronald')
AND EXEMPLAREN.UITLEENBAAR = 'J';
Maak een lijst van alle uitgeleende boeken waarvan de uitleentermijn verstreken is. Ga er daarbij vanuit dat het vandaag 3 maart 2006 is, en dat de uitleentermijn drie weken is.
Een leerling brengt het boek Figuranten van Arnon Grunberg, met boeknummer 66, terug op 3 maart 2006. Schrijf een query die nagaat of er een reservering voor dat boek is en welke leerling in dat geval die reservering gedaan heeft.
SELECT
LEERLINGEN.VOORNAAM, LEERLINGEN.ACHTERNAAM
FROM
RESERVERINGEN
JOIN
LEERLINGEN ON RESERVERINGEN.LLNR = LEERLINGEN.LLNR
WHERE
RESERVERINGEN.BOEKNR = 66
and RESERVERINGEN.STATUS = "open"
Maak een lijstje van boeken, met titel en auteur, waarin per boek is aangegeven hoe vaak het is uitgeleend.
SELECT
BOEKEN.TITEL,
AUTEURS.VOORNAAM,
AUTEURS.ACHTERNAAM,
COUNT(UITLENINGEN.BOEKNR) AS AANTAL_UITLENINGEN
FROM
BOEKEN
JOIN
AUTEURS ON BOEKEN.AUTEURNR = AUTEURS.AUTEURNR
LEFT JOIN
UITLENINGEN ON BOEKEN.BOEKNR = UITLENINGEN.BOEKNR
GROUP BY BOEKEN.BOEKNR , BOEKEN.TITEL , AUTEURS.VOORNAAM , AUTEURS.ACHTERNAAM;
Maak een lijstje van de boeken, die nog nooit zijn uitgeleend (geef alleen de titels)
SELECT
BOEKEN.TITEL
FROM
BOEKEN
LEFT JOIN
UITLENINGEN ON BOEKEN.BOEKNR = UITLENINGEN.BOEKNR
WHERE
UITLENINGEN.BOEKNR IS NULL;
Welke leerlingen hebben nog nooit een nederlands boek geleend (geef voornaam en achternaam)
SELECT DISTINCT
LEERLINGEN.VOORNAAM, LEERLINGEN.ACHTERNAAM
FROM
LEERLINGEN
LEFT JOIN
UITLENINGEN ON LEERLINGEN.LLNR = UITLENINGEN.LLNR
LEFT JOIN
BOEKEN ON UITLENINGEN.BOEKNR = BOEKEN.BOEKNR
WHERE
BOEKEN.RUBRIEK != 'Nederlands'
Welke leerlingen hebben in totaal meer dan € 5,- aan boete betaald (geef voornaam en achternaam en de totale hoeveelheid boete, denk er om dat de leerlingen vaker dan één keer boete kunnen krijgen!)
SELECT
LEERLINGEN.VOORNAAM,
LEERLINGEN.ACHTERNAAM,
SUM(UITLENINGEN.BOETE) AS TOTAAL_BOETE
FROM
LEERLINGEN
JOIN
UITLENINGEN ON LEERLINGEN.LLNR = UITLENINGEN.LLNR
GROUP BY LEERLINGEN.LLNR , LEERLINGEN.VOORNAAM , LEERLINGEN.ACHTERNAAM
HAVING SUM(UITLENINGEN.BOETE) > 5.00;