Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese SQL 3 : JOIN Het selecteren van data uit gekoppelde tabellen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Vorige week Tabel: rijen en kolommen gevuld met ‘data’ Datatype: typologie op basis van mogelijk operaties Selecteren uit een enkele tabel ( SELECT )
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Basis datatype Type informatie in een veld Bepaalt 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 Lange tekst
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Syntax van een eenvoudige SELECT SELECT ID, naam, prijs FROM product WHERE categorie = ‘boek’ ORDER BY prijs IDnaamprijs 8groentensoep2,15 7appelsap2,95 9blik tonijn3,15
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Berekeningen in SELECT (numeriek) Selecteer de naam, prijs en prijs_plus_btw SELECT ID, naam, prijs, prijs + prijs* btw_tarief/100 AS prijs_met_btw FROM product IDNaamprijsprijs_met_btw 1fiets brood11,05 5boek3036
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Statistieken (aggregaties) SELECT COUNT(*) AS aantal, AVG(prijs) AS midPrijs, MAX(prijs) AS maxPrijs, MIN(prijs) AS minPrijs FROM product Aantal midPrijs maxPrijs minPrijs 9 873,
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Statistieken (aggregaties) per groep SELECT categorie, COUNT(*) AS aantal, AVG(prijs) AS midPrijs, MAX(prijs) AS maxPrijs, MIN(prijs) AS minPrijs FROM product GROUP BY categorie Cat Aantal midPrijs maxPrijs minPrijs vervoer boek 3 20,704010
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese SELECT DISTINCT SELECT DISTINCT categorie FROM product categorie vervoer voedsel boek Dit is hetzelfde als: SELECT categorie FROM product GROUP BY categorie
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese En.. Hoe ging het huiswerk?
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese vandaag Gegevens selecteren uit meerdere ‘gekoppelde’ tabellen. Eigenlijk heel simpel, maar je moet het effe door hebben.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Vandaag te leren Gerelateerde tabellen Primaire Key (PK), Foreign Key (FK) JOIN ( rijen uit verschillende tabellen samenvoegen ) LEFT JOIN RIGHT JOIN INNER JOIN Soorten relaties Many-to-one One-to-many One-to-one Many-to-many
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Relaties Een boek is gescheven door een auteur Een student volgt een opleiding De klant doet een bestelling Een product gemaakt door een producent Meer voorbeelden? Voor iedere ‘entiteit’ een tabel
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Entiteit Een op zichzelf staand ‘iets’ dat bestaat en kenmerken heeft. Bijvoorbeeld: Product Producent Schrijver Boek Leerling Vak Bestelling Opleiding
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Relatie tussen product en producent Foreign Key (FK)Primairy Key (PK)
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese
Relatie tussen product en producent
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Gekoppelde tabellen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Verschillende soorten relaties naar kwantiteit Many-to-one ( product -geproduceerd door> producent ) One-to-many ( klant -doet> bestelling ) One-to-one ( man –isgetrouwdmet> vrouw ) Many-to-many ( bestelling –besteldproduct> product )
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese JOIN: SELECT uit twee gekoppelde tabellen Selecteer alle producten en koppel daar aan de naam van de producent SELECT product.*, producent.naam FROM product, producent WHERE product.producentID = producent.ID IDnaam…producentIDproducent.Naam 3tonijn6unilever 4kip6unilever 5step4joop’s fiets …………
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese JOIN: SELECT uit twee gekoppelde tabellen Selecteer alle producten en koppel daar aan de naam van de producent SELECT product.* FROM product IDnaam…producentID 3tonijn6 4kip6 5step4 ………
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese JOIN: SELECT uit twee gekoppelde tabellen Selecteer alle producten en koppel daar aan de naam van de producent SELECT product.*, producent.naam FROM product JOIN producent ON product.producentID = producent.ID IDnaam…producentIDproducent.Naam 3tonijn6unilever 4kip6unilever 5step4joop’s fiets …………
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese JOIN: SELECT uit twee gekoppelde tabellen Selecteer alle producten en koppel daar aan de naam van de producent en het btw tarief SELECT product.*, producent.naam, btwtarief.percentage FROM product JOIN producent ON product.producentID = producent.ID JOIN btwtarief ON product.btwtariefID = btwtarief.ID IDnaamproducentIDproducent.Naam percentage 3tonijn 6unilever5 4kip6unilever 5 5step4joop’s fiets 20 …………
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Drie soorten koppelingen LEFT OUTER JOIN RIGHT OUTER JOIN INNER JOIN Opdracht voor gevorderden: Leg aan beginners uit wat het verschil is tussen deze soorten joins. Geef voorbeelden.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese En verder... De sheets hierna gaan over de subtiele verschillen tussen de verschillende soorten JOINS ( INNER, LEFT, RIGHT ). Dat heeft pas betekenis als je de JOIN begrijpt en kan toepassen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese LEFT JOIN Alle rijen uit de linker tabel, plus de gekoppelde rijen uit de rechter tabel SELECT product.*, producent.naam AS producentNaam FROM product LEFT JOIN producent ON product.producentID = producent.ID IDnaam…producentIDproducentNaam 3tonijn6unilever 5step4joop’s fiets 10Karel en…NULLNULL
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese RIGHT JOIN Alle rijen uit de rechter tabel, plus de gekoppelde rijen uit de linker tabel SELECT product.*, producent.naam AS producentNaam FROM product RIGHT JOIN producent ON product.producentID = producent.ID IDnaam…producentIDproducentNaam 3tonijn6unilever 5step4joop’s fiets NULLNULL9Amalia
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese INNER JOIN Alleen rijen die aan elkaar gekoppeld zijn. SELECT product.*, producent.naam AS producentNaam FROM product INNER JOIN producent ON product.producentID = producent.ID IDnaam…producentIDproducentNaam 3tonijn6unilever 5step4joop’s fiets
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese INNER JOIN (alternatief) Een andere manier om een inner join te maken. SELECT product.*, producent.naam AS producentNaam FROM product, producent WHERE product.producentID = producent.ID IDnaam…producentIDproducentNaam 3tonijn6unilever 5step4joop’s fiets
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese FULL OUTER JOIN Alle rijen uit zowel de linker als de rechter tabel. Ook als er geen koppeling is. SELECT product.*, producent.naam AS producentNaam FROM product FULL OUTER JOIN producent ON product.producentID = producent.ID IDnaam…producentIDproducentNaam 3tonijn6unilever 5step4joop’s fiets NULLNULL9Amalia 10Karel en…NULLNULL
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese % van de koppelingen: ‘LEFT JOIN’ Selecteer data uit een primaire tabel en koppel data uit gerelateerde tabellen Bijvalle data uit ‘product’ en koppel de producentnaam. SELECT product.*, producent.naam, producent.info FROM product LEFT JOIN producent ON product.producentID = producent.ID SELECT primaire_tabel.* gerelateerdetabel.* FROM primaire_tabel LEFT JOIN gerelateerde_tabel ON primaire_tabel.FK = gerelateerde_tabel.PK
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Vele wegen naar rome SELECT product.*, producent.naam AS producentNaam FROM product LEFT JOIN producent ON product.producentID = producent.ID SELECT product.*, producent.naam AS producentNaam FROM producent RIGHT JOIN product ON product.producentID = producent.ID
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Meerdere gerelateerde tabellen SELECT product.*, producent.naam, categorie.naam, btwtarief.percentage FROM product LEFT JOIN producent ON product.producentID = producent.ID LEFT JOIN categorie ON product.categorieID = categorie.ID LEFT JOIN btwtarief ON product.btwtariefID = btwtarief.ID
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Verschillende soorten relaties naar kwantiteit Many-to-one ( product -geproduceerd door> producent ) One-to-many ( klant -doet> bestelling ) Many-to-many ( bestelling –besteldproduct> product ) One-to-one ( man –isgetrouwdmet> vrouw )
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese One-to-one relaties Wanneer gebruik je een one-to-one? Natuurlijke 1 op 1 relaties: Is_getrouwd_met Aparte tabel voor binaire of grootte data velden product.filmID = film.ID SELECT product.*, film.bindata FROM product LEFT JOIN film ON product.filmID = film.ID
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Many-to-many bestelling product Een aparte tabel met bestellingID-productID paren
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Selecteren via relaties Selecteer alle klanten die een bepaald product hebben besteld.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Stap 1: SELECT en JOIN de tabellen: SELECT klant.* FROM klant JOIN bestelling JOIN bestelling_product JOIN product WHERE product.ID = 21
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Stap 1: SELECT en JOIN de tabellen (en vergeet niet de criteria voor deze relaties erbij te vertellen): SELECT klant.* FROM klant JOIN bestelling ON klant.ID = bestelling.klantID JOIN bestelling_product ON bestelling.ID=bestelling_product.bestellingID JOIN product ON bestelling_product.productID = product.ID WHERE product.ID = 21
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Many-to-many Selecteer van een bestelling alle producten SELECT product.ID, product.naam, product.prijs, bestelling_product.aantal FROM bestelling_product INNER JOIN product ON bestelling_product.productID = product.ID WHERE bestelling_product.bestellingID = 1 AantalIDnaamprijs 301Toveren…20 2 3SQL…23
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Many-to-many van product naar bestelling Selecteer van een product alle bestellingen SELECT bestelling_product.aantal, bestelling.datum, klant.naam FROM ( bestelling_product INNER JOIN bestelling ON bestelling_product.bestellingID = bestelling.ID) INNER JOIN klant ON bestelling.klantID= klant.ID WHERE bestelling_product.productID = 1 Aantaldatumnaam Bos Graaf
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese
V2-projecten database
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Vandaag geleerd Gerelateerde tabellen Primaire Key (PK), Foreign Key (FK) JOIN ( tabellen samenvoegen ) LEFT JOIN RIGHT JOIN INNER JOIN Soorten relaties Many-to-one One-to-many One-to-one Many-to-many ( gebruik een ‘tussen tabel’ )
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese oefeningen Doe de oefeningen 2