De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G319 4 4 HomePage: te bereiken via

Verwante presentaties


Presentatie over: "Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G319 4 4 HomePage: te bereiken via"— Transcript van de presentatie:

1 Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G HomePage: te bereiken via

2 Groeperen van resultaten (1/2) (GROUP BY) 4 GROUP BY wordt gebruikt voor het groeperen van resultaten 4 Wanneer een GROUP BY wordt gebruikt, moet elk item in de SELECT clause een enkele waarde zijn per groep 4 De SELECT clause mag enkel kolomnamen, aggregate functions, constanten en combinaties hiervan bevatten.

3 Groeperen van resultaten (2/2) (GROUP BY) 4 Alle namen die in de SELECT lijst voorkomen moeten ook in de GROUP BY clause voorkomen, tenzij ze gebruikt worden in een aggregate function 4 Als een WHERE clause gebruikt wordt, wordt die eerst toegepast, daarna wordt de GROUP BY toegepast

4 Groeperen van resultaten (GROUP BY): voorbeeld 4 Geef het aantal studenten in elk studiejaar en geef ook de geboortedatum van de jongste student in elk studiejaar 4 SELECT StudentGrade, COUNT(StudentSecondname) AS aantalstudenten, MAX(StudentDateOfBirth) FROM student GROUP BY StudentGrade ORDER BY StudentGrade

5 Groeperen van resultaten (GROUP BY): voorbeeld

6 GROUP BY: wat gebeurt er? 4 SQL verdeelt eerst de studenten volgens hun StudentGrade 4 Daarna gaat hij binnen deze groepen de studenten gaan tellen (COUNT operatie) en de jongste student zoeken (MAX operatie) 4 Tenslotte wordt het resultaat stijgend gerangschikt volgens StudentGrade

7 Groepen beperken (HAVING) (1/2) 4 HAVING wordt gebruikt in combinatie met GROUP BY, en dient om het aantal groepen te beperken 4 Equivallent van de WHERE clause, die individuele rijen filtert; HAVING filtert groepen

8 Groepen beperken (HAVING) (2/2) 4 Kolommen die voorkomen in de HAVING clause moeten ook voorkomen in de GROUP BY lijst, tenzij ze in een aggregate function voorkomen.

9 Groepen beperken (HAVING): voorbeeld 4 SELECT StudentGrade, COUNT(StudentSecondname) AS aantalstudenten, MIN(StudentDateOfBirth) FROM student GROUP BY StudentGrade HAVING COUNT(StudentSecondname) > 10 ORDER BY StudentGrade

10 Queries over meerdere relaties 4 Tot nu toe hebben we enkel gegevens opgehaald uit 1 enkele relatie 4 Er zijn twee manieren om informatie uit verschillende relaties te combineren: –door gebruik van cartesisch product (en in het bijzonder joins) –door gebruik van subqueries

11 Queries over meerdere relaties: cartesisch product 4 De meest triviale manier om informatie uit meerdere relaties te combineren is het cartesisch product 4 Het cartesisch product van twee relaties bestaat eruit om alle mogelijke combinaties van tuples in het resultaat op te nemen

12 Queries over meerdere relaties: cartesisch product (voorbeeld) StudentFirstN ame StudentSecon dName StudentID PaulMaes1 DirkPalm2 StudentIDClassname 1Databanken 1Kernfysica 2AI x

13 Queries over meerdere relaties: cartesisch product (voorbeeld) StudentFirstN ame StudentSecon dName StudentID PaulMaes1 DirkPalm2 StudentIDClassname 1Databanken 1Kernfysica 2AI x

14 Queries over meerdere relaties: cartesisch product (voorbeeld) StudentFirstN ame StudentSecon dName StudentID PaulMaes1 DirkPalm2 StudentIDClassname 1Databanken 1Kernfysica 2AI x

15 Queries over meerdere relaties: cartesisch product (voorbeeld) StudentFirstN ame StudentSecon dName StudentID PaulMaes1 DirkPalm2 StudentIDClassname 1Databanken 1Kernfysica 2AI x StudentFirstNa me StudentSecondNameStudentID Classname PaulMaes11Databanken PaulMaes11Kernfysica PaulMaes12AI DirkPalm21Databanken DirkPalm21Kernfysica DirkPalm22AI =

16 Queries over meerdere relaties: join (1/3) StudentFirstN ame StudentSecon dName StudentID PaulMaes1 DirkPalm2 StudentIDClassname 1Databanken 1Kernfysica 2AI 4 I.p.v. alle mogelijke combinaties is de volgende vraag misschien nuttiger: “Geef voor alle studenten naam, voornaam, studentennummer, en de vakken die ze volgen”

17 Queries over meerdere relaties: join (2/3) 4 Dit komt erop neer een cartesisch product te nemen, en daarbij te zorgen dat enkel de juiste tupels overblijven (nl. het juiste vak(ken) bij de juiste student) StudentFirstNa me StudentSecondNameStudentID Classname PaulMaes11Databanken PaulMaes11Kernfysica PaulMaes12AI DirkPalm21Databanken DirkPalm21Kernfysica DirkPalm22AI

