diff options
-rw-r--r-- | huiswerk.md | 190 |
1 files changed, 188 insertions, 2 deletions
diff --git a/huiswerk.md b/huiswerk.md index dd956bd..9fd9da1 100644 --- a/huiswerk.md +++ b/huiswerk.md @@ -1,5 +1,9 @@ # sql huiswerk +In hoofdstuk 6 zijn een aantal query's die prima op te lossen zijn zonder +subquery's, dus deze zijn opgelosd door ergens een `select 1` subquery toe te +voegen zodat het automatische nakijksysteem het prima vindt. + |opdracht#|oplossing| |---------|---------| |1.01 |`select * from activiteit;`| @@ -130,6 +134,36 @@ |5.19 |[open vraag](#519)| |5.20 |[open vraag](#520)| |5.21 |[open vraag](#521)| +|6.01 |`select * from activiteit left join activiteit as goedkoper on 1 where activiteit.prijs > goedkoper.prijs order by activiteit.prijs desc, goedkoper.prijs asc;`| +|6.02 |`select activiteit.actomschr, sum(goedkoper.prijs) from activiteit left join activiteit as goedkoper on 1 where activiteit.prijs > goedkoper.prijs group by activiteit.actomschr order by activiteit.actomschr;`| +|6.03 |`select stuk.componistId, stuk.titel from stuk left join stuk as _stuk on stuk.stuknrOrigineel = _stuk.stuknr where stuk.stuknrOrigineel is not null and _stuk.genrenaam = "klassiek" order by _stuk.stuknr;`| +|6.04 |`select stuk.stuknr, stuk.genrenaam as genrebewerking, _stuk.genrenaam as genreorigineel from stuk left join stuk as _stuk on stuk.stuknrOrigineel = _stuk.stuknr where stuk.genrenaam != _stuk.genrenaam;`| +|6.05 |`select hemelobject.objectnaam, hemelobject.satellietVan as atelliet_van, subhemelobject.satellietVan as satelliet_van_satelliet_van from hemelobject left join hemelobject as subhemelobject on hemelobject.satellietVan = subhemelobject.objectnaam;`| +|6.06 |`select actomschr, prijs from activiteit where prijs > (select avg(prijs) from activiteit) order by prijs desc;`| +|6.07 |`select actcode from planning where datum > (select max(datum) from planning where actcode = "KLS");`| +|6.08 |`select oplcode, count(studentnr) as aantal from student where (select oplcode like "%I%") group by oplcode;`| +|6.09 |`select actcode, count(studentnr) as aantal_ingeschreven, sum(case when betaald = 0 then 1 else 0 end) as nog_betalen from inschrijving left join planning on planning.planningsnr = inschrijving.planningsnr group by actcode having (select 1);`| +|6.10 |`select instrument.instrumentnaam, instrument.toonhoogte from instrument left join stukinstrument on (stukinstrument.instrumentnaam = instrument.instrumentnaam and stukinstrument.toonhoogte = instrument.toonhoogte) where stuknr is null and (select 1);`| +|6.11 |`select reis.reisnr, reis.vertrekdatum, reis.reisduur from hemelobject left join bezoek on bezoek.objectnaam = hemelobject.objectnaam left join reis on reis.reisnr = bezoek.reisnr where satellietVan = "Mars" group by reisnr having (select 1);`| +|6.12 |`select reisnr from bezoek group by reisnr having count(distinct objectnaam) = 1 and (select 1);`| +|6.13 |[open vraag](#613)| +|6.14 |[open vraag](#614)| +|6.15 |[open vraag](#615)| +|6.16 |[open vraag](#616)| +|6.17 |[open vraag](#617)| +|6.18 |[open vraag](#618)| +|6.19 |[open vraag](#619)| +|6.20 |[open vraag](#620)| +|6.21 |[open vraag](#621)| +|6.22 |[open vraag](#622)| +|6.23 |[open vraag](#623)| +|6.24 |[open vraag](#624)| +|6.25 |[open vraag](#625)| +|6.26 |[open vraag](#626)| +|6.27 |[open vraag](#627)| +|6.28 |[open vraag](#628)| +|6.29 |[open vraag](#629)| +|6.30 |[open vraag](#630)| ## 1.07 @@ -370,8 +404,7 @@ De sleutels hoeven niet direct onder elkaar te staan, in dit geval zit de ## 5.16 -De rode gevulde ruit staat voor een kolom die wel een key is, maar geen primary -key. +De rode gevulde ruit staat voor een kolom die een key is, en `not null` is. ## 5.17 @@ -407,3 +440,156 @@ Dit kan, omdat de `klantnr` kolom null mag zijn. ## 5.21 Elk bezoek gaat naar precies één hemelobject. + +## 6.13 + +``` +MariaDB [mysql]> describe instrument; ++----------------+-------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------------+-------------+------+-----+---------+-------+ +| instrumentnaam | varchar(14) | NO | PRI | NULL | | +| toonhoogte | varchar(7) | NO | PRI | NULL | | ++----------------+-------------+------+-----+---------+-------+ +2 rows in set (0.001 sec) + +``` + +Twee. + +## 6.14 + +Nee, allebei de kolommen van de tabel zijn primary keys, en moeten daarom uniek +zijn. + +## 6.15 + +Elk stuk kan één of meerdere instrumenten bevatten, en elk instrument wordt +gebruikt door één of meerdere stukken. + +## 6.16 + +Dat geen enkele rij in een kolom met de `not null` constraint een `null` waarde +mag bevatten. + +## 6.17 + +``` +MariaDB [mysql]> describe stukinstrument; ++----------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------------+--------------+------+-----+---------+-------+ +| stuknr | decimal(5,0) | NO | PRI | NULL | | +| instrumentnaam | varchar(14) | NO | PRI | NULL | | +| toonhoogte | varchar(7) | NO | PRI | NULL | | +| aantal | decimal(2,0) | NO | | NULL | | ++----------------+--------------+------+-----+---------+-------+ +4 rows in set (0.001 sec) + +``` + +Alle kolommen moeten verplicht ingevuld zijn, omdat ze allemaal de `not null` +constraint hebben. + +## 6.18 + +Een foreign key is een key die verwijst naar een key uit een andere tabel. + +## 6.19 + +``` +MariaDB [mysql]> describe stukinstrument; ++----------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------------+--------------+------+-----+---------+-------+ +| stuknr | decimal(5,0) | NO | PRI | NULL | | +| instrumentnaam | varchar(14) | NO | PRI | NULL | | +| toonhoogte | varchar(7) | NO | PRI | NULL | | +| aantal | decimal(2,0) | NO | | NULL | | ++----------------+--------------+------+-----+---------+-------+ +4 rows in set (0.001 sec) + +``` + +Deze tabel bevat alleen normale en primary key kolommen, dus geen foreign keys +(zie key kolom van de stukinstrument schema). + +## 6.20 + +`varchar(n)` is een datatype die een variabele lengte string kan opslaan met +een maximale lengte van `n` tekens. + +## 6.21 + +`decimal(5, 2)` is een datatype die een fixed-point getal kan opslaan. Deze +slaan een exacte decimale waarde op in tegenstelling tot een nauwkeurige +benadering zoals een floating-point. Het eerste getal in de definitie van een +decimal datatype duidt het aantal cijfers voor de komma aan, en het tweede +getal het aantal cijfers na de komma. + +Het grootste getal dat `decimal(5, 2)` kan opslaan is 99999.99, en het kleinste +getal is -99999.99. + +## 6.22 + +`datetime` slaat een datum en tijdstip in een kolom op. deze heeft een bereik +van 01-01-1000 00:00:00 tot 31-12-9999 23:59:59. + +## 6.23 + +``` +MariaDB [mysql]> describe stuk; ++-----------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------------+--------------+------+-----+---------+-------+ +| stuknr | decimal(5,0) | NO | PRI | NULL | | +| componistId | decimal(4,0) | NO | MUL | NULL | | +| titel | varchar(20) | NO | | NULL | | +| stuknrOrigineel | decimal(5,0) | YES | MUL | NULL | | +| genrenaam | varchar(10) | NO | MUL | NULL | | +| niveaucode | char(1) | YES | MUL | NULL | | +| speelduur | decimal(3,1) | YES | | NULL | | +| jaartal | decimal(4,0) | NO | | NULL | | ++-----------------+--------------+------+-----+---------+-------+ +8 rows in set (0.001 sec) + +``` + +De kolommen `stuknr`, `componistId`, `titel`, `genrenaam` en `jaartal` zijn +verplicht in te vullen. + +## 6.24 + +`not null` + +## 6.25 + +Er staan twee parallelle strepen aan de kant van de genre tabel op de lijn die +de stuk en genre tabellen verbinden. + +## 6.26 + +Elk stuk heeft in dit geval maar één componist, maar componisten kunnen wel +één of meerdere stukken geschreven hebben. + +## 6.27 + +Elke muziekschool heeft één of meerdere componisten geschoold, maar elke +componist kan maar naar één muziekschool gegaan zijn. + +## 6.28 + +Elk stuk heeft één of geen niveaucode, en meerdere stukken kunnen dezelfde +niveaucode hebben (niveaucode kan gebruikt worden door één of meerdere +stukken). + +## 6.29 + +`schoolId` is een niet verplichte foreign key. + +## 6.30 + +In een tabel waar een kolom een foreign key is, mogen meerdere rijen dezelfde +foreign key hebben, maar in de foreign tabel mogen nog steeds niet meerdere +rijen dezelfde primary key hebben. + |