ANALYSE 3 INFANL01-3 WEEK 5 01-02-2014 CMI Informatica.

Slides:



Advertisements
Verwante presentaties
SQL deel 2: datamodel ontwerp
Advertisements

Computervaardigheden
Module 7 – Hoofdstuk 5 (1) SQL – een begin.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hoofdstuk 8: Werken met SQL voor eindgebruikers
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Relationele databases en
Databases Informatica Ga verder met een muisklik. SQL FCO DBMS NE FA
Module 7 – Hoofdstuk 5 (4) SQL – voorwaarden aan groepen en meerdere tabellen.
MySQL-acties Klassikaal: Wijnen.sql. 1.Toon alle wijnen die er zijn. Toon de naam, kleur en prijs. SELECT `naam`,`kleur`,`prijs` FROM `wijnen`
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
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.
Sets in een RDBS Een database
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Relationele Databases
Databases.
<Mdl01 hoorcollege 1>
Base: bewerkingen 2 soorten - Oplopend- Aflopend.
LauwersCollege Buitenpost Informatica
LauwersCollege Buitenpost Informatica
Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G HomePage: te bereiken via
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Gevorderden 5.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische.
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Download en installeer de gereedschappen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Vorige week: Referentiele integriteit
SQL (structured Query Language) DDL (Data Definition Language) DML (Data Manipulation Language) Ontwerp databaseBevraag database.
Workshop PHP Een productencatalogus Met database.
Statistische functies (aggregaatfuncties)
Laat software voor je werken
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
LauwersCollege Buitenpost Informatica
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
24/04/2015IT-Assurance1 IT-Assurance deeltijd 4. Inleiding SQL Introductie in de basisfuncties Bijbehorend lesmateriaal: -AIV-boek van Derksen en Crins.
Databases I Het Entity-Relationship Model
College 3 Hoofdstuk 3: Basis concepten van een relationele database
Hoofdstuk 11 Databasemanagementsystem. hoofdstuk 112 STROKENDIAGRAMMEN llnrvoornaamtussenvachternaamstraathuisnummerpostcodeplaatstelefoongeslachtgebdatumklas.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
Analyse 3 INFANL01-3 week 3 CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Analyse 3 INFANL01-3 week 2 CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Week 3 BIMAIV03 Les B3 BIMAIV03 Les B3. Opdracht 1 Van een artikel mogen maximaal 300 stuks verkocht worden. Verschillende klanten bestellen een aantal.
Week 3 BIRAIV03 Les B6 BIRAIV03 Les B6. naamtype A. JanssenLunare P. GerritsenGratea J. MolenaarTerra J.M. de WitTerra H.A.M. GeelsbergenLunare T. van.
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
Week 6 BIMAIV03 les B1. DML en DDL ata D anipulation M anguage L ata D efinition D anguage L.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Week 1 BIMAIV03 Les B2 BIMAIV03 Les B2. Uit het voorgaande... CREATE TABLE... Opdracht om een nieuwe tabel binnen de database te creëren. Aandachtspunten.
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.
EERDER….. Tabellen rij (record, tuple, occurence) kolom (attribuut, veld) tabel (relatie) tabelstructuur : patient(PAT#,PNAAM,LEEFTIJD,GESLACHT,ARTS)
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 Cursus deel
LauwersCollege Buitenpost Informatica
SQL Les February 2019.
SQL Les 3 17 February 2019.
SQL Les 3 23 February 2019.
SQL Les 7 24 February 2019.
SQL Les 6 14 April 2019.
SQL en Datanormalisatie
SQL Les 9 12 May 2019.
SQL Les 4 12 May 2019.
– Software development fundamentals
SQL Les May 2019.
Databases SQL.
Transcript van de presentatie:

ANALYSE 3 INFANL01-3 WEEK CMI Informatica

ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Omzetten van een datamodel in een databaseontwerp ▸ SET functies (COUNT, MIN, MAX, SUM, AVG, STDEV) ▸ GROUP BY en HAVING.

VORIGE LES

Volgorde uitvoeren SELECT FROM - WHERE - SELECT - ORDER BY Referentiële integriteit FOREIGN KEY spelersnr REFERENCES spelers (spelersnr) ON DELETE/UPDATE RESTRICT/CASCADE/SET NULL Vorige les

SELECT instructie: volgorde van uitvoeren (intern) SELECT [kolommen] [3] FROM [tabellen][1] WHERE [voorwaarde voor rij][2] ORDER BY [kolom][4] 1. FROM2. WHERE a b 3. SELECT4. ORDER BY

Referentiele Integriteit spelernsnr in TEAMS verwijst altijd naar een bestaand spelersnr in SPELERS, dus moeten gesynchroniseerd blijven primary key foreign key

Referentiele Integriteit refererende acties alternatief 1: ON UPDATE CASCADE ON DELETE CASCADE (dwz update/delete van een spelersnr in de SPELERS tabel triggert automatisch een update/delete in TEAMS) alternatief 2:  ON UPDATE SET NULL  ON DELETE SET NULL

Referentiele Integriteit refererende acties default (SOLID):  ON UPDATE RESTRICT  ON DELETE RESTRICT (dwz wijzigen/verwijderen van een spelersnr in de SPELERS tabel wordt tegengehouden als spelersnr in TEAMS voorkomt)

OMZETTEN VAN EEN DATAMODEL IN EEN DATABASEONTWERP

Omzetten ERD -> fysieke database ▸ Entiteit-> Tabel (geen spaties, speciale tekens zoals #,%, mag niet met een getal beginnen) ▸ Instantie-> Rij ▸ Attribuut-> Kolom (naam moet unieke zijn binnen een tabel) ▸ Relatie-> Verwijssleutel (FK) (optionaliteit hangt van de relatie af)

Omzetten van een-op-een relatie Hoe wordt een verplichte een-op-een relatie omgezet?

Omzetten van XOR relatie

XOR - 2

Omzetten van een-op-meer relatie Let op de referentiele Integriteit en refererende acties ON UPDATE ON DELETE

Omzetten van supertypen en subtypen (een tabel)

Omzetten van supertypen en subtypen (meerdere tabelen)

JOINs

Join in SQL Een join-tabel is een tabel die afgeleid is van twee of meer tabellen. Afhankelijk van het soort join worden kolommen gecombineerd die dezelfde waarden hebben. Je kan verschillende soorten joins in een query combineren. CROSS JOIN INNER JOIN, NATURAL JOIN OUTER JOIN SELF JOIN

CROSS JOIN Cross join toont een cartesisch product van rijen uit de genoemde tabellen in de join-query. Expliciet: SELECT * FROM employee CROSS JOIN department; Impliciet SELECT * FROM employee, department;

NATURAL JOIN Natural join is gebaseerde op kolommen uit twee of meerdere tabellen. Deze kolommen hebben dezelfde naam. De waarden van deze kolommen moeten gelijk zijn. Resulterende tabel heeft maar een kolom met dezelfde naam Voorbeeld: Select * FROM employee NATURAL JOIN department;

INNER JOIN Inner join is gebaseerde op kolommen uit twee of meerdere tabellen. De waarden van deze kolommen moeten gelijk zijn. Resulterende tabel filtert de kolommen niet zoals bij natural join Voorbeeld: Expliciet: SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID; Impliciet: SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID;

OUTER JOIN Outer join is gebaseerde op kolommen uit twee of meerdere tabellen. Deze kolommen hebben dezelfde naam. De waarden van deze kolommen hoeven niet gelijk te zijn. Resulterende tabel filtert de kolommen niet Outer join kent drie varianten: left,right full Voorbeeld: SELECT * FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;

INNER JOIN en OUTER JOIN Bij join-queries zijn de woorden “inner” en “outer” optioneel te noemen. Default is “inner join” Left, right en full impliceren een outer join

Equi-Join Door het gebruik van vergelijkingsoperator “=” wordt de join ook equi-join genoemd. Voorbeeld: SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID; Een andere wijze om een equi-join te schrijven is “USING” te gebruiken als de kolommen dezelfde naam hebben. Voorbeeld: SELECT * FROM employee INNER JOIN department USING (DepartmentID);

Self-JOIN Je kan een tabel met zich self joinen als er bijvoorbeeld recursieve relatie is Voorbeeld: SELECT F.EmployeeID, F.LastName, S.EmployeeID, S.LastName, F.Country FROM Employee F INNER JOIN Employee S ON F.Country = S.Country WHERE F.EmployeeID < S.EmployeeID ORDER BY F.EmployeeID, S.EmployeeID;

SET FUNCTIES

SET functies Wat zijn set-functies ? functies met een verzameling (Eng. SET) waarden als input en één enkele waarde als output Welke set-functies zijn er ? COUNT, MIN, MAX, AVG, STDEV Waar zijn set-functies ‘toegestaan’ ?  op die plaatsen in een SQL statement waar een verzameling waarden beschikbaar is

SET functies in SELECT component In SELECT component is (als tussenresultaat) beschikbaar:  de verzameling rijen beschikbaar die voldoet aan de voorwaarde in de WHERE component voorbeelden:  SELECT COUNT(*) FROM spelers;  SELECT COUNT(DISTINCT plaats) FROM spelers;

SET functies niet in WHERE component In de WHERE component wordt per rij bekeken of rij-voorwaarde waar is. In rij-voorwaarde is maar één enkele rij beschikbaar, geen verzameling, dus SET functies kunnen niet worden gebruikt in WHERE component.

SET functies niet in WHERE component SELECT * FROM boetes WHERE SUM(bedrag) > 100; //FOUT!! SELECT SUM(bedrag) FROM boetes WHERE bedrag >100; SELECT COUNT(*) FROM boetes WHERE bedrag >100;

SET functies COUNT : aantal waardes MIN : kleinste waarde MAX : grootste waarde SUM : som van een aantal waardes AVG : gemiddelde STDEV: standaard afwijking

COUNT voorbeelden SELECT COUNT(*) FROM boetes;8 SELECT COUNT(bedrag) FROM boetes;7 SELECT COUNT(DISTINCT bedrag) FROM boetes; 4

MIN, MAX voorbeelden SELECT MIN(bedrag) FROM boetes; 25 SELECT MAX(bedrag) FROM boetes; 85

SUM, AVG, STDEV voorbeelden SELECT SUM(bedrag) FROM boetes;420 SELECT AVG(bedrag) FROM boetes;60 SELECT SUM(bedrag)/ COUNT(bedrag);60 SELECT STDEV(bedrag);27

SET functies in SELECT zonder GROUP BY aggregeren over alle rijen van de tabel d.w.z. Behandelen de hele tabel als één groep. NIET toegestaan is: SELECT betalingsnr, MIN(bedrag) FROM boetes; Want:  meer waarden voor betalingsnr  één waarde MIN(bedrag)

GROUP BY, HAVING definitie SELECT: ::= [ ]

GROUP BY, HAVING GROUP BY [kolom]: groepeert rijen die dezelfde waarde in een kolom hebben (dezelfde waarden van een bepaald attribuut hebben) bijv. GROUP BY kleur HAVING [groep-voorwaarde]:  selecteert groepen die aan voorwaarde voldoen

SELECT instructie: volgorde van uitvoeren (intern) volgorde SELECT [kolommen] [5] FROM [tabellen][1] WHERE [voorwaarde voor rij][2] GROUP BY [kolom(men)][3] HAVING [voorwaarde voor groep][4] ORDER BY [kolom][6]

SELECT instructie: volgorde van uitvoeren (intern) volgorde SELECT [kolommen] [5] FROM [tabellen][1] WHERE [voorwaarde voor rij][2] GROUP BY [kolommen][3] HAVING [voorwaarde voor groep][4] ORDER BY [kolom][6]

GROUP BY hoe werkt het (1) FROM BOETESGROUP BY SPELERSNR

GROUP BY hoe werkt het (2) SELECT SPELERSNR, COUNT(BEDRAG) -> SELECT SPELERSNR, SUM(BEDRAG) ->

GROUP BY hoe werkt het (3) zonder GROUP BY ‘zien’ de SET functies maar 1 groep: de hele tabel met GROUP BY ‘zien’ de SET functies meer groepen, en aggregeren over de waarden binnen die groepen !! het kleinste niveau van detail is de groep; dit kan dus NIET: SELECT betalingsnr, spelersnr FROM boetes GROUP BY spelersnr;

HAVING hoe werkt het (1) HAVING selecteert groepen die aan ‘groep-voorwaarde’ voldoen een ‘groep-voorwaarde’ test waarden waarvan er maar 1 per groep is, d.w.z.: waarden van attributen waarop gegroepeerd is (spelersnr), of geaggregeerde waarden binnen een groep (SUM(bedrag))

HAVING hoe werkt het (2) SELECT spelersnr, COUNT(bedrag) FROM boetes GROUP BY spelersnr HAVING SUM(bedrag)>=100 FOUT: SELECT spelersnr, COUNT(bedrag) FROM boetes GROUP BY spelersnr HAVING bedrag >=100

Nogmaals: SELECT instructie in volgorde FROM => hele tabel of join WHERE => selecteert rijen GROUP BY => voegt rijen samen (met zelfde waarde in kolom) HAVING => selecteert groepen SELECT=> maakt nieuwe tabel (zorg ervoor dat een rij precies 1 waarde voor een attribuut heeft) ORDER BY=> sorteert eindresultaat

Opgave: 1. Geef voor elke speler met 2 of meer boetes het totaalbedrag van zijn/haar boetes 2. Als 1, maar negeer boetes van € 25 of minder

Antwoord: 1. SELECT spelersnr, sum(bedrag) FROM boetes GROUP BY spelersnr HAVING COUNT(bedrag)>=2; 2. voeg toe (na FROM): WHERE bedrag>25

Relaties tussen tabellen voorbeeld: administratie van bestelde boeken Voor wie : de werknemers van Internet boekhandel FatBooks.com Functie :  het geven van een actueel overzicht van boeken die besteld zijn en nog niet geleverd;  bovendien per bestelling wie de bestelling heeft geplaatst

Relaties tussen tabellen entiteiten : klanten, bestellingen, boeken, bestelling is voor 1 klant, maar 1 klant kan N bestellingen doen, dus klanten bestellingen is een 1 : N relatie

Relaties tussen tabellen 1:N Hoe realiseer je een 1:N relatie ?  verwijs in de tabel aan de ‘N’ kant van de relatie met een FOREIGN KEY naar de PRIMARY KEY van de tabel aan de ‘1’ kant van de relatie 1N

Relaties tussen tabellen 1:N Er zijn meer bestellingen die naar dezelfde klant verwijzen

Relaties tussen tabellen vraag Vraag :  geef de SQL opdracht om de naam en de bestellingen van de klant met KLANTNR = 11 te zien 1 N

Relaties tussen tabellen antwoord Antwoord :  SELECT naam, bestelnr FROM klanten, bestellingen WHERE klanten.KLANTNR=bestellingen.KLANTNR AND klanten.KLANTNR=11;  om de bestellingen van een klant te vinden moet je dus aan de ‘andere’ kant beginnen: door de bestellingen voor een bepaalde klant te selecteren 1 N

Relaties tussen tabellen M:N Relatie: bestellingen boeken 1 bestelling omvat meer boeken 1 boek(titel) komt voor op meer bestellingen, dus bestellingen boeken is een M : N relatie (veel op veel)

Relaties tussen tabellen M:N Hoe realiseer je een M:N relatie ?  maak een extra tabel waarin elke rij  aan de ene kant verwijst naar een bestelling  aan de andere kant verwijst naar een boek  (de M:N relatie wordt dus gesplitst in een 1:M en een 1:N relatie)

Relaties tussen tabellen M:N Elke bestelregel verwijst  enerzijds naar 1 bestelling, en tegelijkertijd  anderzijds naar 1 boek

Relaties tussen tabellen M:N vraag Vraag:  Geef de SQL opdracht om  van de bestelling met bestelnr = 1 te zien: –de naam van de klant –de nrs en auteurs van de bestelde boeken

Relaties tussen tabellen M:N antwoord Antwoord: SELECT naam, boeken.boeknr, auteur FROM klanten, boeken, bestellingen, bestelregel WHERE bestellingen.bestelnr = 1 AND bestellingen.klantnr = klanten.klantnr AND bestellingen.bestelnr = bestelregel.bestelnr AND bestelregel.boeknr = boeken.boeknr;

NULL waarde

NULL In SQL de waarde “NULL” is een markering dat de data nog onbekend “NULL” is geen waarde op zich Wat is het effect van “NULL” op je query? Wat is de uitslag van “SELECT 10 * NULL”? Wat is de uitslag van deze query? SELECT * FROM emp WHERE age > 45

SET functies en NULL SET functies zoals count, avg enz. elimineren NULL waardes en worden niet berekend. SELECT avg(i),avg(j) FROM table Wat is het resultaat? Er zijn twee predicaten voor NULL waardes IS NULL en IS NOT NULL SELECT * FROM emp WHERE age IS NOT NULL