sql 3 : join
Post on 30-Dec-2015
38 Views
Preview:
DESCRIPTION
TRANSCRIPT
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
SQL 3 : JOIN
Het selecteren van data uit gekoppelde tabellen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Syntax van een eenvoudige SELECT
SELECT ID, naam, prijsFROM productWHERE categorie = ‘boek’ORDER BY prijs
ID naam prijs8 groentensoep 2,157 appelsap 2,959 blik tonijn 3,15
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Berekeningen in SELECT (numeriek)
Selecteer de naam, prijs en prijs_plus_btw
SELECT ID, naam, prijs, prijs + prijs* btw_tarief/100 AS prijs_met_btwFROM product
ID Naam prijsprijs_met_btw1 fiets 100 1202 brood 1 1,055 boek 30 36
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 (aggregaties)
SELECT COUNT(*) AS aantal, AVG(prijs) AS midPrijs,MAX(prijs) AS maxPrijs, MIN(prijs) AS minPrijs
FROM product
Aantal midPrijs maxPrijs minPrijs9 873,10 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 (aggregaties) per groep
SELECT categorie,COUNT(*) AS aantal, AVG(prijs) AS midPrijs,MAX(prijs) AS maxPrijs, MIN(prijs) AS minPrijs
FROM productGROUP BY categorie
Cat Aantal midPrijs maxPrijs minPrijsvervoer 6 1188 8000 2.05
boek 3 20,70 40 10
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
SELECT DISTINCT SELECT DISTINCT categorie
FROM product
categorievervoervoedselboek
Dit is hetzelfde als: SELECT categorie
FROM productGROUP BY categorie
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..
Hoe ging het huiswerk?
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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
http://nl.wikipedia.org/wiki/Entiteit
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
EntiteitEen 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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Relatie tussen product en producent
productIDnaamprijs......producentID
producentIDnaaminfoadres
Foreign Key (FK) Primairy Key (PK)
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Relatie tussen product en producent
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Gekoppelde tabellen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
JOIN:SELECT uit twee gekoppelde tabellen
Selecteer alle producten en koppel daar aan de naam van de producent
SELECT product.*, producent.naam FROM product, producentWHERE product.producentID = producent.ID
ID naam … producentID producent.Naam3 tonijn 6 unilever4 kip 6 unilever5 step 4 joop’s fiets… … … …
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
JOIN:SELECT uit twee gekoppelde tabellen
Selecteer alle producten en koppel daar aan de naam van de producent
SELECT product.*FROM product
ID naam … producentID3 tonijn 64 kip 65 step 4… … …
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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
ID naam … producentID producent.Naam3 tonijn6 unilever4 kip 6 unilever5 step 4 joop’s fiets… … … …
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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
ID naam producentID producent.Naam percentage3 tonijn 6 unilever 54 kip 6 unilever 55 step 4 joop’s fiets 20 … … … …
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
LEFT JOIN
Alle rijen uit de linker tabel, plus de gekoppelde rijen uit de rechter tabel
SELECT product.*, producent.naam AS producentNaam
FROM productLEFT JOIN producent ON product.producentID = producent.ID
ID naam … producentID producentNaam3 tonijn 6 unilever5 step 4 joop’s fiets10 Karel en… NULL NULL
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
RIGHT JOIN
Alle rijen uit de rechter tabel, plus de gekoppelde rijen uit de linker tabel
SELECT product.*, producent.naam AS producentNaam
FROM productRIGHT JOIN producent ON product.producentID =
producent.ID
ID naam … producentID producentNaam3 tonijn 6 unilever5 step 4 joop’s fietsNULL NULL 9 Amalia
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
INNER JOIN
Alleen rijen die aan elkaar gekoppeld zijn.
SELECT product.*, producent.naam AS producentNaam
FROM productINNER JOIN producent ON product.producentID =
producent.ID
ID naam … producentID producentNaam3 tonijn 6 unilever5 step 4 joop’s fiets
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
INNER JOIN (alternatief)
Een andere manier om een inner join te maken.
SELECT product.*, producent.naam AS producentNaam
FROM product, producentWHERE product.producentID = producent.ID
ID naam … producentID producentNaam3 tonijn 6 unilever5 step 4 joop’s fiets
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 productFULL OUTER JOIN producent ON product.producentID =
producent.ID
ID naam … producentID producentNaam3 tonijn 6 unilever5 step 4 joop’s fiets
NULL NULL 9 Amalia 10 Karel en… NULL NULL
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
90% van de koppelingen: ‘LEFT JOIN’ Selecteer data uit een primaire tabel
en koppel data uit gerelateerde tabellenBijv alle data uit ‘product’
en koppel de producentnaam.
SELECT product.*, producent.naam, producent.infoFROM 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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Vele wegen naar rome
SELECT product.* , producent.naam AS producentNaam
FROM productLEFT JOIN producent ON product.producentID =
producent.ID
SELECT product.* , producent.naam AS producentNaam
FROM producentRIGHT JOIN product ON product.producentID =
producent.ID
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Meerdere gerelateerde tabellen
SELECT product.*, producent.naam, categorie.naam,btwtarief.percentage
FROM productLEFT 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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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.bindataFROM product LEFT JOIN film ON product.filmID =
film.ID
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Many-to-manybestelling <-> product
Een aparte tabel met bestellingID-productID paren
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Selecteren via relaties
Selecteer alle klanten die een bepaald product hebben besteld.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Stap 1: SELECT en JOIN de tabellen:
SELECT klant.*
FROM klant
JOIN bestellingJOIN bestelling_productJOIN product
WHERE product.ID = 21
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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.klantIDJOIN bestelling_product ON bestelling.ID=bestelling_product.bestellingIDJOIN product ON bestelling_product.productID = product.ID
WHERE product.ID = 21
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Many-to-many
Selecteer van een bestelling alle producten
SELECT product.ID, product.naam, product.prijs, bestelling_product.aantal
FROM bestelling_productINNER JOIN product ON bestelling_product.productID =
product.IDWHERE bestelling_product.bestellingID = 1
Aantal ID naam prijs 30 1 Toveren… 20 2 3 SQL… 23
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Many-to-manyvan 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
Aantal datum naam30 1-9-2003 Bos4 6-12-2003 Graaf
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
V2-projecten database
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
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 - j.meuwese@interactievemedia.hva.nl - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl
oefeningen
Doe de oefeningen 2
top related