Download en installeer de gereedschappen XAMP Apache server ( http ) mySql server PHP myAdmin IAM SQL oefeningen Database phpmyAdmin Import : sql_producten.sql , sql_winkel.sql, sql_festival.sql SAMS’ SQL in 10 minuten mySQL reference
SQL en database ontwerp Deel 1 ( week 2 – 5 ) SQL queries Deel 2 ( week 6 – 9 ) datamodelleren
Hoe zit data in een database? tabel Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
rij Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
kolom Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
veld Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
datatype Type informatie in een veld basis datatypen Bepaalt het soort operaties dat je er op kan uitvoeren. basis datatypen Numeriek optellen, aftrekken, gemiddelde Tekst aan_elkaar_plakken, substring, teveel_spaties_verwijderen, zoek_en_vervang Boolean and, or, xor, not Binair/BLOB geen operaties Datum/tijd Lange tekst XML
BLOB Binary large object Bijv: beeldmateriaal, geluid, bestanden. Operaties: geen Vaak niet in een database maar als aparte bestanden, wel bestandsnaam in de database Er bestaan speciale databases met speciale functies voor speciale bestanden
Speciale datatype: datum/tijd Eigenlijk ‘numeriek’: aantal milliseconden sinds het jaar nul ( of sinds 1900 ) Echter : Speciale onregelmatige rekeneenheden ( maanden, schrikkeljaar, etc ) Speciale manier van weergeven ‘1-1-2004’ of ‘2004-01-01’ of ‘1 jan 2004’ Subtype: Date Time
XML in een database XML als datatype: XML data opgeslagen in een database-veld Speciale XML functies SQL/XML standaard wordt nog niet door alle RDBMS’s ondersteund NB: geen stof voor tentamen, wel mogelijkheid tot bonuspunten
Basis datatype Type informatie in een veld Bepaald het soort operaties dat je er op kan uitvoeren. basis datatypen die in iedere database of programmeertaal op één of andere manier worden ondersteund: Numeriek Tekst Boolean Binair Datum/tijd XML
Vraag? Welke data type is Telefoonnummer? Huisnummer? Leeftijd? Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
En dan nu... SQL Structured Query Language Een taal om database te bevragen en te manipuleren. Als sinds begin 70 relatief stabiel Ondersteund door ieder DBMS Selecteren en wijzigen van opgeslagen gegevens Aanbrengen/veranderen van de structuur van de database
Syntax van een eenvoudige SELECT SELECT ID, naam, prijs FROM product SELECT {kolomnamen} FROM {tabelnaam}
SELECT resultaat Het resultaat van een SQL query is altijd een tabel. SELECT ID, naam, prijs FROM product ID naam prijs 1 Koken voor … 20,10 7 appelsap 2,95 8 groentensoep 2,15 9 blik tonijn 3,10
Syntax van een eenvoudige SELECT SELECT ID, naam, prijs FROM product WHERE categorie = ‘voedsel’ ORDER BY prijs SELECT {kolomnamen} FROM {tabelnaam} WHERE {criteria} ORDER BY {kolomnaam}
SELECT resultaat SELECT ID, naam, prijs FROM product WHERE categorie =‘voedsel’ ORDER BY prijs ID naam prijs 8 groentensoep 2,15 7 appelsap 2,95 9 blik tonijn 3,15
Korte opdracht (10 min ) Doe je eerste SQL querie op de ‘producten’-database SELECT … FROM … WHERE … ORDER BY …
Syntax van een eenvoudige SELECT variaties SELECT naam, prijs FROM product WHERE categorie = ‘boek’ ORDER BY prijs SELECT product.naam, product.prijs FROM product WHERE product.categorie = ‘boek’ ORDER BY product.prijs SELECT [product.naam], [product.prijs] FROM product WHERE [product.categorie] = ‘boek’ ORDER BY [product.prijs]
SELECT WHERE SELECT naam, prijs FROM product WHERE categorie = ‘eten’ AND prijs < 5 ORDER BY producent , prijs DESC Logische operaties: AND, OR, NOT Vergelijkingen: =, >, < , <> , <=, >=, LIKE
Berekeningen in SELECT (numeriek) Selecteer de naam, prijs en prijs_plus_btw SELECT naam, prijs, prijs + prijs* btw_tarief/100 AS prijs_met_btw FROM product Naam prijs prijs_met_btw fiets 100 120 brood 1 1,05 boek 30 36
Berekeningen in SELECT (datum) Selecteer de naam en de ‘leeftijd’ van een product SELECT naam, beschikbaar_vanaf, DATEDIFF( 'yyyy' , beschikbaar_vanaf , DATE() ) AS leeftijd FROM product; WHERE beschikbaar_vanaf <= DATE() Naam beschikbaar_vanaf leeftijd fiets 1-1-2003 1 brood 1-2-1999 5 boek 3-2-2004 0
Functies en operatoren Gebruik de (my)SQL reference :
Aggregaties/statistieken Dwz: Informatie uit een tabel als geheel (ipv uit een rij) Voorbeelden: Gemiddelde Aantal Hoogste
Verschillende soorten selecties Rijen Selecteren van kolommen (hst 2) Sorteren (hst 3) Filteren van rijen (hst 4,5,6) Het berekenen van kolommen (hst 7,8) Aggregaties Statistieken ( hst 9 ) Groeperen ( hst 10 ) Lijst van voorkomende waarden ( ? ) Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
statistieken SELECT COUNT(*) AS aantal, AVG(prijs) AS midPrijs, MAX(prijs) AS maxPrijs, MIN(prijs) AS minPrijs FROM product Aantal midPrijs maxPrijs minPrijs 11 1188 8000 2.05 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Statistieken per groep SELECT categorie, COUNT(*) AS aantal, AVG(prijs) AS midPrijs, MAX(prijs) AS maxPrijs, MIN(prijs) AS minPrijs FROM product GROUP BY categorie Categorie aantal gemPrijs maxPrijs minPrijs boek 5 30,38 50 20 voedsel 3 2996 8000 300 vervoer 3 2,75 3,15 2.05
GROUP BY vs ORDER BY GROUP BY: Alleen in combinatie met een statistische functie gemiddelde prijs per categorie ORDER BY Sortering van rijen Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Speciaal geval: SELECT DISTINCT SELECT DISTINCT categorie, FROM product categorie vervoer voedsel boek Is hetzelfde als: SELECT categorie FROM product GROUP BY categorie
oefenen Doe de oefeningen uit de reader !
Volgende week Meerdere tabellen in de database