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

Slides:



Advertisements
Verwante presentaties
Module 7 – Hoofdstuk 5 (1) SQL – een begin.
Advertisements

Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Meerdere tabellen: Relaties en Joins
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Databases Informatica Ga verder met een muisklik. SQL FCO DBMS NE FA
Module 7 – Hoofdstuk 5 (4) SQL – voorwaarden aan groepen en meerdere tabellen.
Databank van een restaurant Download op Twee tabellen: Klanten: Alle klanten die minstens.
HALLO OPLETTEN : Waarom sql DOEN : Introductie opdracht
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Het selecteren van data uit meerdere gekoppelde tabellen
SQL Les 01 & 02. SELECT Weergeven van alle gegevens uit een tabel: SELECT * FROM tlbPersonen; Weergeven van alle personen die uit Aruba komen: SELECT.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
LauwersCollege Buitenpost Informatica
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
ontwerp een datamodel Criteria voor een goed model Ontwerppatronen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Download en installeer de gereedschappen
Download en installeer de gereedschappen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
ontwerp een datamodel Criteria voor een goed model Ontwerppatronen
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
HALLO OPLETTEN : Waarom sql DOEN : Introductie opdracht
Vorige week: Referentiele integriteit
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
SQL (structured Query Language) DDL (Data Definition Language) DML (Data Manipulation Language) Ontwerp databaseBevraag database.
Workshop PHP Een productencatalogus Met database.
Statistische functies (aggregaatfuncties)
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
LauwersCollege Buitenpost Informatica
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
7 Databases. STRUCTURED QUERY LANGUAGE Bij het relationele model hoort een programmeertaal waarmee de database benaderd kan worden. In de praktijk wordt.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
24/04/2015IT-Assurance1 IT-Assurance deeltijd 4. Inleiding SQL Introductie in de basisfuncties Bijbehorend lesmateriaal: -AIV-boek van Derksen en Crins.
Les 6 Toetsbespreking Introductie eindopdracht. toets  Download goede antwoorden en vergelijk met je eigen score.  Cijfer < 5.5 = herkansing week 4.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hoofdstuk 11 Databasemanagementsystem. hoofdstuk 112 STROKENDIAGRAMMEN llnrvoornaamtussenvachternaamstraathuisnummerpostcodeplaatstelefoongeslachtgebdatumklas.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
BIMAIV03 Les A1 BIMAIV03 Les A1 Databases. De gegevens in een database vormen de grondstof voor informatie De informatie wordt opgevraagd in de taal met.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Week 3 BIMAIV03 Les B3 BIMAIV03 Les B3. Opdracht 1 Van een artikel mogen maximaal 300 stuks verkocht worden. Verschillende klanten bestellen een aantal.
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
Week 6 BIMAIV03 les B1. DML en DDL ata D anipulation M anguage L ata D efinition D anguage L.
Week 1 BIMAIV03 Les B2 BIMAIV03 Les B2. Uit het voorgaande... CREATE TABLE... Opdracht om een nieuwe tabel binnen de database te creëren. Aandachtspunten.
ANALYSE 3 INFANL01-3 WEEK 6 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Subqueries met correlaties ▸ Subqueries zonder correlaties ▸ Views ▸
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
SQL Cursus deel
LauwersCollege Buitenpost Informatica
SQL Les February 2019.
SQL Les 3 17 February 2019.
SQL Les 3 23 February 2019.
SQL Les 7 24 February 2019.
SQL Les 6 14 April 2019.
SQL Les 9 12 May 2019.
SQL Les 4 12 May 2019.
– Software development fundamentals
SQL Les May 2019.
Transcript van de presentatie:

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’

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

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 SELECT DISTINCT  SELECT DISTINCT categorie FROM product  categorie vervoer voedsel boek

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

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

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

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 …………

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

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 )

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

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

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

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

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

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 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.

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

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 Welke klanten hebben iets besteld van producent X? Uit welke categorieën doet klant X zijn bestellingen ?

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

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

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.

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

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

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)

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

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

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

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

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?

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?

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?

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

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.

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’

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

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.

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.

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

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”