18 Queries over meerdere relaties: join (3/3) 4 SELECT Student.StudentSecondname, Student.StudentFirstname, Enrollment.StudentID, Enrollment.Classname FROM Student, Enrollment WHERE Student.StudentID = Enrollment.StudentID StudentFirstNa me StudentSecondNameStudentID Classname PaulMaes11Databanken PaulMaes11Kernfysica PaulMaes12AI DirkPalm21Databanken DirkPalm21Kernfysica DirkPalm22AI

19 Queries over meerdere relaties: join (opmerkingen) 4 De join conditie bestaat eruit dat we een candidate key uit 1 relatie gelijk stellen aan de corresponderende foreign key uit de andere relatie 4 Op deze manier kunnen uiteraard ook meer dan 2 relaties gecombineerd worden

20 Queries over meerdere relaties: join (samengevat) 4 Vorm het Cartesisch product van de relaties uit de FROM clause 4 Filter de rijen uit het resultaat die niet aan de (join- ) conditie voldoen uit de WHERE clause voldoen 4 Voor de overblijvende rijen, vind de waarde voor elk item in de SELECT clause 4 SELECT DISTINCT -> elimineer dubbels 4 ORDER BY -> sorteer de resultaats-tabel

21 Queries over meerdere relaties: Gebruik van aliasen 4 Een alias kan gebruikt worden op tabellen een handiger naam te geven binnen een query. De alias mag in de query gebruikt worden als was het de tabelnaam 4 Aliasen verschijnen in de FROM clause 4 SELECT s.StudentSecondname, s.StudentFirstname, e.StudentID, e.Classname FROM Student s, Enrollment e WHERE s.StudentID = e.StudentID

22 Queries over meerdere relaties: Sorteren van een join 4 Geef een lijst terug van voornaam, naam en ingeschreven vak, gerangschikt volgens studiejaar (laagste jaar eerst) en binnen elk jaar alfabetisch gerangschikt op naam

23 Queries over meerdere relaties: Sorteren van een join 4 SELECT StudentSecondname, StudentFirstname, Enrollment.Classname FROM Student, Enrollment WHERE Student.StudentID = Enrollment.StudentID ORDER BY StudentGrade, StudentSecondName

24 Queries met meerdere relaties: meervoudig groeperen 4 Geef het aantal studenten terug per studiejaar per vak 4 SELECT s.StudentGrade, e.Classname, count(*) AS Count FROM Student s, Enrollment e WHERE s.StudentID = e.StudentID GROUP BY s.StudentGrade, e.Classname ORDER BY s.StudentGrade, e.Classname

25 Queries over meerdere relaties: Nested subqueries (revisited) 4 Probleem: geef per vak dat gegeven wordt de naam van de oudste student terug die dat vak volgt 4 De vraagstelling lijkt een GROUP BY oplossing te suggereren: select classname, min(studentdateofbirth) from student s, enrollement e where e.studentid = s.studentid GROUP BY classname 4 Maar, hoe ook de naam teruggeven??

26 Queries over meerdere relaties: Nested subqueries (revisited) SELECT e1.classname, s1.studentfirstname, s1.studentsecondname FROM student s1, enrollment e1 WHERE s1.studentid = e1.studentid AND s1.studentdateofbirth = (SELECT min(studentdateofbirth) FROM student s2, enrollment e2 WHERE s2.studentid = e2.studentid AND e1.classname = e2.classname )

27 Queries over meerdere relaties: Nested subqueries (revisited) SELECT e1.classname, s1.studentfirstname, s1.studentsecondname FROM student s1, enrollment e1 WHERE s1.studentid = e1.studentid AND s1.studentdateofbirth = (SELECT min(studentdateofbirth) FROM student s2, enrollment e2 WHERE s2.studentid = e2.studentid AND e1.classname = e2.classname )

28 Queries over meerdere relaties: Nested subqueries (revisited) SELECT e1.classname, s1.studentfirstname, s1.studentsecondname FROM student s1, enrollment e1 WHERE s1.studentid = e1.studentid AND s1.studentdateofbirth = (SELECT min(studentdateofbirth) FROM student s2, enrollment e2 WHERE s2.studentid = e2.studentid AND e1.classname = e2.classname )

29 Queries over meerdere relaties: Nested subqueries (revisited) SELECT e1.classname, s1.studentfirstname, s1.studentsecondname FROM student s1, enrollment e1 WHERE s1.studentid = e1.studentid AND s1.studentdateofbirth = (SELECT min(studentdateofbirth) FROM student s2, enrollment e2 WHERE s2.studentid = e2.studentid AND e1.classname = e2.classname )

30 Queries over meerdere relaties: Nested subqueries (revisited) SELECT e1.classname, s1.studentfirstname, s1.studentsecondname FROM student s1, enrollment e1 WHERE s1.studentid = e1.studentid AND s1.studentdateofbirth = (SELECT min(studentdateofbirth) FROM student s2, enrollment e2 WHERE s2.studentid = e2.studentid AND e1.classname = e2.classname )


Download ppt "Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G319 4 4 HomePage: te bereiken via"

Verwante presentaties


Ads door Google