Inleiding Databanken: oefeningen

Slides:



Advertisements
Verwante presentaties
Als ik kon zijn waar jij bent If I could be where you are
Advertisements

Applicatieplatform congres 12 & 13 maart
Waitstats 2005/ april Wat gaan we doen? • Even voorstellen • Performance problemen • Een veel gebruikte aanvliegroute • Wat zijn waitstats.
Hoe SQL injection werkt
Social Technographics Hoe ontwikkel je een succesvolle social media strategie? Reineke Reitsma Director, Consumer Technographics Forrester Research 11.
Meerdere tabellen: Relaties en Joins
Conditional Clauses If-zinnen.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Access en MySql Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
Module 7 – Hoofdstuk 5 (4) SQL – voorwaarden aan groepen en meerdere tabellen.
Programmeren in Java met BlueJ
MySQL-acties Klassikaal: Wijnen.sql. 1.Toon alle wijnen die er zijn. Toon de naam, kleur en prijs. SELECT `naam`,`kleur`,`prijs` FROM `wijnen`
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Backtracking: –Permutaties –Koninginnen.
Het selecteren van data uit meerdere gekoppelde tabellen
SQL Les 01 & 02. SELECT Weergeven van alle gegevens uit een tabel: SELECT * FROM tlbPersonen; Weergeven van alle personen die uit Aruba komen: SELECT.
Relationele Databases
SQL VOOR BIOLOGEN © 2011 M.L. Hekkelman CMBI Radboud UMC.
ThinkQuest Projects Leerkrachten uitnodigen om een project te delen.
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
SQL injections en meer... PERU. web application vulnerabilities Cross Site Scripting (21.5%) SQL Injection (14%) PHP includes (9.5%) Buffer overflows.
Instructie grammatica Word order II A comparison.
Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G HomePage: te bereiken via
Werktuigkunde, Gebouw Z Tel : Vrije Universiteit Brussel - Mechanical Engineering - Acoustics & Vibration.
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Ben Raes en Sam Decrock1 Tracking algoritmes Tracking Algoritmes Richting van ons project.
Copyright met toestemming gebruikt van Stichting Licentie © 1993 Kingsway's Thankyou Music 1/10 I WILL OFFER UP MY LIFE (Matt Redman) 1. I will offer up.
Copyright met toestemming gebruikt van Stichting Licentie © 1992 Hillsong Music Australia 1/3 I'LL LOVE YOU MORE (Rob & Debbie Eastwood) I bow my knee,
DSpace-gebruikersdag 9 maart 2006 WildFire ● WildFire is ontwikkeld door Henk Druiven, Rijksuniversiteit Groningen Met dank aan Johannes Nicolai en al.
SQL (structured Query Language) DDL (Data Definition Language) DML (Data Manipulation Language) Ontwerp databaseBevraag database.
Databases I EER and Object Modeling Martin Caminada / Wiebren de Jonge Vrije Universiteit, Amsterdam definitieve versie 2002.
Databases I (H.3) Het Entity-Relationship Model Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
Algorithms and Application for spatial data mining Ronnie Bathoorn.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
De Zegen in het Lijden. Oh, what I would do to have the kind of faith it takes, to climb out of this boat I'm in onto the crashing waves Ik zou alles.
ALBRECHT DÜRER'S MAGIC SQUARE ALBRECHT DÜRERS MAGISCH VIERKANT
Sunday, 03 August 2014 zondag 3 augustus 2014 Click Klik.
zondag 3 augustus 2014 Click Klik Sunday, 03 August 2014.
Statistische functies (aggregaatfuncties)
Tussentoets Digitale Techniek. 1 november 2001, 11:00 tot 13:00 uur. Opmerkingen: 1. Als u een gemiddeld huiswerkcijfer hebt gehaald van zes (6) of hoger,
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag GUI  command line redirection.
Hoofdstuk 2 Java. Soorten Java-programma’s nJava Applet programma “leeft” op een WWW-pagina nJava Application programma heeft een eigen window nJavascript.
ACE Case Oracle 11g Release 2 voor ontwikkelaars Rob van Wijk 17 november 2009.
DSpace-gebruikersdag 9 maart 2006 WildFire ● WildFire is ontwikkeld door Henk Druiven, Rijksuniversiteit Groningen Met dank aan Johannes Nicolai en al.
TOPIC O: Pointers | pag. 1 Pointer = adres in het geheugen, is zelf geen geheugen! Expliciet geheugen aanvragen vóór gebruik.
All Right! 3hv Unit 6 grammar 4.1.
Sketchpad - Introductie Mens en computer kunnen snel converseren door medium van line drawings Hexagons als één symbool (Ring Structure) Verschil met potlood.
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 9(2): Virtual.
Plan Coordination by Revision in Collective Agent Based Systems Adriaan ter Mors en Gijsbert Deelder Plan Coordination by Revision in Collective.
Link Popularity Het principe van linkpopulariteit kun je als volgt samenvatten: hoe meer webpagina's er naar een bepaalde webpagina linken, des te belangrijker.
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
LauwersCollege Buitenpost Informatica
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
7 Databases. STRUCTURED QUERY LANGUAGE Bij het relationele model hoort een programmeertaal waarmee de database benaderd kan worden. In de praktijk wordt.
24/04/2015IT-Assurance1 IT-Assurance deeltijd 4. Inleiding SQL Introductie in de basisfuncties Bijbehorend lesmateriaal: -AIV-boek van Derksen en Crins.
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
ANALYSE 3 INFANL01-3 WEEK 6 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Subqueries met correlaties ▸ Subqueries zonder correlaties ▸ Views ▸
BIMAIV03 Les A6 BIMAIV03 Les A6. Het resultaat van een query (1) BOEKEN SELECT MAX(prijs) FROM boeken; SELECT MAX(prijs) FROM boeken; BOEKNRTITELUITGEVERPRIJS.
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
– Software development fundamentals
SQL Les February 2019.
SQL Les 3 17 February 2019.
SQL Les 3 23 February 2019.
SQL Les 7 24 February 2019.
SQL Les 9 12 May 2019.
SQL Les 4 12 May 2019.
– Software development fundamentals
Databases SQL.
Transcript van de presentatie:

