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: 6G319 4 Email: Sven.Casteleyn@vub.ac.be 4 HomePage: te bereiken via http://wise.vub.ac.be/

2 Inleiding Databanken: leerstof 4 SQL –DDL & DML: syntax en toepassingen 4 Relationeel model en relationele algebra 4 Domein & tuple calculus 4 Entity Relationship modeling 4 FA’s & Normalisatie

3 Relational model:overzicht

4 Relational model Herhaling terminologie

5 Relatie (tabel) Een relatie is een tabel met kolommen en rijen.

6 Attribuut Een attribuut is een kolom van een relatie

7 Tupel Een tupel is een rij van een relatie.

8 Domein Een domein is een verzameling van toegelaten waarden voor 1 of meerdere attributen. Voorbeelden (informeel) van domeinen voor attributen zijn “integers”, “strings”, “datum”, …

9 Relationele databank Een relationele databank is een collectie van relaties (tabellen)

10 Relational model:overzicht

11

12

13

14 Superkey Een attribuut of een verzameling van attributen die elk tuple uniek identificeert binnen een relatie.

15 Candidate key 4 Een superkey {K} zodanig dat geen enkele echte deelverzameling van K een superkey is. 4 Elk tuple van R wordt door de waarde van K uniek geidentificeerd (uniciteit). 4 Geen enkele echte deelverzameling van K heeft de uniciteit eigenschap.

16 Primary key De candidate key die gekozen werd om tuples uniek te identificeren in een relatie

17 Foreign key Een attribuut of een verzameling van attributen binnen een relatie die overeenkomt met een candidate key van een andere relatie.

18 Relational model: keys

19

20

21

22 Structured Query Language (SQL)

23 SQL: doel 4 Een database taal moet de gebruiker 3 zaken toelaten: - de relationele databank creeren - de relationele databank populeren - (simpele en minder simpele) queries uitvoeren 4 2 delen: - DDL voor het definieren van de databank struktuur - DML voor het opvragen en updaten van tupels

24 SQL: kenmerken 4 SQL bevat geen control flow commando’s. 4 SQL is een “non-procedural language”, d.w.z. dat je specificeert wat je wil, in plaats van hoe je het wil bekomen.

25 Algemene SQL Statement SELECT [ DISTINCT | ALL ] { * | attribuut (-expressie) [ AS new_name] [,...] } FROM relatie [alias_name] [,...] [ WHERE conditie] [ GROUPBY column_list] [ HAVING condition] [ ORDER BY column_list]

26 Algemene SQL Statement SELECT [ DISTINCT | ALL ] { * | attribuut (-expressie) [ AS new_name] [,...] } FROM relatie [alias_name] [,...] [ WHERE conditie] [ GROUPBY column_list] [ HAVING condition] [ ORDER BY column_list]

27 Algemene SQL Statement SELECT [ DISTINCT | ALL ] { * | attribuut (-expressie) [ AS new_name] [,...] } FROM relatie [alias_name] [,...] [ WHERE conditie] [ GROUPBY column_list] [ HAVING condition] [ ORDER BY column_list]

28 Algemene SQL Statement SELECT [ DISTINCT | ALL ] { * | attribuut (-expressie) [ AS new_name] [,...] } FROM relatie [alias_name] [,...] [ WHERE conditie] [ GROUPBY column_list] [ HAVING condition] [ ORDER BY column_list]

29 De basis SELECT statement 4 SELECT: specificeert welke attributen (kolommen) in het resultaat moeten verschijnen 4 FROM: specificeert de te gebruiken relatie(s) 4 WHERE: filtert de tupels in het resultaat door test van een bepaalde conditie

30 De basis SELECT statement: simpel voorbeeld 4 Vind naam en voornaam van alle studenten die in het derde jaar zitten

31 De basis SELECT statement: simpel voorbeeld 4 SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3 4 Vind naam en voornaam van alle studenten die in het derde jaar zitten

32 De basis SELECT statement: simpel voorbeeld 4 SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3 Relatie

33 De basis SELECT statement: simpel voorbeeld 4 SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3 Attribuut Relatie Attribuut

34 De basis SELECT statement: simpel voorbeeld 4 SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3 Conditie Attribuut Relatie Attribuut

35 SQL Data Manupilation Language: Specificatie

36 SQL: alle attributen en tupels teruggeven 4 SELECT StudentFirstname, StudentSecondname, StudentID, StudentDateOfBirth,StudentGrade FROM Student

37 SQL: alle attributen en tupels teruggeven 4 SELECT StudentFirstname, StudentSecondname, StudentID, StudentDateOfBirth,StudentGrade FROM Student 4 Equivalent: SELECT * FROM Student

38 Specifiek attribuut, alle tupels teruggeven 4 Geef alle voornamen van studenten terug 4 SELECT StudentFirstname FROM Student 4 Geef alle voor- en familienamen van studenten terug 4 SELECT StudentFirstname, StudentSecondname FROM Student

