Relationele Databases Hoofdstuk 10 Deel 2 Blz.: 75 t/m 89
Microsoft Access & SQL Een Query binnen een Query…. SUBQUERY Voorbeeld uit boek: 1e.: Wat is de maximale boete die betaald moet worden 2e.: Welke leerlingen moeten die boete betalen? Samen gevat: Welke leerlingen betalen de hoogste boete???
Microsoft Access & SQL Deze twee queries gaan we combineren tot een query Deze twee queries gaan we combineren tot een query We gaan eerst de maximale boete uitzoeken SELECT MAX (BOETE) FROM UITLENINGEN Dan zoeken we uit welk LLNR uit de tabel UITLENINGEN bij die MAX(BOETE) hoort. Stel: MAX(BOETE) = 4.00 SELECT LLNR FROM UITLENINGEN WHERE BOETE = 4.00
Maar nu weet ik alleen het LLNR en Microsoft Access & SQL Dit heet een SUBQUERY SELECT LLNR Hoe moet je de Query met Subqueries zo uitbreiden dat i.p.v. LLNR de naam en klas van de leerlingen te zien zijn FROM UITLENINGEN WHERE BOETE = ( SELECT MAX (BOETE) FROM UITLENINGEN ) Maar nu weet ik alleen het LLNR en nog niet de namen
Microsoft Access & SQL SELECT NAAM, KLAS FROM LEERLINGEN WHERE LLNR IN ( SELECT LLNR FROM UITLENING WHERE BOETE = ( SELECT MAX(BOETE) FROM UITLENINGEN ) )
Microsoft Access & SQL Tabellen combineren: Bedenk nu wat hiervan het resultaat zal zijn Tabel 1 Tabel 2 Pieters Schiedam Goosens Breda Jansen Rotterdam Grieken Oosterhout van Dijk Breda Geerts Schiedam Combinatie van deze twee tabellen: SELECT * FROM Tabel 1, Tabel 2
Dus niet zo maar alles (*) met elkaar combineren Microsoft Access & SQL Het resultaat van deze Query is: Pieters Schiedam Goosens Breda Jansens Rotterdam Goosens Breda Dus een combinatie van 2 tabellen met 110 en 230 rijen geeft een tabel van 110 x 230 = 25.300 rijen van Dijk Breda Goosens Breda Pieters Schiedam Grieken Oosterhout Jansens Rotterdam Grieken Oosterhout van Dijk Breda Grieken Oosterhout Pieters Schiedam Geerts Schiedam Jansens Rotterdam Geerts Schiedam van Dijk Breda Geerts Schiedam Dus een combinatie van 2 tabellen met elk 3 rijen geeft een tabel van 3 x 3 = 9 rijen
Microsoft Access & SQL Groeperen met voorwaarden: GROUP BY: Hiermee kun je de rijen van een kolom indelen in groepen, die dezelfde gegevens in een kolom hebben. Die kolom (of kolommen) geef je achter GROUP BY op. Bij SELECT heb je dezelfde kolommen als achter GROUP BY gezet.
Microsoft Access & SQL Nu kun je aan GROUP BY een extra voorwaarde stellen! HAVING Voorbeeld in boek op Blz.: 83
Hier wordt de voorwaarde gesteld waaraan de groepjes die bij GROUP BY gemaakt worden, moeten voldoen Microsoft Access & SQL SELECT AUTEURS.NAAM, BOEKEN.TITEL COUNT(EXEMPLAARNR) FROM AUTTEURS, BOEKEN, EXEMPLAREN WHERE AUTEURS.AUTEURNR = BOEKEN.BOEKNR AND EXEMPLAAR.BOEKNR = BOEKEN.BEKNR GROUP BY BOEKEN.TITEL HAVING COUNT(EXEMPLAARNR) >= 2