Inleiding Databanken: oefeningen Sven Casteleyn Lokaal: 6G319 Email: Sven.Casteleyn@vub.ac.be HomePage: te bereiken via http://wise.vub.ac.be/

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

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

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

Groeperen van resultaten (GROUP BY): voorbeeld

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

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

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

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

Queries over meerdere relaties Tot nu toe hebben we enkel gegevens opgehaald uit 1 enkele relatie 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

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

Queries over meerdere relaties: cartesisch product (voorbeeld) StudentID Classname 1 Databanken Kernfysica 2 AI StudentFirstName StudentSecondName StudentID Paul Maes 1 Dirk Palm 2 x

Queries over meerdere relaties: cartesisch product (voorbeeld) StudentID Classname 1 Databanken Kernfysica 2 AI StudentFirstName StudentSecondName StudentID Paul Maes 1 Dirk Palm 2 x

Queries over meerdere relaties: cartesisch product (voorbeeld) StudentID Classname 1 Databanken Kernfysica 2 AI StudentFirstName StudentSecondName StudentID Paul Maes 1 Dirk Palm 2 x

Queries over meerdere relaties: cartesisch product (voorbeeld) StudentID Classname 1 Databanken Kernfysica 2 AI StudentFirstName StudentSecondName StudentID Paul Maes 1 Dirk Palm 2 x = StudentFirstName StudentSecondName StudentID Classname Paul Maes 1 Databanken Kernfysica 2 AI Dirk Palm

Queries over meerdere relaties: join (1/3) StudentID Classname 1 Databanken Kernfysica 2 AI StudentFirstName StudentSecondName StudentID Paul Maes 1 Dirk Palm 2 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”

Queries over meerdere relaties: join (2/3) 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) StudentFirstName StudentSecondName StudentID Classname Paul Maes 1 Databanken Kernfysica 2 AI Dirk Palm

Queries over meerdere relaties: join (3/3) SELECT Student.StudentSecondname, Student.StudentFirstname, Enrollment.StudentID, Enrollment.Classname FROM Student, Enrollment WHERE Student.StudentID = Enrollment.StudentID Join conditie StudentFirstName StudentSecondName StudentID Classname Paul Maes 1 Databanken Kernfysica 2 AI Dirk Palm

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

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

Queries over meerdere relaties: Gebruik van aliasen 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 Aliasen verschijnen in de FROM clause SELECT s.StudentSecondname, s.StudentFirstname, e.StudentID, e.Classname FROM Student s, Enrollment e WHERE s.StudentID = e.StudentID

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

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

Queries met meerdere relaties: meervoudig groeperen Geef het aantal studenten terug per studiejaar per vak 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

Queries over meerdere relaties: Nested subqueries (revisited) Probleem: geef per vak dat gegeven wordt de naam van de oudste student terug die dat vak volgt 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 Maar, hoe ook de naam teruggeven??

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 )

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 )

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 )

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 )

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 )