39 DISTINCT 4 Elimineert dubbels

40 DISTINCT 4 Elimineert dubbels 4 Geef alle verschillende voornamen van studenten 4 SELECT DISTINCT StudentFirstname FROM Student

41 Hernoemen van kolommen: AS 4 Gebruik AS om kolommen te hernoemen 4 SELECT DISTINCT StudentFirstname AS VoornamenZonderDubbels FROM Student

42 Tupel selectie 4 Gebruik WHERE (conditie) 4 Geef naam en voornaam van alle studenten die in het 3de jaar zitten 4 SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3;

43 Toegelaten in de WHERE clause 4 =,, =, 4 Logische operatoren: OR, AND, NOT 4 Volgorde van evaluatie: – van links naar rechts –subexpressies tussen haakjes eerst geevalueerd –NOT wordt vóór AND en OR geevalueerd –AND wordt geevalueerd voor OR

44 Range conditie: BETWEEN/ NOT BETWEEN 4 Waarden binnen een bepaald interval 4 Geef voor- en familienaam terug van alle studenten die geboren zijn in 1979 4 SELECT StudentFirstname, StudentDateOfBirth FROM Student WHERE StudentDateOfBirth BETWEEN #01-01-1979# AND #01-01-1980#;

45 Pattern matching: LIKE 4 % doet dienst al wildcard (nul of meer characters) 4 _ (underscore) stelt exact 1 character voor 4 SELECT StudentFirstname FROM Student WHERE StudentFirstname LIKE '%an%';

46 Testen op NULL: IS NULL / IS NOT NULL 4 NULL stelt een onbekende waarde voor in een tabel 4 Geef voornaam en studiejaar terug van alle studenten waarvan de geboortedatum gekend is 4 SELECT StudentFirstname, StudentGrade FROM Student WHERE StudentDateOfBirth IS NOT NULL

47 Resultaten sorteren: ORDER BY 4 ORDER BY wordt gebruikt om het resultaat van een query te sorteren 4 ORDER BY kan stijgend (ASC) of dalend (DESC)

48 Resultaten sorteren (ORDER BY) 4 ORDER BY wordt gebruikt om het resultaat van een query te sorteren 4 ORDER BY kan stijgend (ASC) of dalend (DESC) 4 Geef de voornamen terug van alle studenten gerangschikt per jaar (laagste jaar eerst) 4 SELECT StudentFirstname, StudentGrade FROM Student ORDER BY StudentGrade ASC

49 Ordenen naar meerdere kolommen 4 Geef alle voornamen van studenten gerangschikt per jaar en alfabetisch gerangschikt (per jaar)

50 Ordenen naar meerdere kolommen 4 Geef alle voornamen van studenten gerangschikt per jaar en alfabetisch gerangschikt (per jaar) 4 SELECT StudentFirstname, StudentGrade FROM Student ORDER BY StudentGrade, StudentFirstname

51 Aggregate functions (1/4) 4 COUNT: geeft het aantal waarden in een kolom terug 4 SUM: geeft de som van de waarden in een kolom terug 4 AVG: geeft het gemiddelde van de waarden in een kolom terug 4 MIN: geeft de kleinste waarde van een kolom terug 4 MAX: geeft de grootste waarde van een kolom terug

52 Aggregate functions (2/4) 4 Alle aggregate functions gaan over 1 kolom van een relatie, en geven 1 waarde terug 4 COUNT, MIN en MAX kunnen niet numerieke domeinen aan, SUM en AVG kunnen enkel gebruikt worden met numerieke waarden 4 Al deze functies elimineren eerst NULL waarden ( uitgezonderd COUNT (*) )

53 Aggregate functions (3/4) 4 Aggregate functies kunnen ENKEL gebruikt worden in de SELECT clause en de HAVING clause (zie verder) 4 SELECT StudentFirstName FROM Student WHERE MIN(StudentDateOfBirth)

54 Aggregate functions (4/4) 4 Als een SELECT clause een aggregate function bevat en er wordt geen GROUP BY clause gebruikt, dan kan de SELECT clause geen kolom referenties bevatten tenzij die kolom in een aggregate wordt gebruikt 4 SELECT StudentID, COUNT(StudentGrade) FROM Student

55 Count: voorbeeld 4 Hoeveel studenten zijn ingeschreven in het 2de jaar? 4 SELECT COUNT(StudentFirstname) FROM Student WHERE StudentGrade = 2

56 COUNT en DISTINCT: voorbeeld 4 Hoeveel verschillende voornamen komen voor onder de studenten? 4 SELECT COUNT(DISTINCT StudentFirstname) AS DifferentNames FROM Student

