710 likes | 835 Views
Inleiding Databanken: oefeningen. Sven Casteleyn Lokaal: 6G319 Email: Sven.Casteleyn@vub.ac.be HomePage: te bereiken via http://wise.vub.ac.be/. Inleiding Databanken: leerstof. SQL DDL & DML: syntax en toepassingen Relationeel model en relationele algebra Domein & tuple calculus
E N D
Inleiding Databanken: oefeningen • Sven Casteleyn • Lokaal: 6G319 • Email: Sven.Casteleyn@vub.ac.be • HomePage: te bereiken via http://wise.vub.ac.be/
Inleiding Databanken: leerstof • SQL • DDL & DML: syntax en toepassingen • Relationeel model en relationele algebra • Domein & tuple calculus • Entity Relationship modeling • FA’s & Normalisatie
Relational model Herhaling terminologie
Relatie (tabel) Een relatie is een tabel met kolommen en rijen.
Attribuut Een attribuut is een kolom van een relatie
Tupel Een tupel is een rij van een relatie.
Domein Een domein is een verzameling van toegelaten waarden voor 1 of meerdere attributen. Voorbeelden (informeel) van domeinen voor attributen zijn “integers”, “strings”, “datum”, …
Relationele databank Een relationele databank is een collectie van relaties (tabellen)
Superkey Een attribuut of een verzameling van attributen die elk tuple uniek identificeert binnen een relatie.
Candidate key • Een superkey {K} zodanig dat geen enkele echte deelverzameling van K een superkey is. • Elk tuple van R wordt door de waarde van K uniek geidentificeerd (uniciteit). • Geen enkele echte deelverzameling van K heeft de uniciteit eigenschap.
Primary key De candidate key die gekozen werd om tuples uniek te identificeren in een relatie
Foreign key Een attribuut of een verzameling van attributen binnen een relatie die overeenkomt met een candidate key van een andere relatie.
2 vb. van mogelijke superkeys Relational model: keys
SQL: doel • Een database taal moet de gebruiker 3 zaken toelaten: - de relationele databank creeren - de relationele databank populeren - (simpele en minder simpele) queries uitvoeren • 2 delen: - DDL voor het definieren van de databank struktuur - DML voor het opvragen en updaten van tupels
SQL: kenmerken • SQL bevat geen control flow commando’s. • SQL is een “non-procedural language”, d.w.z. dat je specificeert wat je wil, in plaats van hoe je het wil bekomen.
Algemene SQL Statement SELECT [DISTINCT | ALL] {* | attribuut (-expressie) [AS new_name] [,...] } FROM relatie [alias_name] [, ...] [WHERE conditie] [GROUP BY column_list] [HAVING condition] [ORDER BY column_list]
Algemene SQL Statement SELECT [DISTINCT | ALL] {* | attribuut (-expressie) [AS new_name] [,...] } FROM relatie [alias_name] [, ...] [WHERE conditie] [GROUP BY column_list] [HAVING condition] [ORDER BY column_list]
Algemene SQL Statement SELECT [DISTINCT | ALL] {* | attribuut (-expressie) [AS new_name] [,...] } FROM relatie [alias_name] [, ...] [WHERE conditie] [GROUP BY column_list] [HAVING condition] [ORDER BY column_list]
Algemene SQL Statement SELECT [DISTINCT | ALL] {* | attribuut (-expressie) [AS new_name] [,...] } FROMrelatie [alias_name] [, ...] [WHEREconditie] [GROUP BY column_list] [HAVING condition] [ORDER BY column_list]
De basis SELECT statement • SELECT: specificeert welke attributen (kolommen) in het resultaat moeten verschijnen • FROM: specificeert de te gebruiken relatie(s) • WHERE: filtert de tupels in het resultaat door test van een bepaalde conditie
De basis SELECT statement: simpel voorbeeld • Vind naam en voornaam van alle studenten die in het derde jaar zitten
De basis SELECT statement: simpel voorbeeld • SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3 • Vind naam en voornaam van alle studenten die in het derde jaar zitten
De basis SELECT statement: simpel voorbeeld • SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3 Relatie
De basis SELECT statement: simpel voorbeeld • SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3 Attribuut Attribuut Relatie
De basis SELECT statement: simpel voorbeeld • SELECT StudentSecondname, StudentFirstname FROM Student WHERE StudentGrade = 3 Attribuut Attribuut Conditie Relatie
SQL Data Manupilation Language: Specificatie
SQL: alle attributen en tupels teruggeven • SELECT StudentFirstname, StudentSecondname, StudentID, StudentDateOfBirth,StudentGradeFROM Student
SQL: alle attributen en tupels teruggeven • SELECT StudentFirstname, StudentSecondname, StudentID, StudentDateOfBirth,StudentGradeFROM Student • Equivalent: SELECT * FROM Student
Specifiek attribuut, alle tupels teruggeven • Geef alle voornamen van studenten terug • SELECT StudentFirstnameFROM Student • Geef alle voor- en familienamen van studenten terug • SELECT StudentFirstname, StudentSecondnameFROM Student
DISTINCT • Elimineert dubbels
DISTINCT • Elimineert dubbels • Geef alle verschillende voornamen van studenten • SELECT DISTINCT StudentFirstname FROM Student
Hernoemen van kolommen: AS • Gebruik AS om kolommen te hernoemen • SELECT DISTINCT StudentFirstname AS VoornamenZonderDubbelsFROM Student
Tupel selectie • Gebruik WHERE (conditie) • Geef naam en voornaam van alle studenten die in het 3de jaar zitten • SELECT StudentSecondname, StudentFirstnameFROM StudentWHERE StudentGrade = 3;
Toegelaten in de WHERE clause • = , < , > , <= , >= , < > • Logische operatoren: OR, AND, NOT • 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
Range conditie: BETWEEN/ NOT BETWEEN • Waarden binnen een bepaald interval • Geef voor- en familienaam terug van alle studenten die geboren zijn in 1979 • SELECT StudentFirstname, StudentDateOfBirthFROM StudentWHERE StudentDateOfBirth BETWEEN #01-01-1979# AND #01-01-1980#;
Pattern matching: LIKE • % doet dienst al wildcard (nul of meer characters) • _ (underscore) stelt exact 1 character voor • SELECT StudentFirstnameFROM StudentWHERE StudentFirstname LIKE '%an%';
Testen op NULL: IS NULL / IS NOT NULL • NULL stelt een onbekende waarde voor in een tabel • Geef voornaam en studiejaar terug van alle studenten waarvan de geboortedatum gekend is • SELECT StudentFirstname, StudentGradeFROM StudentWHERE StudentDateOfBirth IS NOT NULL
Resultaten sorteren: ORDER BY • ORDER BY wordt gebruikt om het resultaat van een query te sorteren • ORDER BY kan stijgend (ASC) of dalend (DESC)
Resultaten sorteren (ORDER BY) • ORDER BY wordt gebruikt om het resultaat van een query te sorteren • ORDER BY kan stijgend (ASC) of dalend (DESC) • Geef de voornamen terug van alle studenten gerangschikt per jaar (laagste jaar eerst) • SELECT StudentFirstname, StudentGradeFROM StudentORDER BY StudentGrade ASC
Ordenen naar meerdere kolommen • Geef alle voornamen van studenten gerangschikt per jaar en alfabetisch gerangschikt (per jaar)
Ordenen naar meerdere kolommen • Geef alle voornamen van studenten gerangschikt per jaar en alfabetisch gerangschikt (per jaar) • SELECT StudentFirstname, StudentGradeFROM StudentORDER BY StudentGrade, StudentFirstname