24/04/2015IT-Assurance1 IT-Assurance deeltijd 4. Inleiding SQL Introductie in de basisfuncties Bijbehorend lesmateriaal: -AIV-boek van Derksen en Crins § Access database van Wecycle -Oefenopdrachten SQL
Doelstellingen SQL en QBE kunnen positioneren als hulpmiddel om informatie uit relationele databases te halen. Het verschil tussen SQL en QBE kunnen aangeven, en een beeld van de mogelijkheden ervan hebben. Met SQL bewerkingen kunnen uitvoeren van gemiddelde complexiteit. Enkele eenvoudige functies van SQL kunnen toepassen. 24/04/2015IT-Assurance2
24/04/2015IT-Assurance3 Structuur SQL SELECT (kenmerk1, kenmerk2, etc.) FROM (naam tabel) WHERE (voorwaarde);
24/04/2015IT-Assurance4 Database Wecycle, tabel: KLANT SELECT * FROM KLANT * betekent: alle velden (=kolommen=attributen=kenmerken) Deze SQL-opdracht is een selectie zonder voorwaarden
24/04/2015IT-Assurance5 Selectie met voorwaarde SELECT Klantnr, Postcode FROM KLANT WHERE Woonplaats = “Arnhem”; Antwoord: 7001, 1983AC 7006, 6382DF
24/04/2015IT-Assurance6 Database Wecycle, Tabel ORDER SELECT * FROM ORDER;
24/04/2015IT-Assurance7 Weglaten van dubbele occurrences SELECT Vertegenwoordiger FROM ORDER; Antwoord: Derksen, Th. Crins, H. Derksen, Th. Crins, H. Pietersen, P. Derksen, Th. SELECT DISTINCT (Vertegenwoordiger) FROM ORDER; Antwoord:Derksen, Th. Crins, H. Pietersen, P.
24/04/2015IT-Assurance8 Gebruik van Wildcards (“jokers”) * = vervangt alle karakters ? = vervangt één karakter Geef alle klantnummers van de klanten waarvan de woonplaats begint met een Z: SELECT Klantnr FROM KLANT WHERE Woonplaats LIKE Z* ; Antwoord: 7002, 7004 Geef van de klanten de woonplaatsen waarvan de 2e letter een “e” is; SELECT Woonplaats FROM KLANT WHERE Woonplaats LIKE ?e* ; Antwoord : Zevenaar, Weert, Teteringen
24/04/2015IT-Assurance9 Gebruik van AND, OR en NOT Geef de ordernrs van de klanten 7001 en 7002: SELECT Ordernr FROM ORDER WHERE Klantnr = 7001 OR Klantnr = 7002; Antwoord: 101, 104, 105, 106 Geef de ordernrs uit het jaar 2003 van de klanten die als vertegenwoordiger NIET Derksen hebben: SELECT Ordernrs FROM ORDER WHERE (NOT Vertegenwoordiger = Derksen) AND (Orderdatum > AND Orderdatum < ); Antwoord: 102, 105
24/04/2015IT-Assurance10 Het gebruik van COUNT, MIN, MAX, SUM, AVG Hoeveel verschillende vertegenwoordigers zijn er? SELECT COUNT (DISTINCT Vertegenwoordiger) FROM ORDER; Antwoord: 3 Wat is het duurste artikel?(of goedkoopste) SELECT MAX(Prijs)SELECT MIN(Prijs)FROM ARTIKEL; Antwoord: € 955,00Antwoord: € 12,00 Geef het totaal-aantal bestellingen van artikel 1011:(of gemiddelde) SELECT SUM (Aantal)SELECT AVG(Aantal)FROM ORDERREGELWHERE Artikelnr = 1011; Antwoord: 6Antwoord: 3
24/04/2015IT-Assurance11 Het sorteren van gegevens Geef de namen van de klanten op alfabetische volgorde (oplopend) SELECT Klantnaam FROM KLANT ORDER BY Klantnaam ASC; Geef de omschrijvingen van de artikelen op alfabetische volgorde (aflopend) SELECT Omschrijving FROM ARTIKEL ORDER BY Omschrijving DESC; Geef in oplopende volgorde van de naam van de vertegenwoordigers per vertegenwoordiger zijn klantnummers (zonder dubbele) in dalende volgorde: SELECT DISTINCT(Vertegenwoordiger, Klantnr) FROM ORDER ORDER BY Vertegenwoordiger ASC, Klantnr DESC;
24/04/2015IT-Assurance12 Gebruik van groepering al of niet met voorwaarde Geef per order het aantal orderregels: SELECT Ordernr, COUNT(*) FROM ORDERREGEL GROUP BY Ordernr; Geef per order het aantal orderregels, als het aantal orderregels groter is dan 2: SELECT Ordernr, COUNT(*) FROM ORDERREGEL GROUP BY Ordernr HAVING COUNT(*) > 2; Het kenmerk bij GROUP BY moet ook altijd bij SELECT staan HAVING wordt dus altijd gebruikt in combinatie met GROUP BY De SELECT bij een GROUP BY moet altijd een samenvattende functie hebben als COUNT, MAX, MIN, AVG, SUM
24/04/2015IT-Assurance13 Het combineren van meerdere tabellen Geef van elke klant zijn naam met de bijbehorende ordernummers: In dit voorbeeld eerst een zogenoemde JOIN SELECT Klantnaam, ordernr FROM KLANT, ORDER WHERE KLANT.Klantnr=ORDER.Klantnr; (Als de (kenmerk- of) kolomnamen in beide tabellen hetzelfde zijn, moeten ze voorafgegaan worden door de tabelnaam!) Dan nu 2 voorbeelden van een SUBSELECT:SELECT OrdernrFROM ORDER WHERE Klantnr INWHERE Klantnr =(SELECT KlantnrFROM KLANT WHERE Woonplaats = Arnhem);WHERE Klantnaam = Lant, K.); IN gebruik je als de tweede SELECT méér dan één rij oplevert, anders gebruik je =
24/04/2015IT-Assurance14 Een paar complexere voorbeelden Bereken van elke order het totaalbedrag: SELECT Ordernr, “Totaalbedrag”, SUM (ORDERREGEL.Aantal*ARTIKEL.Prijs) FROM ORDERREGEL, ARTIKEL WHERE ORDERREGEL.Artikelnr = ARTIKEL.Artikelnr GROUP BY Ordernr Als klanten bij een totaalbedrag > € 100,-- korting krijgen, zou je dus die orders kunnen selecteren door: SELECT Ordernr, “Totaalbedrag”, SUM (ORDERREGELAantal*ARTIKEL.Prijs) FROM ORDERREGEL, ARTIKEL WHERE ORDERREGEL.Artikelnr = ARTIKEL.Artikelnr GROUP BY Ordernr HAVING SUM (ORDERREGEL.aantal*ARTIKEL.Prijs)> € 100,--
24/04/2015IT-Assurance15 Database “WECYCLE”
24/04/2015IT-Assurance16 Database Wecycle, Query orderregels Geef de orderregels van order 101: SELECT ARTIKEL.Artikelnr, ARTIKEL.Omschrijving, ORDERREGEL.Aantal, ORDERREGEL.Aantal*ARTIKEL.Prijs, ORDERREGEL.Leverdatum FROM ORDERREGEL, ARTIKEL WHERE (ORDERREGEL.Artikelnr = ARTIKEL.Artikelnr AND ORDERREGEL.Ordernr = 101);
24/04/2015IT-Assurance17 Query By Example; Ordernr 101 Geef de orderregels van Order 101: