SQL 3 : JOIN

Post on 15-Jan-2016

52 views 0 download

description

SQL 3 : JOIN. Het selecteren van data uit gekoppelde tabellen. Vorige week. Tabel: rijen en kolommen gevuld met ‘data’ Datatype: typologie op basis van mogelijk operaties Selecteren uit een enkele tabel ( SELECT ). Basis datatype. Type informatie in een veld - PowerPoint PPT Presentation

Transcript of SQL 3 : JOIN

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

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

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

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

Many-to-many

Selecteer van een bestelling alle producten

SELECT bestelling_product.aantal,product.ID, product.naam,

product.prijs

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