De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -

Verwante presentaties


Presentatie over: "Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -"— Transcript van de presentatie:

1 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese SQL 4 : 1. Meer met gerelateerde tabellen 2. Data toevoegen, wijzigen, verwijderen 3. ‘Normalisatie’ en ‘Referentiele integriteit’

2 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Tot nu toe  Tabel: rijen en kolommen  Datatype: typologie op basis van mogelijk operaties  Selecteren uit een enkele tabel ( SELECT )  Tabellen koppelen met  primairy key (PK)  foreign key (FK)  Tabellen samenvoegen  LEFT JOIN  RIGHT JOIN  INNER JOIN  Soorten relaties  Many-to-one  One-to-many  One-to-one  Many-to-many

3 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

4 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

5 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

6 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese SELECT DISTINCT  SELECT DISTINCT categorie FROM product  categorie vervoer voedsel boek

7 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese statistieken  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

8 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Gekoppelde tabellen

9 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Relatie tussen product en producent

10 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese SELECT uit twee gekoppelde tabellen  Selecteer alle producten en koppel daar aan de naam van de producent  SELECT product.*, producent.naam AS producentNaam FROM product LEFT JOIN producent ON product.producentID = producent.ID  IDnaam…producentIDproducentNaam 3tonijn6unilever 4kip6unilever 5step4joop’s fiets …………

11 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese JOIN = SELECT tabel1.*, tabel2.Nm FROM tabel1 LEFT JOIN tabel2 ON tabel1.tabel2ID = tabel2.ID t1.ID t1.Nmt1.t2IDt2.IDt2.Nm 1 aaa11een 2 gghg11een 3 uoig22twee

12 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Drie soorten koppelingen  LEFT JOIN  RIGHT JOIN  INNER JOIN En nog een vierde  FULL JOIN ( bonuspunt voor Paul )

13 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese LEFT JOIN Alle rijen uit de linker tabel, ook als er geen relatie is met een rij 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

14 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese RIGHT JOIN Alle rijen uit de rechter tabel, ook als er geen relatie is met een rij 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

15 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese INNER JOIN Alleen rijen uit de beide tabel, als er een relatie is met een rij uit de andere tabel.  SELECT product.*, producent.naam AS producentNaam FROM product INNER JOIN producent ON product.producentID = producent.ID  IDnaam…producentIDproducentNaam 3tonijn6unilever 5step4joop’s fiets

16 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese % van de koppelingen: ‘LEFT JOIN’ waarvan 80% ook met INNER JOIN kan  Selecteer data uit een primaire tabel en koppel data uit gerelateerde tabellen 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

17 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Aggregaties met een JOIN Selecteer alle producenten met daarbij het aantal producten dat die producent levert. SELECT producent.ID, producent.naam product.ID, product.naam FROM producent LEFT JOIN product ON producent.ID = product.producentID SELECT producent.ID, producent.naam COUNT( product.ID ) AS aantalproducten FROM producent LEFT JOIN product ON producent.ID = product.producentID GROUP BY producent.ID, producent.naam

18 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 )

19 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Many-to-one Product wordt_geleverd_door producent Boek is_geschreven_door auteur Bestelling door klant One-to-many producent levert product auteur schrijft boek klant doet bestelling Many-to-one In de databasetabellen: De rijen in tabel aan de many-kant van de relatie bevat een FK die verwijst naar de PK van gerelateerde rij aan de one-kant van de relatie.

20 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Many-to-many bestelling product  Een aparte tabel met bestellingID-productID paren

21 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Many-to-many  Selecteer van bestelling met ID = 1 alle producten SELECT bestelling_product.aantal, product.ID, product.naam, product.prijs FROM bestelling_product INNER JOIN product ON bestelling_product.productID = product.ID WHERE bestelling_product.bestellingID = 1 AantalproductIDnaamprijs 301Toveren…20 2 3SQL…23

22 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

23 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Welke klanten hebben iets besteld van producent X? Uit welke categorieën doet klant X zijn bestellingen ?

24 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Als je de relaties volgt kan je allerlei informatie uit de database selecteren Alle klanten die iets hebben besteld van producent 1 SELECT DISTINCT klant.* FROM klant INNER JOIN bestelling ON bestelling.klantID = klant.ID INNER JOIN bestelling_product ON bestelling_product.bestellingID = bestelling.ID INNER JOIN product ON product.ID = bestelling_product.productID WHERE product.producentID = 1

25 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese  Tot zover het samenvoegen van tabellen (JOIN)

26 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Subquery SELECT in een SELECT  Twee manier om een subquery te gebruiken  In een selectie criterium  In een berekende kolom  NB: het is altijd mogelijk en vaak zelfs beter om hetzelfde met een JOIN te bereiken.

