diff options
| author | lonkaars <loek@pipeframe.xyz> | 2022-09-24 17:34:04 +0200 | 
|---|---|---|
| committer | lonkaars <loek@pipeframe.xyz> | 2022-09-24 17:34:04 +0200 | 
| commit | efc70a4e70a8afe5144abba9239f38a0c6a23d1e (patch) | |
| tree | afefec8b797566c1e2c4579c477ca4e316ca0892 | |
| parent | 8b019f4946141950000b39196e36ce1e72d0f3ff (diff) | |
alle huiswerk 6.x klaar
| -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. + |