SQL 3 : JOIN

41
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl SQL 3 : JOIN Het selecteren van data uit gekoppelde tabellen

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

Page 1: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

SQL 3 : JOIN

Het selecteren van data uit gekoppelde tabellen

Page 2: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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 )

Page 3: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 4: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 5: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 6: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 7: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 8: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 9: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

En..

Hoe ging het huiswerk?

Page 10: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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.

Page 11: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 12: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 13: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 14: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

productIDnaamprijs......producentID

producentIDnaaminfoadres

Foreign Key (FK) Primairy Key (PK)

Page 15: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

Relatie tussen product en producent

productIDnaamprijs......producentID

producentIDnaaminfoadres

Foreign Key (FK) Primairy Key (PK)

Page 16: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

Page 17: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

Relatie tussen product en producent

Page 18: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

Gekoppelde tabellen

Page 19: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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 )

Page 20: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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… … … …

Page 21: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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… … …

Page 22: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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… … … …

Page 23: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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 … … … …

Page 24: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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.

Page 25: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 26: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 27: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 28: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 29: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 30: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 31: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 32: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 33: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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 )

Page 34: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 35: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

Many-to-manybestelling <-> product

Een aparte tabel met bestellingID-productID paren

Page 36: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 37: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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

Page 38: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

Page 39: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

V2-projecten database

Page 40: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - 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’ )

Page 41: SQL 3 : JOIN

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - [email protected] - http://oege.ie.hva.nl/~meuwj/ - http://hva.jochem.nl

oefeningen

Doe de oefeningen 2