27 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Subqueries in WHERE … IN  Selecteer klanten die iets hebben besteld  SELECT klant.* FROM klant WHERE klant.ID IN ( SELECT klantID FROM bestelling )  SELECT DISTINCT klant.* FROM klant INNER JOIN bestelling ON klant.ID = bestelling.klantID

28 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Subquerie om iets te berekenen  Selecteer alle producenten en daarbij het aantal producten van die producenten  SELECT producent.ID, producent.naam, (SELECT COUNT(*) FROM product WHERE product.producentID = producent.ID ) AS aantalproducten FROM producent  SELECT producent.ID, producent.naam, COUNT(product.ID) AS aantalproducten FROM producent LEFT JOIN product ON product.producentID = producent.ID GROUP BY producent.ID, producent.Naam

29 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese bonus vraag  Waarom is het eigenlijk niet toegestaan om onderstaande querie te maken  SELECT * FROM (SELECT * FROM klant)

30 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese En dan nu: data manipuleren INSERT UPDATE DELETE

31 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese INSERT Voeg een klant toe aan de tabel ‘klant’ INSERT INTO klant ( voornaam, achternaam ) VALUES ( 'piet', 'jansen') INSERT INTO tabel ( kolomX, kolomY, kolomZ ) VALUES ( waardeX, waardeY, waardeZ ) NB autonumber kolommen worden automatisch ingevuld bijvoordbeeld ID velden

32 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese UPDATE Wijzig de vooraam van klant 1 UPDATE klant SET voornaam = ‘Gijs' WHERE ID = 1 UPDATE tabel SET kolomX = waardeX, SET kolomY = waardeY, SET kolomZ = waardeZ, WHERE ID = 1

33 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese DELETE Verwijder klant 1 DELETE * FROM klant WHERE ID = 1 DELETE * FROM tabel WHERE criterium

34 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Veel gestelde vragen  Als je bij een nieuw product de producentID moet invullen, hoe weet je dan welke producentID je moet hebben? Gewoon de naam van de producent zou toch veel gemakkelijker zijn?

35 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Veel gestelde vragen  Als je bij een nieuw product de categorieID moet invullen, hoe weet je dan wel categorieID je moet hebben? Gewoon de naam van de categorie zou toch veel gemakkelijker zijn?

36 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Veelgestelde vragen INSERT INTO tabel ( kolomX, kolomY ) VALUES ( waardeX, waardeY ) UPDATE tabel SET kolomX = waardeX, SET kolomY = waardeY, WHERE ID = 1 DELETE * FROM tabel WHERE criterium  Waarom zijn INSERT, UPDATE en DELETE zo eenvoudig in vergelijking met SELECT?

37 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Referentiele integriteit

38 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Normalisatie  Alle informatie is slecht één keer in de database opgeslagen.  In plaats van het dubbel opslaan van informatie worden relaties (FK’s ) gebruikt om te verwijzen naar informatie. Bijvoorbeelden:  Niet bij ieder boek de naam van de auteur, maar een verwijzing (FK) naar de auteur in de auteurtabel, waar zijn naam één keer staat.  Niet bij iedere bestelling de adresgegevens van de klant, maar een verwijzing (FK) naar de klant in de klant-tabel, waar de adresgegevens één keer staan.

39 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Oops Wat gebeurd er als je per ongeluk  Je een producent verwijdert, terwijl er nog producten van de producent in de tabel ‘product’ staan?  Als je bij product.producentID een producentID invult die niet bestaat? De database wordt ‘corrupt’

40 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese ‘Referentiele integriteit’  Om te voorkomen dat een database ‘per ongeluk’ corrupt raakt, is het mogelijk om het database managementsysteem de opdracht te geven alle relaties af te dwingen. De RDBMS geeft dan foutmelding als je iets doet wat de database zou corrumperen  Dit afdwingen van de referentiele integriteit is één van de belangrijkste functies van een RDBMS

41 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Integriteit waarborgen = functionaliteit afschermen  De database is zo geprogrammeerd dat geen corrupte data in kunnen.  De programmeur van de Logic module kan geen requests doen die de data corrupt maken. => Minder kans op bugs.

42 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese Methodes om referentiele integriteit te waarborgen  DBMS controleert en geen foutmeldingen als er iets gebeurd wat de database corrupt maakt.  ‘TRIGGERS’ in bouwen die bij gebeurtenissen de database update.  ‘STORED PROCEDURES’ ( een serie SQL queries ) die de integriteit in tak houdt.  ‘TRANSACTION PROCESSING’ : bij een foutmelding worden alle voorgaande queries teruggedraaid.  PHP: Dataobjecten: alle queries moeten via een dataobject. Het object is zo geprogrammeerd dat de database integer blijft.

43 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese TOETS Wat kan je verwachten

44 Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese TOETS  Begrippen omschrijven  SQL queries maken  Selecties in gewone taal bedenken Niveau voor een V : alle ‘*’ opdrachten uit “readerSQL.doc”


Download ppt "Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -"

Verwante presentaties


Ads door Google