57 COUNT en AVG: voorbeeld 4 Vind het totaal aantal studenten en hun gemiddelde studiejaar die niet geboren zijn in 1980 4 SELECT COUNT(StudentFirstname) AS AantalStudenten, AVG(StudentGrade) AS GemiddeldeStudiejaar FROM Student WHERE StudentDateOfBirth NOT BETWEEN #01-01-1980# AND #31-12-1980#

58 MIN MAX AVG: voorbeeld 4 Geef de leeftijd van de oudste en jongste student terug 4 SELECT MIN(StudentDateOfBirth) AS Oudste, MAX(StudentDateOfBirth) AS Jongste FROM Student

59 Subqueries 4 Subqueries kunnen gebruikt worden in de WHERE en HAVING (zie verder) clauses 4 Drie soorten: –Scalaire subquery: geeft een enkele waarde terug –Rij subquery: geeft meerdere attributen (kolommen) terug, maar slechts 1 enkele tupel (rij) –Table subquery: geeft een relatie (tabel) terug

60 Subqueries: voorbeeld 4 Geef de voornamen van alle studenten terug die geboren zijn op dezelfde dag als de student met StudentID 1. 4 SELECT StudentFirstname FROM Student WHERE StudentDateOfBirth = (SELECT StudentDateOfBirth FROM Student WHERE StudentID = 1)

61 Subquery met aggregate function (1/2) 4 Geef de namen terug van alle studenten die in een hoger jaar zitten dan de gemiddelde student 4 SELECT StudentFirstname FROM Student WHERE StudentGrade > (SELECT AVG(StudentGrade) FROM Student)

62 Subquery met aggregate function (2/2) 4 Merk op dat we hier niet kunnen schrijven: SELECT StudentFirstname FROM Student WHERE StudentGrade > AVG(StudentGrade) 4 Aggregate functions mogen immers enkel gebruikt worden in de SELECT en HAVING clause, niet in de WHERE clause.

63 Subquery met aggregate function: rules (1/2) 4 ORDER BY mag niet gebruikt worden in een subquery 4 De SELECT lijst in de subquery moet bestaan uit 1 enkele attribuutnaam of expressie, behalve voor subqueries die het keyword EXISTS gebruiken (zie verder) 4 Attribuutnamen in de subquery verwijzen by default naar de tabel in de FROM clause van de subquery.

64 Subquery met aggregate function: rules (2/2) 4 Wanneer de subquery voorkomt als operand in een vergelijking, dan moet de subquery de rechtse operand zijn SELECT StudentFirstname FROM Student WHERE (SELECT AVG(StudentGrade) FROM Student) < StudentGrade

65 Nested subqueries; gebruik van IN: voorbeeld 4 Geef de voornamen terug van alle studenten die geboren zijn tussen het geboortejaar van de student met studentenummer 7 en voor 1980

66 Nested subqueries; gebruik van IN: voorbeeld SELECT StudentFirstname FROM Student WHERE StudentDateOfBirth IN (SELECT StudentDateOfBirth FROM Student WHERE StudentDateOfBirth BETWEEN (SELECT StudentDateOfBirth FROM Student WHERE StudentID = 7) AND #01-01-1980#);

67 Nested subqueries; gebruik van IN: opmerkingen 4 De query wordt uitgevoerd van binnen naar buiten 4 Merk op dat we hier niet de gelijkheids conditie kunnen gebruiken, gezien er meerdere geboortedata tussen de opgegeven tijdstippen kunnen vallen, in plaats wordt IN gebruikt

68 ANY/SOME en ALL (1/2) 4 ANY/SOME en ALL kunnen gebruikt worden in subqueries die een kolom met meerdere waarden teruggeven 4 Als de subquery voorafgegaan wordt door ALL dan zal de conditie waar zijn enkel en alleen indien ze geldt voor ALLE waarden geproduceerd door de subquery

69 ANY/SOME en ALL (2/2) 4 Als de subquery voorafgegaan wordt door SOME dan zal de conditie waar zijn enkel en alleen indien ze geldt voor een (een of meerdere) waarde geproduceerd door de subquery 4 ANY en SOME zijn synoniemen 4 Als de subquery leeg is, dan geeft ALL true terug, ANY geeft false terug

70 ANY / SOME: voorbeeld 4 Geef de voornamen van alle studenten die jonger zijn (=later geboren) zijn dan ten minste 1 student uit het 2de jaar 4 SELECT StudentFirstname FROM Student WHERE StudentDateOfBirth > SOME (SELECT StudentDateOfBirth FROM Student WHERE StudentGrade = 2)

71 Oefeningen Databank 4 Server / host: wendy.vub.ac.be 4 Poort: 5432 4 Initiele databank:, bijv. ‘CasteleynSven’ 4 Login:, bijv. ‘CasteleynSven’ 4 Paswoord: database_01


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

Verwante presentaties


Ads door Google