aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--huiswerk.md190
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.
+