Week 3 BIRAIV03 Les B6 BIRAIV03 Les B6
naamtype A. JanssenLunare P. GerritsenGratea J. MolenaarTerra J.M. de WitTerra H.A.M. GeelsbergenLunare T. van DamSolis R. de GrootTerra P.G. ElbersGratea J. van WellSolis P. EigendonkLunare B. WagenaarSolis C. EradesTerra W. KonijnenburgTerra R.R. PaaltjensGratea H. van LaarLunare Intekening Voorbeeld Woningtype typeomschrijvinggepland_aantalprijs Lunarehalfvrijstaande villa Terravrijstaande villa Respectasingelwoning Gratealaanwoning Solisappartement
Vraag Hoeveel keer is per woningtype is ingetekend? naamtype A. JanssenLunare P. GerritsenGratea J. MolenaarTerra J.M. de WitTerra H.A.M. GeelsbergenLunare T. van DamSolis R. de GrootTerra P.G. ElbersGratea J. van WellSolis P. EigendonkLunare B. WagenaarSolis C. EradesTerra W. KonijnenburgTerra R.R. PaaltjensGratea H. van LaarLunare SELECT type, COUNT(*) FROM intekening GROUP BY type; typeExpr1001 Gratea3 Lunare4 Solis3 Terra5
Extra voorwaarde voor gegroepeerde tabel Op welke woningtypen is meer dan 3 keer ingetekend? SELECT type, COUNT(*) FROM intekening GROUP BY type HAVING COUNT(*) > 3; typeExpr1001 Lunare4 Terra5
Valkuil Op welke woningtypen is minder dan 4 keer ingetekend? SELECT type, COUNT(*) FROM intekening GROUP BY type HAVING COUNT(*) < 4; typeExpr1001 Gratea3 Solis3 Op "Respecta" is geen enkele keer ingetekend!
"Respecta" komt niet voor in intekening! SELECT type, COUNT(*) FROM intekening GROUP BY type; typeExpr1001 Gratea3 Lunare4 Solis3 Terra5 SELECT type FROM woningtype; type Lunare Terra Respecta Gratea Solis
Mogelijke oplossing SELECT type, COUNT(*) FROM intekening GROUP BY type UNION SELECT type, 0 FROM woningtype WHERE type NOT IN (SELECT type FROM intekening); typeExpr1001 Gratea3 Lunare4 Solis3 Terra5 typeExpr1001 Respecta0 typeExpr1001 Gratea3 Lunare4 Respecta0 Solis3 Terra5 + =
De oplossing typeExpr1001 Respecta0 Op welke woningtypen is minder dan 4 keer ingetekend? SELECT type, COUNT(*) FROM intekening GROUP BY type HAVING COUNT(*) < 4 UNION SELECT type, 0 FROM woningtype WHERE type NOT IN (SELECT type FROM intekening); typeExpr1001 Gratea3 Solis3 + = typeExpr1001 Gratea3 Respecta0 Solis3
Microsoft: opvatting over de join Woningtype naamtype A. JanssenLunare P. GerritsenGratea J. MolenaarTerra J.M. de WitTerra H.A.M. GeelsbergenLunare T. van DamSolis R. de GrootTerra P.G. ElbersGratea J. van WellSolis P. EigendonkLunare B. WagenaarSolis C. EradesTerra W. KonijnenburgTerra R.R. PaaltjensGratea H. van LaarLunare typeomschrijvinggepland_aantalprijs Lunarehalfvrijstaande villa Terravrijstaande villa Respectasingelwoning Gratealaanwoning Solisappartement Intekening
Microsoft: de inner join SELECT * FROM intekening INNER JOIN woningtype ON intekening.type = woningtype.type; naamintekening.typewoningtype.typeoms...gepl...prijs A. JanssenLunare hal H.A.M. GeelsbergenLunare hal P. EigendonkLunare hal H. van LaarLunare hal J. MolenaarTerra vrij J.M. de WitTerra vrij R. de GrootTerra vrij C. EradesTerra vrij SELECT * FROM intekening INNER JOIN woningtype ON intekening.type = woningtype.type;
Microsoft: is precies hetzelfde als... SELECT * FROM intekening INNER JOIN woningtype ON intekening.type = woningtype.type; naamintekening.typewoningtype.typeoms...gepl...prijs A. JanssenLunare hal H.A.M. GeelsbergenLunare hal P. EigendonkLunare hal H. van LaarLunare hal J. MolenaarTerra vrij J.M. de WitTerra vrij R. de GrootTerra vrij C. EradesTerra vrij SELECT * FROM intekening, woningtype WHERE intekening.type = woningtype.type;
Microsoft: de join verder uitgediept (1) aa p q r s u w tabel1 zz p r s t v w x tabel2 aazz pp rr ss ww SELECT * FROM tabel1 INNER JOIN tabel2 ON tabel1.aa = tabel2.zz;
Microsoft: de join verder uitgediept (2) tabel1 zz p r s t v w x tabel2 SELECT * FROM tabel1 LEFT OUTER JOIN tabel2 ON tabel1.aa = tabel2.zz; aazz pp q rr ss u ww aa p q r s u w
Microsoft: de join verder uitgediept (3) tabel1 zz p r s t v w x tabel2 SELECT * FROM tabel1 RIGHT OUTER JOIN tabel2 ON tabel1.aa = tabel2.zz; aazz pp rr ss t v ww x aa p q r s u w
Microsoft: de join verder uitgediept (4) tabel3tabel4 SELECT * FROM tabel3 INNER JOIN tabel4 ON tabel3.kol1 = tabel4.kol1; kol1kol2 aaap anoot bmies cwim eaap kol1kol2 aede buden bbest cvuren cuden dtiel tabel3.kol1tabel3.kol2tabel4.kol1tabel4.kol2 aaapaede anootaede bmiesbbest bmiesbuden cwimcuden cwimcvuren
Microsoft: de join verder uitgediept (5) tabel3tabel4 SELECT * FROM tabel3 LEFT OUTER JOIN tabel4 ON tabel3.kol1 = tabel4.kol1; kol1kol2 aaap anoot bmies cwim eaap kol1kol2 aede buden bbest cvuren cuden dtiel tabel3.kol1tabel3.kol2tabel4.kol1tabel4.kol2 aaapaede anootaede bmiesbbest bmiesbuden cwimcuden cwimcvuren eaap
Microsoft: de join verder uitgediept (6) tabel3tabel4 SELECT * FROM tabel3 RIGHT OUTER JOIN tabel4 ON tabel3.kol1 = tabel4.kol1; kol1kol2 aaap anoot bmies cwim eaap kol1kol2 aede buden bbest cvuren cuden dtiel tabel3.kol1tabel3.kol2tabel4.kol1tabel4.kol2 anootaede aaapaede bmiesbuden bmiesbbest cwimcvuren cwimcuden dtiel
Microsoft: de join verder uitgediept (7) tabel3tabel4 kol1kol2 aaap anoot bmies cwim eaap kol1kol2 aede buden bbest cvuren cuden dtiel In dit voorbeeld is geen sprake van REFERENTIËLE INTEGRITEIT
Terug naar FASCINATIO (1) Woningtype naamtype A. JanssenLunare P. GerritsenGratea J. MolenaarTerra J.M. de WitTerra H.A.M. GeelsbergenLunare T. van DamSolis R. de GrootTerra P.G. ElbersGratea J. van WellSolis P. EigendonkLunare B. WagenaarSolis C. EradesTerra W. KonijnenburgTerra R.R. PaaltjensGratea H. van LaarLunare typeomschrijvinggepland_aantalprijs Lunarehalfvrijstaande villa Terravrijstaande villa Respectasingelwoning Gratealaanwoning Solisappartement Intekening
Terug naar FASCINATIO (2) SELECT woningtype.type, intekening.type, naam FROM woningtype LEFT OUTER JOIN intekening ON woningtype.type = intekening.type;
Terug naar FASCINATIO (3) woningtype.typeintekening.typenaam Lunare A. Janssen Lunare H.A.M. Geelsbergen Lunare P. Eigendonk Lunare H. van Laar Terra J. Molenaar Terra J.M. de Wit Terra R. de Groot Terra C. Erades Terra W. Konijnenburg Respecta Gratea P. Gerritsen Gratea P.G. Elbers Gratea R.R. Paaltjens Solis T. van Dam ---
Terug naar FASCINATIO (4) SELECT woningtype.type, COUNT(*) FROM woningtype LEFT OUTER JOIN intekening ON woningtype.type = intekening.type GROUP BY woningtype.type; typeExpr1001 Gratea3 Lunare4 Respecta1 Solis3 Terra5
Terug naar FASCINATIO (5) SELECT woningtype.type, COUNT(naam) FROM woningtype LEFT OUTER JOIN intekening ON woningtype.type = intekening.type GROUP BY woningtype.type; typeExpr1001 Gratea3 Lunare4 Respecta0 Solis3 Terra5
Terug naar FASCINATIO (6) SELECT woningtype.type, COUNT(naam) FROM woningtype LEFT OUTER JOIN intekening ON woningtype.type = intekening.type GROUP BY woningtype.type HAVING COUNT(naam) < 4; typeExpr1001 Gratea3 Respecta0 Solis3
Ook: SELECT a.type, COUNT(naam) FROM woningtype a LEFT OUTER JOIN intekening b ON a.type = b.type GROUP BY a.type HAVING COUNT(naam) < 4; typeExpr1001 Gratea3 Respecta0 Solis3
Uiteindelijk: SELECT a.type FROM woningtype a LEFT OUTER JOIN intekening b ON a.type = b.type GROUP BY a.type HAVING COUNT(naam) < 4; type Gratea Respecta Solis
Aandachtspunten: Betreft het een left outer join of right outer join ? Op welke kolom groeperen ? Welke kolom aggregeren (tellen, optellen) ?
Opdracht: De decaan wil een gesprek met alle BI'studenten die tot nu toe minder dan 2 studiepunten behaald hebben. Welke studenten komen voor zo'n gesprek in aanmerking (nummers en namen)? StudentnrNaamVoorlettersGebdatGeslachtOpl HendriksO23 jan 1985mI HaringaFW25 okt 1986vBI WillemsenT16 mrt 1985mBI --- ModCodeNaamSpt ARCHArchitectuur1 INFA01Informatiekunde1 INFA02Informatiekunde1 --- StudentnrModCodeDatumCijfer INFA0117 nov INFA0117 nov INFA0102 jul student resultaat moduul