Holland Casino Eredivisie

Maat: px
Weergave met pagina beginnen:

Download "Holland Casino Eredivisie"

Transcriptie

1 Holland Casino Eredivisie bladzijde 1 Holland Casino Eredivisie 1 De formulering van het probleem Om aan te tonen welke ongekende mogelijkheden de Jet Engine biedt en om S(impel)QL aan een grondige test te onderwerpen is geprobeerd een database te maken, bedoeld om de voetbaluitslagen in op te nemen zoals de KNVB die op haar website publiceert. Daarbij is uitgegaan van de Holland Casino Eredivisie van het voetbalseizoen 2004/05 waarbij de wedstrijduitslagen verwerkt zijn tot en met 10 februari Niet omdat dit zomaar een datum is, maar omdat de stand op die datum nog een punt van zorg openbaart omdat er iets bijzonders aan de hand is. De stand van de competitie op 10 februari volgens de KNVB Elftal G W GL V Punten DPV DPT 1 PSV AZ Ajax Feyenoord Vitesse FC Utrecht SC Heerenveen Roda JC RKC Waalwijk NAC FC Twente FC Groningen Willem II NEC ADO Den Haag RBC Roosendaal De Graafschap FC Den Bosch We willen deze stand zelf kunnen maken aan de hand van de wekelijkse uitslagen van gespeelde wedstrijden. Die uitslagen weer is de bron de KNVB zijn in de volgende vorm gegoten:

2 Holland Casino Eredivisie bladzijde 2 Datum Thuis Uit Uitslag RKC Waalwijk - 1 FC Groningen FC Utrecht - 1 NAC Ajax - 1 FC Twente Vitesse - 1 Roda JC SC Heerenveen - 1 AZ ADO Den Haag - 1 FC Den Bosch Willem II - 1 NEC De Graafschap - 1 Feyenoord De tabel is niet zo geschikt als hij op het eerste gezicht lijkt. Het gebruikte datumformat is voor sql ongeschikt en de laatste kolom is bij voorkeur in tweeën te splitsen. Bovendien kunnen we de aanduiding dat het om het eerste elftal gaat wel missen. Het omzetten van de oorspronkelijk gepubliceerde tabel naar een voor ons doel geschikt format is een kwestie van ETL (extraction, transformation en loading). Laten we ons daarmee hier onze hersens niet pijnigen. We doen net alsof de data van de gespeelde wedstrijden aangeleverd worden als: datum thuis uit dpv dpt RKC Waalwijk FC Groningen FC Utrecht NAC Ajax FC Twente Vitesse Roda JC SC Heerenveen AZ ADO Den Haag FC Den Bosch Willem II NEC De Graafschap Feyenoord PSV RBC Roosendaal NEC FC Utrecht De opdracht die we ons in deze kleine en simpel ogende casus stellen is tweeledig. We willen een database realiseren die alle valkuilen tot inconsistentie van gegevens vermijdt en op een willekeurige datum de stand van de competitie kunnen produceren Alle uitslagen tot en met 10 februari staan in het script wedstrijd.sql. Voordat we dat script op onze database los kunnen laten moeten we eerst de database maken. Dat is met behulp van S(impel)Ql een peulenschil. We besluiten de database naar de Holland Casino Eredivisie te vernoemen en gaan vervolgens denken over een zodanig veilig ontwerp dat aan het eerste aspect van de opdracht voldaan is. Daarna proberen we ook het tweede deel van de opdracht te realiseren waarbij we de regel hanteren dat elke gewonnen wedstrijd drie wedstrijdpunten en elke gelijkgespeelde wedstrijd één wedstrijdpunt oplevert. Verloren wedstrijden dragen niet bij aan het totaal.

3 Holland Casino Eredivisie bladzijde 3 2 De bedrijfsregels op een rijtje Het lijkt zo simpel; maar om straks fouten bij invoer van de rest van de gespeelde wedstrijden te voorkomen is meer nodig dan op het eerste gezicht vermoed kan worden. Er schuilen behoorlijk wat addertjes onder het gras. We beginnen met het formuleren van een aantal bedrijfsregels die de KNVB hanteert en die we om in de komende paragrafen gemakkelijk naar deze regels te kunnen verwijzen van een nummering voorzien hebben. B.1 De speeldata moeten binnen het seizoen vallen. Dat wil voor het seizoen 2004/05 zeggen tussen en B.2 Alleen clubs uit de eredivisie mogen als thuis- of uitploeg worden opgenomen. B.3 Een club speelt maar één keer tegen elke tegenstander een thuiswedstrijd. B.4 Een club speelt maar één keer tegen elke tegenstander een uitwedstrijd (overbodige regel die volledig wordt afgedekt door de vorige!). B.5 Een club kan op één dag slechts één wedstrijd spelen. B.6 Voor het aantal doelpunten (zowel voor als tegen) mag nooit een negatief getal genoteerd worden. B.7 Alle gegevens zijn noodzakelijk; er mag geen enkel gegeven ontbreken. Nou was laatst op de radio te vernemen dat Feyenoord hoofdzakelijk tegen zichzelf liep te voetballen... Misschien moet je zo'n opmerking niet al te letterlijk nemen maar hij roept wel de vraag op of we niet als bedrijfsregel moeten formuleren dat de thuisclub een andere moet zijn dan de uitclub. Met andere woorden: moeten we niet uitsluiten dat de thuisspelende club dezelfde is als de uitspelende? Als we de situatie wat grondiger bekijken blijkt een dergelijke regel overbodig te zijn. De regel dat een club maar één wedstrijd per dag kan spelen laat zich splitsen in een drietal op het eerste gezicht onnodig ingewikkeld geformuleerde regels. B.5.1 Een club speelt per dag hooguit één keer thuis. B.5.2 Een club speelt per dag hoogstens één keer uit. B.5.3 Een club speelt op dezelfde dag nooit zowel een thuis- als een uitwedstrijd. En B.5.3 sluit nou precies een wedstrijd FC Groningen tegen FC Groningen uit. We gaan er gemakshalve aan voorbij dat er zich bijzondere situaties kunnen voordoen zoals wedstrijden die onderbroken worden en op een andere dag worden uitgespeeld of het bij wijze van strafmaatregel drie wedstrijdpunten in mindering brengen. Dergelijke situaties vragen om ad hoc oplossingen waar we hier geen boodschap aan hebben. Het zal blijken dat zonder al die bijzonderheden het probleem al groot genoeg is.

4 Holland Casino Eredivisie bladzijde 4 3 Alle begin is (niet) moeilijk Het idee van een tabel begint met een kolomindeling waarbij we de kolommen een naam en een type toebedelen. Bovendien moeten we een naam voor de tabel bedenken. De keuze is gevallen op de tabelnaam wedstrijd terwijl de kolomnamen datum, thuis, uit, dpv en dpt voor de hand liggen na lezing van het voorafgaande. Als kolomtypen kiezen we in dezelfde volgorde DATE, TEXT(20), TEXT(20), INTEGER en INTEGER. En vervolgens dienen de beperkingsregels of constraints zich aan waarmee we de vastgestelde bedrijfsregels moeten afdekken. We hebben achtereenvolgens in sql de beschikking over constraints in de vorm van de PRIMARY KEY, de FOREIGN KEY, de NOT NULL-, de UNIQUE- en de CHECK-constraint. Met deze vijf zullen we de klus moeten klaren. Gewapend met de in jaren opgebouwde kennis komen we al snel tot een constructie waarmee aan het merendeel van de bedrijfregels is voldaan CREATE TABLE wedstrijd (datum DATE NOT NULL, thuis TEXT(20), uit TEXT(20), dpv INTEGER NOT NULL, dpt INTEGER NOT NULL, PRIMARY KEY (thuis, uit), UNIQUE (datum, thuis), UNIQUE (datum, uit), CHECK (dpt >= 0), CHECK (dpv >= 0), CHECK (datum BETWEEN # # AND # #)); script1.sql Ga als u het effect van dit script wilt proberen na of u de datumconversie van S(impel)QL gebruikt. Omdat de achtste van de dertiende en de vijfde van de tweeëntwintigste toevallig niet geldig zijn zal Jet SQL aan deze data de juiste draai geven. Maar dat geldt zeker niet voor alle andere in dit datumformaat genoteerde data. De bedrijfsregels waaraan door dit script tegemoet gekomen wordt zijn B.1, B.3, B.4, B5.1, B.5.2, B.6 en B.7. Blijven B.2 en B.5.3 over.

5 Holland Casino Eredivisie bladzijde 5 4 Een kleine aanpassing Nog een opmerking over de eerste bedrijfsregel. Als we in de wedstrijdentabel een wedstrijddatum invullen moet die volgens het scriptje hierboven liggen tussen de twee seizoenuitersten. Dat betekent dat we in maart alvast de uitslagen van april en mei kunnen invoeren. En dat is onzinnig. Dus proberen we het uit te sluiten door als bovengrens de systeemdatum op te nemen. We kunnen nog wel de wedstrijdtabel met terugwerkende kracht bijwerken maar geen voorschot op toekomstige wedstrijduitslagen nemen. Om de systeemdatum te kunnen gebruiken moeten we een klein uitstapje maken naar de VBA-functies waar Jet SQL uitstekend mee overweg kan. S(impel)QL trouwens ook, wat alleen al te zien is aan de manier waarop de syntax herkend wordt. Om gesjoemel met wedstrijden zoveel mogelijk tegen te gaan is een kleine aanpassing van het script nodig waarbij we de bovengrens van het seizoen vervangen door de huidige datum. VBA kent hiervoor de functie DATE(). DROP TABLE wedstrijd; CREATE TABLE wedstrijd (datum DATE NOT NULL, thuis TEXT(20), uit TEXT(20), dpv INTEGER NOT NULL, dpt INTEGER NOT NULL, PRIMARY KEY (thuis, uit), UNIQUE (datum, thuis), UNIQUE (datum, uit), CHECK (dpt >= 0), CHECK (dpv >= 0), CHECK (datum BETWEEN # # AND DATE())); script2.sql Om het geheel te kunnen testen is een script ontworpen om de wedstrijdtabel te vullen. In het script (zie volgende bladzijde) wordt gepoogd alle bedrijfsregels met voeten te treden. Slechts de eerste twee wedstijden verdienen te worden geaccepteerd; het zijn immers de echte uitslagen van onlangs gespeelde voetbalpartijtjes. Als we de zaak aan een test onderwerpen blijkt er nog een aantal onmogelijke wedstrijden door de mazen van de constraints te glippen. Daar gaan we in de komende paragrafen iets aan doen maar eerst volgt een minimale aanpassing waar we straks de vruchten van plukken. Behalve van de VBA functie DATE() ontmoeten we in dit artikel nog twee van dergelijke functies in de vorm van CSTR(<arg>) en IIF(<voorwaarde>, <arg1>,<arg2>). CSTR (convert to string) promoveert zowat elk argument tot een tekst. Of we nu een datum of een getal als argument vermelden, het resultaat is steeds een weergave van het argument in tekstuele vorm. De functie IIF (immediate if) kennen we ongetwijfeld van MS Excel en heeft als functieresultaat de waarde van arg1 of arg2, afhankelijk of de voorwaarde bevestigend of ontkennend beantwoord wordt.

6 Holland Casino Eredivisie bladzijde 6 DELETE * FROM wedstrijd; (# #, 'FC Twente', 'Feyenoord', 0, 0); -- correct (# #, 'Feyenoord', 'Vitesse', 1, 2); -- correct (# #, 'AZ', 'Ajax', 0, 0); -- B.1 (# #, 'FC Heerenveen', 'PSV', 3, 0); -- B.1 DATE() (# #, 'FC Twente', 'AZ', 1, 1); -- B.1 (# #, 'Sparta', 'AZ', 2, 1); -- B.2 (# #, 'FC Twente', 'Vittese', 1, 1); -- B.2 (# #, 'FC Twente', 'Feyenoord', 1, 5); -- B.3, B4 (# #, 'PSV', 'FC Twente', 1, 2); -- B.5.1 (# #, 'Feyenoord', 'PSV', 1, 0); -- B.5.2 (# #, 'NAC', 'NAC', 0, 1); -- B.5.1, B.5.2 (# #, 'Roda JC', 'RKC Waalwijk', 3, -1); -- B.6 (# #, 'FC Heerenveen', 'NEC', -6, 0); -- B.6 (# #, 'AZ', 'Willem II', 3, NULL); -- B.7 (# #, 'Roda JC', 'NAC', NULL, 1); -- B.7 (# #, 'De Graafschap', NULL, 3, 1); -- B.7 (# #, NULL, 'Feyenoord', 3, 1); -- B.7 (NULL, 'ADO Den Haag', 'RBC Roosendaal', 1, 0); -- B.7 script3.sql We zijn al een heel eind maar het moeilijkste deel moet nog komen!

7 Holland Casino Eredivisie bladzijde 7 5 Foutmeldingen Bij de test die we natuurlijk met behulp van script3 uitvoeren komen een paar rijen ten onrechte in de wedstrijdentabel terecht. Veel meer tot tevredenheid stemt het dat de meeste door het script voorgestelde rijen als gevolg van de constraints die al zijn aangebracht worden geweerd uit de database. Minder fraai is de manier waarop we als gebruiker hiervan op de hoogte worden gesteld. Niet iedereen is in staat zinnen als "Een of meer waarden zijn strijdig met de validatieregel Check_2658B1D7_1DDC_4AD5 die is ingesteld voor wedstrijd." te waarderen. Het lezen laat staan begrijpen van hexadecimale aanduidingen is niet voor iedereen weggelegd. Wel aardig van het systeem is dat de wetmatigheid die we overtreden blijkbaar een CHECK-constraint is (maar dat zagen we ook al aan de veel vriendelijker aandoende term validatieregel). We kunnen voor constraints die we meegeven zelf een naam bedenken waarbij we waarschijnlijk nooit Check_2658B1D7_1DDC_4AD5 zullen kiezen. Het hoeft niet, maar foutmeldingen worden begrijpelijker. Bovendien en daarmee lopen we een klein beetje vooruit op wat nog gaat komen hebben we die naam soms echt nodig en moeten we hem zelfs intikken. Zelf een naam geven kan met het woordje CONSTRAINT, gevolgd door een zelf gekozen aanduiding. Het aangepaste script laat zien hoe dat moet. DROP TABLE wedstrijd; CREATE TABLE wedstrijd (datum DATE NOT NULL, thuis TEXT(20), uit TEXT(20), dpv INTEGER NOT NULL, dpt INTEGER NOT NULL, CONSTRAINT c1 PRIMARY KEY (thuis, uit), CONSTRAINT c2 UNIQUE (datum, thuis), CONSTRAINT c3 UNIQUE (datum, uit), CONSTRAINT c4 CHECK (dpv >= 0), CONSTRAINT c5 CHECK (dpt >= 0), CONSTRAINT c6 CHECK (datum BETWEEN # # AND DATE())); script4.sql Opnieuw script3 uitvoeren levert al heel wat vriendelijker foutmeldingen. Eventueel kunnen ook de NOT NULL-constraints van een naam voorzien worden. Verboden is het niet maar de naam zal zelden nodig zijn en het script wordt er niet leesbaarder op.

8 Holland Casino Eredivisie bladzijde 8 6 Referentiële integriteit We keren terug naar het eigenlijke probleem waar nog twee bedrijfsregels openstaan. Bedrijfsregel B2 is op zich niet moeilijk en laat zich naar keuze verwezenlijken door een CHECK-constraint of een FOREIGN KEY. In beide gevallen hebben we een extra tabel nodig waarin de namen van de elftallen staan die in de wedstrijdtabel mogen voorkomen. We noemen deze tabel eredivisie en laten hem precies uit één kolom club bestaan waarvoor we het type TEXT(20) kiezen. De enige kolom doet tevens dienst als sleutel (die hebben we nodig om in de wedstrijdentabel een FOREIGN KEY te definieren). Als we de keuze hebben tussen een FOREIGN KEY en een CHECK-constraint gaat de voorkeur sterk uit naar de eerste. Een foreign key is nou eenmaal als index gedefinieerd en een check-constraint niet. En juist die index zorgt voor de nodige snelheid. Omdat we de uitslagentabel laten verwijzen naar de eredivisieclubs moeten we als eerste de tabel met de namen van die clubs creëren. We hebben de tabel erg summier gehouden. De structuur van de tabel is dan ook allesbehalve ingewikkeld te noemen. CREATE TABLE eredivisie (club TEXT(20), PRIMARY KEY (club)); Met eenvoudige toevoegqueries laat de tabel zich vullen. script5a.sql INSERT INTO eredivisie VALUES('ADO Den Haag'); INSERT INTO eredivisie VALUES('Ajax');... script5b.sql Voor de overige zestien eredivisieclubs zijn overeenkomstige regels te bedenken. Om tikwerk te voorkomen is in een combinatie van beide scripts in de vorm van script5.sql voorzien. Nu terug naar de wedstrijdentabel en daarin met twee foreign keys afdwingen dat het om clubs uit de eredivisie gaat. Waarom we die foreign keys ON UPDATE CASCADE (trapsgewijs bijwerken) hebben gedefinieerd leggen we later uit. En waarschijnlijk ziet u ook niet waarom we de rijen van de eredivisietabel gedurende het lopende seizoen zouden willen bijwerken...

9 Holland Casino Eredivisie bladzijde 9 DROP TABLE wedstrijd; CREATE TABLE wedstrijd (datum DATE NOT NULL, thuis TEXT(20), uit TEXT(20), dpv INTEGER NOT NULL, dpt INTEGER NOT NULL, CONSTRAINT c1 PRIMARY KEY (thuis, uit), CONSTRAINT c2 UNIQUE (datum, thuis), CONSTRAINT c3 UNIQUE (datum, uit), CONSTRAINT c4 CHECK (dpv >= 0), CONSTRAINT c5 CHECK (dpt >= 0), CONSTRAINT c6 CHECK (datum BETWEEN # # AND DATE()), CONSTRAINT c7 FOREIGN KEY (thuis) REFERENCES eredivisie(club) ON UPDATE CASCADE, CONSTRAINT c8 FOREIGN KEY (uit) REFERENCES eredivisie(club) ON UPDATE CASCADE); script6.sql Natuurlijk probeert u weer of de onmogelijke uitslagen van script3 geaccepteerd worden. Het zijn inderdaad minder foute uitslagen dan voorheen: de wedstrijden van Sparta en Vittese zijn geweigerd! We schieten al een heel eind op maar zitten nog steeds met de vijfde bedrijfsregel in onze maag. We zijn nog steeds in staat een club als Feyenoord twee keer op dezelfde dag te laten voetballen.

10 Holland Casino Eredivisie bladzijde 10 7 Vervolmaking Natuurlijk hebben we het moeilijkste tot het laatst bewaard. Maar misschien valt het wel mee. In Jet SQL is het mogelijk om check-constraints gegevens op allerlei manieren te laten valideren. Bij andere database management systemen zijn dit soort constraints vaak minder flexibel en mag bijvoorbeeld de validatie alleen betrekking hebben op de gegevens in de rij die op dat moment bewerkt wordt. Op die manier hebben we ook de constraints c4, c5 en c6 ingezet. Op het moment van validatie zijn alleen gegevens uit de rij zelf betrokken. Jet SQL kan echter op dat moment ook andere gegevens raadplegen. Uit de tabel zelf waarin de validatieregel een rol vervult, maar ook uit andere tabellen of zelfs verenigingen van tabellen (joins). We hebben daar in de vorige paragraaf al een beetje op gezinspeeld toen we beweerden dat de referentiële integriteit ook met een check-constraint kan worden afgewongen. Hoe dat in zijn werk gaat ziet u in het volgende fragment waarbij we weer de wedstrijdtabel als voorbeeld nemen.... CONSTRAINT c7 CHECK (thuis IN (SELECT club FROM eredivisie)),... Er is hier sprake van een subquery waarbij de constructie eigenlijk hetzelfde is als bij gebruik van een subquery in de where clause van een normale selectquery. De haakjes (één paar voor de subquery en één paar voor de check-constraint) vertroebelen de zaak een beetje. Maar daar is overheen te komen. Het wordt moeilijker als de subquery een selectie betreft op de tabel die we nou net aan het creëren zijn. Als de validatie uitsluitend op één kolom betrekking heeft valt nog wel iets te bereiken. We worden gedwongen onze toevlucht tot een list te zoeken als dat niet het geval is. In onze wedstrijdentabel proberen we te voorkomen dat we een club een thuiswedstrijd laten spelen op dezelfde datum waarop die club ook al een uitwedstrijd heeft afgewerkt. (In de definitieve versie moeten we ook voorkomen dat een club een uitwedstrijd krijgt toebedeeld als op dezelfde datum al een thuiswedstrijd gespeeld is!) Intuïtief (iedereen heeft klompen) voelen we aan dat we een subquery krijgen die zoiets op moet leveren als SELECT uit, datum FROM wedstrijd; en dat dan de combinatie (thuis, datum) daarin niet voor mag komen. Twee kolommen, dus moeten we een list verzinnen. We maken van twee kolommen één. Klein probleem daarbij is wel dat de kolommen uit en datum van een verschillend type zijn. Maar daar hebben we de oplossing al voor aangestipt. We passen een VBA-functie toe om de twee kolommen aaneen te smeden.

11 Holland Casino Eredivisie bladzijde 11 Script7 bevat de twee benodigde constraints de we voor de afwisseling a1 en a2 gedoopt hebben. DROP TABLE wedstrijd; CREATE TABLE wedstrijd (datum DATE NOT NULL, thuis TEXT(20), uit TEXT(20), dpv INTEGER NOT NULL, dpt INTEGER NOT NULL, CONSTRAINT c1 PRIMARY KEY (thuis, uit), CONSTRAINT c2 UNIQUE (datum, thuis), CONSTRAINT c3 UNIQUE (datum, uit), CONSTRAINT c4 CHECK (dpv >= 0), CONSTRAINT c5 CHECK (dpt >= 0), CONSTRAINT c6 CHECK (datum BETWEEN # # AND DATE()), CONSTRAINT c7 FOREIGN KEY (thuis) REFERENCES eredivisie(club) ON UPDATE CASCADE, CONSTRAINT c8 FOREIGN KEY (uit) REFERENCES eredivisie(club) ON UPDATE CASCADE, CONSTRAINT a1 CHECK (thuis + CSTR(datum) NOT IN (SELECT uit + CSTR(datum) FROM wedstrijd)), CONSTRAINT a2 CHECK (uit + CSTR(datum) NOT IN (SELECT thuis + CSTR(datum) FROM wedstrijd))); script7.sql Eindelijk lijkt het erop dat we het eerste deel van de opdracht die we onszelf stelden naar tevredenheid hebben afgerond. Nogmaals uitproberen van script2 levert perfect de lijst van de twee geoorloofde wedstrijden op. Ons systeem (of eigenlijk systeempje) houdt zich keurig aan alle bedrijfsregels.

12 Holland Casino Eredivisie bladzijde 12 8 Tenslotte We hebben nog twee kleine verrassingen voor u in petto. Of liever: het systeem eentje en wij eentje. U wist al dat u de tabel eredivisie pas te verwijderen is als eerst de tabel wedstrijd overboord gegooid is? Dat komt, omdat zolang als de tabel wedstrijd bestaat, de tabel eredivisie aanwezig moet zijn vanwege de in wedstrijd bestaande foreign keys. Maar probeert u met DROP TABLE wedstrijd; de tabel wedstrijd te verwijderen, zal database op een tamelijk kryptische manier hiertegen protesteren. "De DDL kan in deze tabel niet worden uitgevoerd, omdat er door voorwaarde van tabel naar wordt verwezen" De tabel wedstrijd heeft de tabel wedstrijd nodig en dus moet eerst de tabel wedstrijd verwijderd worden vóórdat de tabel wedstrijd verwijderd kan worden. Een verhaal van de kip en het ei, dat alleen is op te lossen door eerst de beperkingen die door de constraints a1 en a2 zijn opgelegd weg te nemen met ALTER TABLE wedstrijd DROP CONSTRAINT a1; ALTER TABLE wedstrijd DROP CONSTRAINT a2; In het voorlopig definitieve script (knvb1.sql) hebben we deze regels opgenomen. Dat brengt ons bij de tweede verrassing. U hebt zich ongetwijfeld afgevraagd waarom we bij de definitie van de twee foreign keys zonodig ON UPDATE CASCADE moesten toevoegen. Met de foreign keys voorkomen we dat we uitslagen allerlei clubs als Sparta, Emmen of zelfs FC Stormvogels aan de wedstrijdentabel kunnen toevoegen. Zelfs tikfouten als Feijenoord of Ajaks worden afgestraft. Maar wat we niet kunnen voorkomen zijn schrijffouten als FEYenoord en ajax. In het onderstaande script (script8.sql) is opzettelijk een groot aantal van dit soort fouten geslopen.

13 Holland Casino Eredivisie bladzijde 13 DELETE FROM wedstrijd; (# #, 'RKC WaAlwiJK', 'fc groningen', 3, 0); (# #, 'fc UtRecht', 'Nac', 2, 0); (# #, 'AjaX', 'fc TwENte', 1, 2); (# #, 'ViTESse', 'roda jc', 3, 0); (# #, 'ajax', 'ADO Den Haag', 0, 0); (# #, 'NAC', 'SC heerenveen', 1, 1); (# #, 'RKC Waalwijk', 'psv', 1, 4); (# #, 'Vitesse', 'RBC roosendaal', 1, 3);... script8.sql Het resultaat van dit script het zijn allemaal uitslagen uit de werkelijkheid is ronduit bedroevend: Ondanks alle voorzorgsmaatregelen zal dit overzicht nauwelijks een schoonheidsprijs verdienen. De Jet Engine is niet erg gevoelig voor wat betreft het gebruik van hoofdletters en kleine letters. Natuurlijk is het zo, dat niemand het in zijn hoofd haalt zoveel vergissingen te maken al we in script8 begaan hebben. Maar door te overdrijven wordt het effect van een op het eerste gezicht nauwelijks iets uithalend sql-statement misschien nog duidelijker. We doelen hier op:

14 Holland Casino Eredivisie bladzijde 14 UPDATE eredivisie SET club = club; Voer de opdracht uit en bekijk daarna de lijst van uitslagen in de wedstrijdentabel nog maar een keer. U zult verbaasd zijn... Het complete script om de database te creëren staat in knvb1.sql. Zowel de eredivisie- als wedstrijdentabel worden gemaakt en gevuld met respectievelijk de achttien clubs en de inmiddels 180 gespeelde wedstrijden. In het tweede deel van dit artikel zoeken we een antwoord op de vraag of en vooral op welke manier het mogelijk is stand van de competitie aan de hand van deze wedstrijden op te vragen.

15 Holland Casino Eredivisie bladzijde 15 9 Winst, gelijkspel of verlies We beginnen onze zoektocht door de wedstrijden met een eenvoudig experiment waarbij we voor de thuisspelende clubs vier kolommen genereren (het worden er straks wel meer). De kolommen die deze query oplevert voorzien we van de opschriften club, g (van gewonnen), gl (van gelijkgespeeld) en v (van verloren). De functie IIF is eerder uitgelegd. SELECT thuis AS club, IIF(dpv > dpt, 1, 0) AS w, IIF(dpv = dpt, 1, 0) AS gl, IIF(dpv < dpt, 1, 0) AS v FROM wedstrijd; Het resultaat is niet zo heel erg overrompelend al gaat het in totaal om 180 rijen. Het resultaat van de bovenste rij is dat van de wedstrijd tussen RKC Waalwijk en FC Groningen (gewonnen door de Waalwijkers). Logisch dat die winstpartij voor RKC Waalwijk een 1 oplevert in de kolom w en een 0 in de kolommen gl en v. Maar dan moet FC Groningen als gevolg van deze wedstrijd ergens de combinatie 0, 0, 1 toebedeeld krijgen, wat niet het geval is althans niet als gevolg van het bedoelde voetbaltreffen. FC Groningen was daarbij de uitclub en die hebben we in de selectie niet meegenomen. Een paar kleine aanpassingen in de formulering van de query zijn voldoende om de resultaten van de uitspelende clubs te laten zien. SELECT uit AS club, IIF(dpv < dpt, 1, 0) AS w, IIF(dpv = dpt, 1, 0) AS gl, IIF(dpv > dpt, 1, 0) AS v FROM wedstrijd; U kunt natuurlijk ook in plaats van de groter-dan- en kleiner- dan-tekens te verwisselen een paar nullen omruilen tegen enen en omgekeerd. De letters w en v verwisselen is ook een mogelijkheid, maar dan komt de volgorde van de kolommen van de selectie voor de thuisspelende clubs niet meer overeen met die van de selectie voor de uitspelende elftallen.

16 Holland Casino Eredivisie bladzijde 16 Beide queries breiden we uit met het aantal doelpunten dat het betreffende elftal scoorde en om zijn oren kreeg. Met het oog op de komende paragrafen knopen we ook de wedstrijddatum eraan vast. De queries worden dan: SELECT thuis AS club, IIF(dpv > dpt, 1, 0) AS w, IIF(dpv = dpt, 1, 0) AS gl, IIF(dpv < dpt, 1, 0) AS v, dpv, dpt, datum FROM wedstrijd; en script11.sql SELECT uit AS club, IIF(dpv < dpt, 1, 0) AS w, IIF(dpv = dpt, 1, 0) AS gl, IIF(dpv > dpt, 1, 0) AS v, dpt, dpv, datum FROM wedstrijd; script12.sql Nee, het is geen vergissing dat de oorspronkelijk kolommen dpt en dpv in de tweede query in omgekeerde volgorde staan. De kolom dpv van de tabel wedstrijd bevat nou eenmaal de tegendoelpunten van de uitspelende club terwijl het aantal goals dat het bezoekende elftal maakte in de kolom dpt van de wedstrijdtabel te lezen valt... U begrijpt al waar we naar toe willen? Door beide tabellen aan elkaar te plakken komen we al een heel eind. SELECT thuis AS club, IIF(dpv > dpt, 1, 0) AS w, IIF(dpv = dpt, 1, 0) AS gl, IIF(dpv < dpt, 1, 0) AS v, dpv, dpt, datum FROM wedstrijd UNION ALL SELECT uit, IIF(dpv < dpt, 1, 0), IIF(dpv = dpt, 1, 0), IIF(dpv > dpt, 1, 0), dpt, dpv, datum FROM wedstrijd; script13.sql Een paar opmerkingen. Gebruik liever geen UNION maar een UNION ALL. De eerste werkt vertragend omdat daarbij de rijen vooraf gesorteerd moeten worden om vervolgens dubbele rijen te negeren. Voor dat laatste hoeven we hier trouwens niet zo bang te zijn. Omdat we bij

17 Holland Casino Eredivisie bladzijde 17 elke rij de speeldatum vermeld hebben kan eenzelfde rij nooit twee keer voorkomen. En als u niet begrijpt waarom dat zo is, moet u het eerste deel van dit verhaal nog maar eens goed lezen. Een tweede opmerking betreft het achterwege laten van de kolomaliassen in de uitselectie. Die hebben daar geen enkele zin. Een UNION betrekt de kolomopschiften uitsluitend van de eerste query.

18 Holland Casino Eredivisie bladzijde Teleurstelling Het resultaat dat we vonden bij de vorige query (script13.sql) brengt de oplossing van ons probleem een grote stap dichterbij. Vooral, als we ook nog eens de datum aan het resultaat vastknopen. Het ligt voor de hand om het resultaat als view op te slaan om op die view nieuwe selecties te laten plaatsvinden. CREATE VIEW hulptabel AS SELECT thuis AS club, IIF(dpv > dpt, 1, 0) AS w, IIF(dpv = dpt, 1, 0) AS gl, IIF(dpv < dpt, 1, 0) AS v, dpv, dpt, datum FROM wedstrijd UNION ALL SELECT uit, IIF(dpv < dpt, 1, 0), IIF(dpv = dpt, 1, 0), IIF(dpv > dpt, 1, 0), dpt, dpv, datum FROM wedstrijd; script14.sql Wat bij de Jet Engine de volgende reactie tweegbrengt: "Samenvoegingen zijn niet toegestaan in een subquery" Met andere woorden: het idee van de union kan naar de prullenbak. Een beetje database management systeem draait daar echt zijn hand niet voor om. U begrijpt nu waarschijnlijk het kopje van deze paragraaf!

19 Holland Casino Eredivisie bladzijde De ontdekking van een wondermiddel Jet SQL is amper gedocumenteerd. Veel moet dan ook door experimenteren worden uitgedokterd. Eén van die vage begrippen uit Jet SQL is het fenomeen procedure, niet te verwarren met de term stored procedure die in de databasewereld een vertrouwde klank heeft. Een procedure blijkt van alles te kunnen zijn. Hij accepteert willekeurige queries dus niet alleen selectiequeries zoals een view. Hij slikt parameters (parametergebruik in een view is niet toegestaan). Een procedure vindt het prima als er iets over de volgorde van rijen gezegd wordt (kom in een view niet aanzetten met een ORDER BY). En hij verwerkt ook nog eens UNIONS (iets dat nou net bij een view onmogelijk gebleken is). Er zijn nog veel meer verschillen maar dit betoog heeft een ander doel dan het bieden van een cursus Jet SQL. Omdat de meesten niet vertrouwd zijn met het begrip procedure geven we een voorbeeld hoe we zo'n alleskunner kunen maken. We doen dat aan de hand van de misschien wel merkwaardigste query die we tot nu toe in dit hele verhaal hebben uitgevoerd en die we gebruikten om rare schrijfwijzen te herstellen. We doelen op UPDATE eredivisie SET club = club; Deze query laat zich eenvoudig tot procedure promoveren. CREATE PROCEDURE corrigeer AS UPDATE eredivisie SET club = club; script15.sql Vanaf nu hoeft u de correctiequery nooit meer in te tikken maar kunt u volstaan met EXECUTE corrigeer; U mag EXECUTE bovendien verbasteren tot EXEC. Handig?

20 Holland Casino Eredivisie bladzijde 20 Misschien verbaast de volgende query u nu niet meer: CREATE PROCEDURE hulptabel AS SELECT thuis AS club, IIF(dpv > dpt, 1, 0) AS w, IIF(dpv = dpt, 1, 0) AS gl, IIF(dpv < dpt, 1, 0) AS v, dpv, dpt, datum FROM wedstrijd UNION ALL SELECT uit, IIF(dpv < dpt, 1, 0), IIF(dpv = dpt, 1, 0), IIF(dpv > dpt, 1, 0), dpt, dpv, datum FROM wedstrijd; script16.sql Script16 is een kleine variant op script14. Alleen het woordje VIEW is vervangen door PROCEDURE. We krijgen de inhoud van de hulptabel niet alleen te zien met EXECUTE hulptabel maar ook SELECT * FROM hulptabel; openbaart het resultaat van onze eerdere hersenspinsels. Een procedure die een resultaat in tabelvorm oplevert kan gewoon als tabel aangesproken worden. We kunnen onze ogen nauwelijks geloven, maar de volgede query slaagt echt:

21 Holland Casino Eredivisie bladzijde 21 CREATE VIEW mosterd_na_de_maaltijd AS SELECT * FROM hulptabel; Nu we de smaak van procedures te pakken hebben is onze behoefte aan bovenstaande instructie niet meer zo groot.

22 Holland Casino Eredivisie bladzijde De stand We zijn nog maar één procedure verwijderd van het moment waarop we de competitiestand in beeld kunnen brengen. We zouden met een view ook een heel eind komen maar dan moeten we omdat volgorde een wezenlijk kenmerk van de tabel op de allereerste bladzijde is een of andere vorm van groeperen toepassen (GROUP BY). Het is immers niet toegestaan ORDER BY in de definitie van zo'n view op te nemen. Bij een procedure mag dat wel (we verbazen ons nergens meer over). Kijken we naar de bedoelde stand dan ontwaren we afgezien van de kolom die de plaats in de stand aangeeft achtereenvolgens de naam van het elftal, het aantal gespeelde wedstrijden, het aantal gewonnen wedstrijden, het aantal gelijkgespeelde wedstrijden, het aantal verloren westrijden, het totaal aan wedstrijdpunten, het totaal aan zelf gemaakte doelpunten en het totaal aan tegengoals. Dat is in SQL niet zo moeilijk voor elkaar te krijgen aan de hand van onze hulptabel. SELECT club, COUNT(*), SUM(w), SUM(gl), SUM(v), SUM(3 * w + gl), SUM(dpv), SUM(dpt) FROM hulptabel GROUP BY club;

23 Holland Casino Eredivisie bladzijde 23 Vóórdat we de vorige query tot procedure een view komt voor dit werk ook in aanmerking verheffen geven we nog een kolomalias mee zodat de tabel 'leesbaarder' wordt. Bovendien is er nog wel iets over de volgorde op te merken al zullen de supporters van ADO Den Haag ingenomen zijn met de bovenste plaats van de ranglijst. SELECT club, COUNT(*) AS g, SUM(w) AS w, SUM(gl) AS gl, SUM(v) AS v, SUM(3 * w + gl) AS punten, SUM(dpv) AS dpv, SUM(dpt) AS dpt FROM hulptabel GROUP BY club ORDER BY SUM(3 * w + gl) DESC, SUM(dpt) - SUM(dpv); script17.sql In de in script17 geformuleerde query wordt de volgorde bepaald door het aantal westrijdpunten en bij gelijk aantal wedstrijdpunten wordt ook nog eens gerangschikt op doelsaldo (de omgekeerde volgorde van het totale aantal doelpunten vóór verminderd met het totale aantal tegendoelpunten). Vergelijken met de echte stand (zie de eerste bladzijde) brengt een klein verschil aan het licht tussen de plaats van Willem II en FC Groningen. Beide ploegen hebben evenveel wedstrijdpunten en een gelijk doelsaldo. Hetzelfde fenomeen valt waar te nemen bij RBC Roosendaal en De Graafschap. Welke regel de KNVB in zo'n geval hanteert is niet geheel duidelijk maar als het daarbij gaat om welk van de twee de meeste doelpunten scoorde is dat eenvoudig in script17 te verwerken. Gewoon door als derde sorteercriterium dit aantal te vermelden (SUM(dpv) DESC), ofschoon dit ons bij het koppel RBC Roosendaal - De Graafschap geen snars verder brengt. Van de query in scipt17 kan geen view gemaakt worden vanwege de opgegeven sortering. Een view accepteert nu eenmaal geen ORDER BY. We nemen onze toevlucht tot een procedure. CREATE PROCEDURE stand AS SELECT club, COUNT(*) AS g, SUM(w) AS w, SUM(gl) AS gl, SUM(v) AS v, SUM(3 * w + gl) AS punten, SUM(dpv) AS dpv, SUM(dpt) AS dpt FROM hulptabel GROUP BY club ORDER BY SUM(3 * w + gl) DESC, SUM(dpt) - SUM(dpv); stand.sql

24 Holland Casino Eredivisie bladzijde 24 Vanaf nu kunnen we als we de wedstrijdentabel bijgewerkt hebben op elk moment de stand van de competitie opvragen met EXECUTE stand; of met SELECT * FROM stand; En ofschoon we toch echt het object stand als procedure gedefinieerd hebben herkent de Jet Engine deze procedure als view. Vraag de metadata maar op. Terwijl we heus geprobeerd hebben stand als view te definiëren en toen met de mededeling afgescheept werden dat hetgeen we wilden allemaal te ingewikkeld was met de letterlijke boodschap Alleen eenvoudige SELECT-query's zijn toegestaan in VIEWS

25 Holland Casino Eredivisie bladzijde Op elke gewenste datum? We hebben nog niet helemaal aan het door ons gestelde doel beantwoord. We wilden immers de stand van de competitie op elke gewenste datum kunnen zien. In de wetenschap dat we bij procedures parameters kunnen verwerken is dit niet zo moeilijk. Pas nu blijkt waarom we de wedstrijddatums in onze hulptabel hebben meegenomen. Tot dusverr hebben we hier nog geen gebruik van gemaakt. CREATE PROCEDURE stand_per AS SELECT club, COUNT(*) AS g, SUM(w) AS w, SUM(gl) AS gl, SUM(v) AS v, SUM(3 * w + gl) AS punten, SUM(dpv) AS dpv, SUM(dpt) AS dpt FROM hulptabel WHERE datum <= x GROUP BY club ORDER BY SUM(3 * w + gl) DESC, SUM(dpt) - SUM(dpv); stand_per.sql In de definitie van de procedure is één regel toegevoegd waarmee alle wedstrijden van na een bepaalde datum (hier x, maar elke naam is natuurlijk goed) worden uitgesloten. Hoe u de waarde van x opgeeft blijkt uit de volgende formulering waarin geïnformeerd wordt naar de stand op 3 september: EXECUTE stand_per # #; Het enige wat nu nog ontbreekt zijn de plaatsnummers als eerste kolom van de tabel. Ook daar valt nog wel wat aan te doen. De manier waarop we dat voor elkaar gekregen hebben vereist enige inzicht in het begrip self join.

26 Holland Casino Eredivisie bladzijde Finishing touch De plaatsnummers zijn een probleem apart. We gaan ervan er gemakshalve vanuit dat twee clubs die evenveel punten en een even hoog doelsaldo hebben gelijkgeplaatst zijn. Op 10 februari 2005 onze testdatum is dat maar liefst twee keer het geval. Zowel FC Groningen en Willem II als RBC Roosendaal en De Graafschap bezetten dezelfde plaats in de rangorde (tenzij we andere criteria erbij betrekken). We volstaan met het aanreiken van de oplossing met de kanttekening dat we als uitgangspunt gebruikt hebben dat in de vaderlandse competitie het doelsaldo altijd kleiner zal zijn dan duizend keer het aantal wedstrijdpunten (behalve in het geval het laatste nul is). Bij twijfel verhoogt u de vermenigingsvuldigingfactor... Een vleugje inner join in combinatie met union all doet de rest. Je moet alleen op het idee komen. CREATE PROCEDURE stand2_per AS SELECT count(*) + 1 AS nr, a.club, a.g, a.w, a.gl, a.v, a.punten, a.dpv, a.dpt FROM WHERE stand_per a, stand_per b 1000 * a.punten + a.dpv - a.dpt < 1000 * b.punten + b.dpv - b.dpt GROUP BY a.club, a.g, a.w, a.gl, a.v, a.punten, a.dpv, a.dpt UNION ALL SELECT 1, club, g, w, gl, v, punten, dpv, dpt FROM stand_per WHERE 1000 * punten + dpv - dpt = (SELECT MAX(1000 * punten + dpv - dpt) FROM stand_per) ORDER BY nr; stand2_per.sql Onderstaand overzicht toont het resultaat van EXECUTE stand2_per # #; Nog niet overtuigd van de mogelijkheden van Jet SQL? Kijk dan maar eens naar de posities van FC Groningen, Willem II, RBC Roosendaal en De Graafschap!

27 Holland Casino Eredivisie bladzijde 27 Voor de oplettende lezer: het is een beetje zonde om de procedure stand_per in bovenstaande definitie te gebruiken. Daarin is immers voorzien in een volgordebepaling die we in stand2_per overschrijven. Maar om stand_per zonder volgordebepaling te herschrijven vonden we net iets teveel werk. En bent u slechts geïnteresseerd in de stand na alle wedstrijden vervangt u stand_per gewoon door stand. En als iemand opmerkt dat het misschien mooier is om de stand te laten zien als

28 Holland Casino Eredivisie bladzijde 28 laten we het helemaal aan hem- of haarzelf over om de oplossing te vinden. Wij vinden het zo wel welletjes. Wat we gerealiseerd hebben is een robuuste database met twee tabellen die alle regels van de KNVB respecteert. En passant is een procedure ontwikkeld die onvolkomenheden in de manier waarop namen van elftallen geschreven kunnen worden op een letterlijk verfrissende wijze corrigeert. Daarnaast is de database voorzien van een aantal procedures waarmee we de stand van de competitie op elk gewenst moment kunnen reproduceren. Hopelijk is met dit voorbeeld voldoende aangetoond dat Jet SQL misschien meer respect verdient dan het soms krijgt. Laat deze casus in ieder geval een uitdaging zijn voor ontwikkelaars die zweren bij andere database management systemen. Leiden, Toon Kuipers

hoofdstuk 9 referentiële integriteit waarborgen overige constraints 9.1 Referentiële integriteit relationele databases 9.1

hoofdstuk 9 referentiële integriteit waarborgen overige constraints 9.1 Referentiële integriteit relationele databases 9.1 relationele databases 9.1 hoofdstuk 9 referentiële integriteit waarborgen overige constraints 9.1 Referentiële integriteit Als voorbeeld nemen we een eenvoudige database, bestaande uit twee tabellen. De

Nadere informatie

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd. BASISINSTRUCTIES SQL SQL : Structured Query Language is een taal gericht op het ondervragen van een relationele database en die aan veel klassieke databasemanagementsystemen kan worden gekoppeld. SQL is

Nadere informatie

Competitie 1e elftallen, programma 8-8-2008 t/m 30-5-2009 Eredivisie

Competitie 1e elftallen, programma 8-8-2008 t/m 30-5-2009 Eredivisie Eredivisie Vrijdag 29-8-2008 1135 Vitesse - FC Groningen Zaterdag 30-8-2008 1031 N.E.C. - De Graafschap 1126 Willem II - Ajax 1141 FC Utrecht - PSV 1294 Roda JC - FC Twente Zondag 31-8-2008 1038 AZ - NAC

Nadere informatie

oefeningen eredivisie antwoorden

oefeningen eredivisie antwoorden oefeningen eredivisie antwoorden vragen niveau 1 Niveau 1 beslaat de volgende onderwerpen: SELECT,, WHERE, DISTINCT, ORDER BY, eenvoudige vergelijkingen, LIKE, wildcards en eenvoudige logische operatoren.

Nadere informatie

Speelronde 1. Speelronde 2. Speelronde 3. Vrijdag 6 augustus 2010 Roda JC FC Twente

Speelronde 1. Speelronde 2. Speelronde 3. Vrijdag 6 augustus 2010 Roda JC FC Twente Speelronde 1 Vrijdag 6 augustus 2010 Roda JC FC Twente Zaterdag 7 augustus 2010 Heracles Almelo Willem II NEC - VVV Venlo SC Heerenveen - PSV De Graafschap - Excelsior Zondag 8 augustus 2010 Vitesse ADO

Nadere informatie

Query SQL Boekje. Fredrik Hamer

Query SQL Boekje. Fredrik Hamer Query SQL Boekje Query SQL Boekje Fredrik Hamer Schrijver: Fredrik Hamer Coverontwerp: Fredrik Hamer ISBN: 9789402162103 Fredrik Hamer Inhoudsopgave A. Aanhef bepalen 17 Aantal 18 Aantal dagen tussen

Nadere informatie

Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64

Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64 Klas Veldnaam Datatype Lengte KLASNAAM Short Text 3 Characters JONGENS Number Integer MEISJES Number Integer Lessen Veldnaam Datatype Lengte KLASNAAM Short Text 3 Characters DOCCODE Short Text 3 Characters

Nadere informatie

Data Definition Language

Data Definition Language Data Definition Language We gaan hier dezelfde database gebruiken als in de vorige les. Nu gaan we deze echter maken met behulp van DDL gedeelte van SQL. Om in het SQL deel van Microsoft Access te komen

Nadere informatie

12. Meer dan één tabel gebruiken en sub-queries

12. Meer dan één tabel gebruiken en sub-queries 12. Meer dan één tabel gebruiken en sub-queries 12.1. Inleiding In de vorige hoofdstukken heb je telkens queries uitgevoerd op één tabel. In de praktijk is het raadplegen van gegevens over het algemeen

Nadere informatie

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd.

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd. SQL Inleiding relationele databases DBMS DataBase Management System!hiërarchische databases.!netwerk databases.!relationele databases.!semantische databases.!object oriënted databases. Relationele databases

Nadere informatie

Elfde-Liniestraat 24 3500 Hasselt Schooljaar 2009-2010 TINFO POKER GAME Oracle Scripts

Elfde-Liniestraat 24 3500 Hasselt Schooljaar 2009-2010 TINFO POKER GAME Oracle Scripts Elfde-Liniestraat 24 3500 Hasselt Schooljaar 2009-2010 TINFO POKER GAME Oracle Scripts Studenten: Peter Asnong Rik Broens Tom De Keyser Daan Gielen Kris Gregoire Koen Olaerts Toon Wouters Inhoudsopgave

Nadere informatie

Sparse columns in SQL server 2008

Sparse columns in SQL server 2008 Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG

Nadere informatie

SQL STATEMENTS. Deze kolom kan grote stukken tekst aan en is bedoeld om tekst erin de plaatsen. Geheel getal, bijvoorbeeld 8, 63, 835 NUMERIC

SQL STATEMENTS. Deze kolom kan grote stukken tekst aan en is bedoeld om tekst erin de plaatsen. Geheel getal, bijvoorbeeld 8, 63, 835 NUMERIC Aantekeningen IRDB Vak: IRDB > Infrma1ca Rela1nele DataBase Onderstaande database scripts zijn gebaseerd p PstgreSQL. Standaarden Schrijf SQL wrden al1jd in hfdlefers, k al werkt het met kleine lefers;

Nadere informatie

[TOETS SQL INLEIDING]

[TOETS SQL INLEIDING] 2011 ROC ter AA afdeling T&T Team ICT Toets SQL Inleiding Duur: 100 minuten Hulpmiddelen: Alleen Pen en Papier Er is één voorblad en vijf opgaven pagina s. Normering: Deel I: 14 punten (7x2 Deel II: 10

Nadere informatie

Structured Query Language (SQL)

Structured Query Language (SQL) Structured Query Language (SQL) Huub de Beer Eindhoven, 4 juni 2011 Database: in essentie 0 of meer tabellen elke tabel nul of meer kolommen (of velden) elke tabel nul of meer unieke rijen elke query werkt

Nadere informatie

SQL Aantekeningen 3. Maarten de Rijke mdr@science.uva.nl. 22 mei 2003

SQL Aantekeningen 3. Maarten de Rijke mdr@science.uva.nl. 22 mei 2003 SQL Aantekeningen 3 Maarten de Rijke mdr@science.uva.nl 22 mei 2003 Samenvatting In deze aflevering: het selecteren van tuples, operaties op strings, en aggregatie functies. Verder kijken we naar iets

Nadere informatie

1. Inleiding... 2 1.1. Inleiding SQL... 3 1.1.1. Inleiding... 3 1.1.2. Database, databaseserver en databasetaal... 4 1.1.3. Het relationele model...

1. Inleiding... 2 1.1. Inleiding SQL... 3 1.1.1. Inleiding... 3 1.1.2. Database, databaseserver en databasetaal... 4 1.1.3. Het relationele model... 1. Inleiding... 2 1.1. Inleiding SQL... 3 1.1.1. Inleiding... 3 1.1.2. Database, databaseserver en databasetaal... 4 1.1.3. Het relationele model... 4 1.1.4. Wat is SQL?... 6 1.1.5. Verschillende categorieên

Nadere informatie

Databases en SQL Foundation (DBSQLF.NL)

Databases en SQL Foundation (DBSQLF.NL) Databases en SQL Foundation (DBSQLF.NL) EXIN Hét exameninstituut voor ICT ers Janssoenborch - Hoog Catharijne Godebaldkwartier 365 3511 DT Utrecht Postbus 19147 3501 DC Utrecht Nederland T +31 30 234 48

Nadere informatie

VERVOLG PROGRAMMA BETAALD VOETBAL SEIZOEN 2012/'13

VERVOLG PROGRAMMA BETAALD VOETBAL SEIZOEN 2012/'13 KNVB BEKER ACHTSTE FINALES 18 vrijdag 21 december 2012 AZ FC Twente 20:00 18 vrijdag 21 december 2012 SC Veendam Sparta Rotterdam 20:00 18 zaterdag 22 december 2012 sc Heerenveen Vitesse 18:45 18 vrijdag

Nadere informatie

11. Het selecteren van gegevens deel II

11. Het selecteren van gegevens deel II 11. Het selecteren van gegevens deel II 11.1. Inleiding In hoofdstuk 7 heb je kennis gemaakt met het statement Select. In dit hoofdstuk ga je wat dieper in op het statement. Je gaat sorteren / groeperen

Nadere informatie

DBMS SQL. Relationele databases. Sleutels. DataBase Management System. Inleiding relationele databases. bestaan uit tabellen.

DBMS SQL. Relationele databases. Sleutels. DataBase Management System. Inleiding relationele databases. bestaan uit tabellen. SQL Inleiding relationele databases DBMS DataBase Management System!hiërarchische databases.!netwerk databases.!relationele databases.!semantische databases.!object oriënted databases. Op dit moment gebruiken

Nadere informatie

Informatie & Databases

Informatie & Databases Informatie Wat is informatie en waaruit het bestaat? Stel op een kaart staat het getal 37 geschreven. Wat kun je dan zeggen van het cijfer 37? Niets bijzonders, toch? Alleen dat het een getal is. Gaat

Nadere informatie

SQL manipulatietaal. We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database.

SQL manipulatietaal. We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database. SQL manipulatietaal We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database. Basiscommando's: INSERT : toevoegen van gegevens DELETE : verwijderen van gegevens UPDATE : wijzigen van gegevens

Nadere informatie

dins. 29 / woensdag 30 juli 2014 Feyenoord donderdag 31 juli 2014 PSV / FC Groningen JCS zondag 3 augustus 2014 PEC Zwolle Ajax 18:00

dins. 29 / woensdag 30 juli 2014 Feyenoord donderdag 31 juli 2014 PSV / FC Groningen JCS zondag 3 augustus 2014 PEC Zwolle Ajax 18:00 vr vr CL vr donderdag 17 + 24 juli 2014 FC Groningen vrijdag 18 juli 2014 loting Q3 CL + dins. 29 / woensdag 30 juli 2014 Feyenoord donderdag 31 juli 2014 PSV / FC Groningen JCS zondag 3 augustus 2014

Nadere informatie

G o o g l e. Hoe maak je een eerlijke tabel voor de eredivisie? Bernd Souvignier Radboud Universiteit Nijmegen

G o o g l e. Hoe maak je een eerlijke tabel voor de eredivisie? Bernd Souvignier Radboud Universiteit Nijmegen G o o g l e of Hoe maak je een eerlijke tabel voor de eredivisie? Bernd Souvignier Radboud Universiteit Nijmegen Te veel gevonden? Voor de zoekaanvraag Google tabel eredivisie zijn er liefst 9750 resultaten,

Nadere informatie

DATAMODEL SQL. Middelbare School. Versie 1.0 Datum 30 oktober 2010 Auteur Mark Nuyens, studentnummer: 500625333 Groep TDI 1

DATAMODEL SQL. Middelbare School. Versie 1.0 Datum 30 oktober 2010 Auteur Mark Nuyens, studentnummer: 500625333 Groep TDI 1 DATAMODEL SQL Middelbare School Versie 1.0 Datum 30 oktober 2010 Auteur Mark Nuyens, studentnummer: 500625333 Groep TDI 1 INHOUDSOPGAVE 1. Informatiedomein 3 1.1 Informatiedomein 3 1.2 Toepassingen 3 2.

Nadere informatie

SQL.

SQL. SQL joost.vennekens@kuleuven.be Mogelijkheden Tabellen maken: create table Tabellen verwijderen: drop table Tabellen vullen: insert into Tabellen wijzigen: update, delete from Gegevens opvragen: select

Nadere informatie

Programma Eredivisie

Programma Eredivisie pagina 1 van 16 JULI wo 01 do 02 vr 03 za 04 zo 05 ma 06 di 07 wo 08 do 09 vr 10 za 11 zo 12 ma 13 di 14 wo 15 do 16 Europa League voorronde 2 instroom NAC Breda vr 17 loting EL voorronde 3 loting CL voorronde

Nadere informatie

CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2014/'15

CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2014/'15 vr vr CL vr donderdag 17 + 24 juli 2014 FC Groningen vrijdag 18 juli 2014 loting Q3 CL + dins. 29 / woensdag 30 juli 2014 Feyenoord donderdag 31 juli 2014 PSV / FC Groningen JCS zondag 3 augustus 2014

Nadere informatie

CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2014/'15

CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2014/'15 vr vr CL vr donderdag 17 + 24 juli 2014 FC Groningen vrijdag 18 juli 2014 loting Q3 CL + dins. 29 / woensdag 30 juli 2014 Feyenoord donderdag 31 juli 2014 PSV / FC Groningen JCS zondag 3 augustus 2014

Nadere informatie

8. De invoer van gegevens

8. De invoer van gegevens 8. De invoer van gegevens 8.1. Inleiding Voor het invoeren van gegevens kan het DML-statement INSERT INTO worden gebruikt. Om dit statement correct te kunnen gebruiken, moet je wel antwoord weten op de

Nadere informatie

SQL datadefinitietaal

SQL datadefinitietaal SQL datadefinitietaal We kunnen er het schema van de database mee bepalen: metadata toevoegen, wijzigen en verwijderen uit een database. Basiscommando's: CREATE : toevoegen van metagegevens DROP : verwijderen

Nadere informatie

PROGRAMMA BETAALD VOETBAL SEIZOEN 2015/'16 EREDIVISIE / JUPILER LEAGUE

PROGRAMMA BETAALD VOETBAL SEIZOEN 2015/'16 EREDIVISIE / JUPILER LEAGUE vr EL vr EL donderdag 2 + 9 juli 2015 Go Ahead Eagles donderdag 16 + 23 juli 2015 Go Ahead Eagles vrijdag 17 juli 2015 loting Q3 CL + EL PROGRAMMA BETAALD VOETBAL SEIZOEN 2015/'16 vr CL vr EL dins. 28

Nadere informatie

CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2015/'16 EREDIVISIE / JUPILER LEAGUE

CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2015/'16 EREDIVISIE / JUPILER LEAGUE vr EL vr EL donderdag 2 + 9 juli 2015 Go Ahead Eagles donderdag 16 + 23 juli 2015 Go Ahead Eagles vrijdag 17 juli 2015 loting Q3 CL + EL CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2015/'16 vr CL vr EL dins.

Nadere informatie

CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2013/'14 EREDIVISIE / JUPILER LEAGUE. Zeist, KNVB wedstrijdorganisatie BV, pagina 1 van 14

CONCEPT PROGRAMMA BETAALD VOETBAL SEIZOEN 2013/'14 EREDIVISIE / JUPILER LEAGUE. Zeist, KNVB wedstrijdorganisatie BV, pagina 1 van 14 vr donderdag 18 + 25 juli 2013 FC Utrecht JCS zaterdag 27 juli 2013 AZ Ajax vr CL vr din. 30 / woe. 31 juli 2013 PSV donderdag 1 augustus 2013 Vitesse, FC Utrecht 1 vrijdag 2 augustus 2013 Ajax Roda JC

Nadere informatie

CONCEPT PROGRAMMA EREDIVISIE / JUPILER LEAGUE SEIZOEN 2012/'13

CONCEPT PROGRAMMA EREDIVISIE / JUPILER LEAGUE SEIZOEN 2012/'13 vr EL vr EL vr CL vr EL donderdag 5 + 12 juli 2012 FC Twente donderdag 19 + 26 juli 2012 Vitesse, FC Twente din. 31 juli / woe. 1 aug. 2012 Feyenoord donderdag 2 augustus 2012 sc Heerenveen, FC Twente,

Nadere informatie

Zeist, KNVB wedstrijdorganisatie BV, 28-06-2013 pagina 1 van 15

Zeist, KNVB wedstrijdorganisatie BV, 28-06-2013 pagina 1 van 15 vr donderdag 18 + 25 juli 2013 FC Utrecht JCS zaterdag 27 juli 2013 AZ Ajax 20:00 vr CL vr din. 30 / woe. 31 juli 2013 PSV donderdag 1 augustus 2013 Vitesse, FC Utrecht 1 vrijdag 2 augustus 2013 Ajax Roda

Nadere informatie

6. Het maken van een database

6. Het maken van een database 6. Het maken van een database 6.1. Inleiding In hoofdstuk 5 heb je de oefendatabase gemaakt doormiddel van een script. In dit hoofdstuk ga je zelf een database maken en deze vullen met tabellen. Hiervoor

Nadere informatie

PROGRAMMA EREDIVISIE / JUPILER LEAGUE SEIZOEN 2012/'13

PROGRAMMA EREDIVISIE / JUPILER LEAGUE SEIZOEN 2012/'13 vr EL vr EL vr CL vr EL donderdag 5 + 12 juli 2012 FC Twente donderdag 19 + 26 juli 2012 Vitesse, FC Twente din. 31 juli / woe. 1 aug. 2012 Feyenoord donderdag 2 augustus 2012 sc Heerenveen, FC Twente,

Nadere informatie

Databases - Inleiding

Databases - Inleiding Databases Databases - Inleiding Een database is een verzameling van een aantal gegevens over een bepaald onderwerp: een ledenbestand van een vereniging, een forum, login gegevens. In een database worden

Nadere informatie

Programma Eredivisie

Programma Eredivisie pagina 1 van 19 JULI vr 01 za 02 zo 03 ma 04 di 05 wo 06 do 07 vr 08 za 09 zo 10 ma 11 di 12 wo 13 do 14 Europa League voorronde 2 instroom ADO Den Haag vr 15 loting CL voorronde 3 loting EL voorronde

Nadere informatie

JCS zondag 31 juli 2016 Feyenoord PSV 18:00

JCS zondag 31 juli 2016 Feyenoord PSV 18:00 vr CL vr dins. 26 / woensdag 27 juli 2016 Ajax donderdag 28 juli 2016 AZ / Heracles Almelo JCS zondag 31 juli 2016 Feyenoord PSV 18:00 vr CL vr din. 2 / woe. 3 augustus 2016 Ajax donderdag 4 augustus 2016

Nadere informatie

3 Formules. 8 x 6 = x 3 = 12. r-w-w b-w-w g-w-w r-w-r b-w-r g-w-r r-z-w b-z-w g-z-w r-z-r b-z-r g-z-r 6 x 7 = x 100 = 500.

3 Formules. 8 x 6 = x 3 = 12. r-w-w b-w-w g-w-w r-w-r b-w-r g-w-r r-z-w b-z-w g-z-w r-z-r b-z-r g-z-r 6 x 7 = x 100 = 500. 31 32 1 2 8 x 6 = 48 3 Formules 4 x 3 = 12 r-w-w b-w-w g-w-w r-w-r b-w-r g-w-r r-z-w b-z-w g-z-w r-z-r b-z-r g-z-r 6 x 7 = 42 12 5 x 0 = 500 5 0 12 x 150 = 1800 12 12 x 200 = 2400 1440 : 12 = 120 3 4 29

Nadere informatie

Koppeling met een database

Koppeling met een database PHP en MySQL Koppeling met een database 11.1 Inleiding In PHP is het eenvoudig om een koppeling te maken met een database. Een database kan diverse gegevens bewaren die met PHP aangeroepen en/of bewerkt

Nadere informatie

Van CaseTalk naar een database in SQLite studio

Van CaseTalk naar een database in SQLite studio Van CaseTalk naar een database in SQLite studio Dit document legt uit hoe je een SQL export uit CaseTalk kunt importeren in het DBMS (Database Management System) SQLite Studio. SQLIte studio is handig

Nadere informatie

SQL & Relationele datamodellen in interactieve media

SQL & Relationele datamodellen in interactieve media SQL & Relationele datamodellen in interactieve media HVA-CMD-V1-datamodelleren oefeningen deel 1: SQL 2012-2013 Inhoud Inhoud... 2 Selecties uit een enkelvoudige datatabel... 3 Selecties uit een meerdere

Nadere informatie

SQL & Datamodelleren

SQL & Datamodelleren SQL & Datamodelleren HVA-CMD-V1-datamodelleren Algemene handleiding bij het lesprogramma 2012-2013 Inhoud Inhoud... 2 Inleiding... 3 Leerdoelen:... 3 Plaats in het leerplan:... 3 Werkwijze:... 3 Lesstof:...

Nadere informatie

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12 Katern 2 Getaltheorie Inhoudsopgave 1 Delers 1 2 Deelbaarheid door 2, 3, 5, 9 en 11 6 3 Grootste gemene deler en kleinste gemene veelvoud 12 1 Delers In Katern 1 heb je geleerd wat een deler van een getal

Nadere informatie

Programma Eredivisie

Programma Eredivisie pagina 1 van 18 AUGUSTUS vr 01 loting CL voorronde 3 loting UC voorronde 2 za 02 zo 03 ma 04 di 05 wo 06 do 07 vr 08 za 09 zo 10 ma 11 di 12 Champions League voorronde 3 wo 13 Champions League voorronde

Nadere informatie

Inleiding... 3. 1 Databases en Data Base Management Systems... 3. 2 Tabellen... 3. 3 Wat is SQL?... 5

Inleiding... 3. 1 Databases en Data Base Management Systems... 3. 2 Tabellen... 3. 3 Wat is SQL?... 5 1 Inhoudsopgave. Inleiding.... 3 1 Databases en Data Base Management Systems.... 3 2 Tabellen.... 3 3 Wat is SQL?... 5 4 Gegevens opvragen (deel 1).... 5 4.1 Boolean operatoren.... 7 4.2 IN en BETWEEN

Nadere informatie

Programma Eredivisie

Programma Eredivisie pagina 1 van 20 JULI do 01 vr 02 za 03 zo 04 ma 05 di 06 wo 07 do 08 vr 09 za 10 zo 11 ma 12 di 13 wo 14 do 15 Europa League voorronde 2 instroom FC Utrecht vr 16 loting CL voorronde 3 loting EL voorronde

Nadere informatie

We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten.

We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten. MySQL talk Trage website? Het optimaliseren van een bestaande website die een MySQL database heeft is niet altijd even makkelijk. Het probleem kan namelijk op veel verschillende plekken zitten: de database

Nadere informatie

Introductie (relationele) databases

Introductie (relationele) databases Eerste les Introductie (relationele) databases Database en DBMS Een verzameling van gestructureerd opgeslagen gegevens Dus ook een kaartenbak is een database Van oudsher waren er hiërarchische en netwerkdatabases

Nadere informatie

Les 11 : Basis SQL (deel2).

Les 11 : Basis SQL (deel2). Les 11 : Basis SQL (deel2). Wat is SQL? SQL gaan we gebruiken voor het raadplegen van de database. We gaan gegevens invoegen in de database, selecteren, aanpassen en verwijderen van de database. Om dit

Nadere informatie

Les S-02: Meer geavanceerde SQL-instructies

Les S-02: Meer geavanceerde SQL-instructies Les S-02: Meer geavanceerde SQL-instructies 2.0 Overzicht les 1: De basisvorm van een SQL query ziet er als volgt uit: (DISTINCT) selecteer de velden uit de tabel waar de volgende voorwaarde geldt ; Bij

Nadere informatie

VOETBAL QUIZ 2015 WIE IS DE VOETBALKENNER VAN VV BRUCHTERVELD?

VOETBAL QUIZ 2015 WIE IS DE VOETBALKENNER VAN VV BRUCHTERVELD? VOETBAL QUIZ 2015 WIE IS DE VOETBALKENNER VAN VV BRUCHTERVELD? DOOR ROBBERT REINDERS, ROY POTGIETER & ALWIN HUISJES INLEIDING QUIZ WELKOM UITLEG SPELREGELS RONDE 1 RONDE 2 KWART FINALE HALVE FINALE FINALE

Nadere informatie

SQL / Systeemanalyse

SQL / Systeemanalyse SQL / Systeemanalyse Wie ben ik Hans de Wit 44 jaar HBO BI in deeltijd gedaan Sinds 2008 werkzaam met BI / DWH med.hro.nl/wihan SQL De gegevens in een database vormen de grondstof voor informatie De informatie

Nadere informatie

Integriteitsbewaking bij een relationele database

Integriteitsbewaking bij een relationele database Integriteitsbewaking bij een relationele database Bij het ontwikkelen van een informatiesysteem voor een organisatie moet er koste wat koste voor gezorgd worden, dat er geen tegenstrijdige gegevens in

Nadere informatie

Databases SQL - meerdere tabellen

Databases SQL - meerdere tabellen Databases SQL - meerdere tabellen Nut van een database Dilbert 1 Reservering Lezer Uitgave Filiaal Basis zaken Uitlening Exemplaar NB: er kan verschil in smaak zitten tussen M1a en S1a notatie Join : het

Nadere informatie

Hoofdstuk: 1 Principes van databases

Hoofdstuk: 1 Principes van databases DBSQLF Databases en SQL Hoofdstuk: 1 Principes van databases aant Css: 4 732 blz 9 1.1 Doel ve database - om op het juiste moment op de juiste plaats de juiste gegevens beschikbaar te hebben richten we

Nadere informatie

VBA voor doe het Zelvers deel 22. Handleiding van Helpmij.nl. Auteur: leofact

VBA voor doe het Zelvers deel 22. Handleiding van Helpmij.nl. Auteur: leofact VBA voor doe het Zelvers deel 22 Handleiding van Helpmij.nl Auteur: leofact december 2015 Vorige aflevering In de vorige aflevering werden de regular expressions behandeld. Voor VBA zijn deze beschikbaar

Nadere informatie

Les 2 Eenvoudige queries

Les 2 Eenvoudige queries Les 2 Eenvoudige queries XAMP Apache server ( http ) mysql server PHP myadmin IAM SQL oefeningen Database phpmyadmin Import : sql_producten.sql, sql_winkel.sql, sql_festival.sql SAMS SQL in 10 minuten

Nadere informatie

7. Het selecteren van gegevens

7. Het selecteren van gegevens 7. Het selecteren van gegevens 7.1. Inleiding Het doel van databases is het ontsluiten van gegevens. Een database wordt gebruikt om gegevens in op te slaan en te lezen. In dit hoofdstuk ga je door gebruik

Nadere informatie

Hoofdstuk 13: Sorteren & Filteren* 2010

Hoofdstuk 13: Sorteren & Filteren* 2010 Hoofdstuk 13: Sorteren & Filteren* 2010 13.0 Inleiding Spreadsheets bieden meer grip op gegevens. De twee beste manieren om meer grip te krijgen, is door de gegevens te sorteren of door bepaalde waarden

Nadere informatie

Concept programma Eredivisie

Concept programma Eredivisie pagina 1 van 19 JULI za 10 zo 11 ma 12 di 13 wo 14 do 15 Europa League voorronde 2 instroom FC Utrecht vr 16 loting CL voorronde 3 loting EL voorronde 3 za 17 zo 18 ma 19 di 20 wo 21 do 22 return Europa

Nadere informatie

Bijlage Inlezen nieuwe tarieven per verzekeraar

Bijlage Inlezen nieuwe tarieven per verzekeraar ! Bijlage inlezen nieuwe tarieven (vanaf 3.2) Bijlage Inlezen nieuwe tarieven per verzekeraar Scipio 3.303 biedt ondersteuning om gebruikers alle tarieven van de verschillende verzekeraars in één keer

Nadere informatie

Nacompetitie VVV v FC Den Bosch MVV v FC Den Bosch Cambuur v FC Den Bosch

Nacompetitie VVV v FC Den Bosch MVV v FC Den Bosch Cambuur v FC Den Bosch 82/83 83/84 21.08.82 FC Wageningen v FC Den Bosch 24.08.83 Fortuna Sittard v FC Den Bosch 28.08.82 MVV v FC Den Bosch 28.08.83 Excelsior v FC Den Bosch 04.09.82 FC Den Bosch v DS'79 04.09.83 Sparta v FC

Nadere informatie

PROGRAMMA BETAALD VOETBAL EREDIVISIE SEIZOEN 2013/'14

PROGRAMMA BETAALD VOETBAL EREDIVISIE SEIZOEN 2013/'14 vr EL donderdag 18 + 25 juli 2013 FC Utrecht JCS zaterdag 27 juli 2013 AZ Ajax 20:00 vr CL din. 30 / woe. 31 juli 2013 PSV vr EL donderdag 1 augustus 2013 Vitesse, FC Utrecht 1 vrijdag 2 augustus 2013

Nadere informatie

Programma Eredivisie

Programma Eredivisie pagina 1 van 19 JULI do 01 vr 02 za 03 zo 04 ma 05 di 06 wo 07 do 08 vr 09 za 10 zo 11 ma 12 di 13 wo 14 do 15 Europa League voorronde 2 vr 16 loting CL voorronde 3 loting EL voorronde 3 za 17 zo 18 ma

Nadere informatie

Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster

Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster 4. 4. Inhoud rste BAC Toegepaste Biologische Wetenschappen Hoofdstuk 4 Databank Terminologie, Navigeren, Importeren Tabellen Records/Velden manipuleren Queries (Vragen) [Ook in SQL] sorteren filter volgens

Nadere informatie

ExpertHandboek Business Intelligence met Power BI in Excel Wim de Groot

ExpertHandboek Business Intelligence met Power BI in Excel Wim de Groot ExpertHandboek Business Intelligence met Power BI in Excel Wim de Groot Van Duuren Media, ISBN 9789463560665 Inhoud Voorwoord 1. Goed beginnen Voor wie is dit boek bedoeld? Werken met dit boek Afspraken

Nadere informatie

Competitieprogramma 2006/'07

Competitieprogramma 2006/'07 Koninklijke Nederlandse Voetbalbond Betaald voetbal Competitieprogram /' Erevisie 4 juli Program Erevisie seien /' pagina 1 van 3 juli AUGUSTUS 17 31 Ronde 1 Sparta - Vitesse 1 ADO Den Haag - sc Heerenveen

Nadere informatie

Zelftest SQL Workshop

Zelftest SQL Workshop Zelftest SQL Workshop Document: n0087test.fm 25/06/2014 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST SQL WORKSHOP Handleiding Deze test

Nadere informatie

Handleiding RoosterGenerator

Handleiding RoosterGenerator Inleiding Handleiding RoosterGenerator, deel II Handleiding RoosterGenerator Deel II: Aan de slag met RoosterGenerator De module RoosterGenerator is bedoeld als aanvulling op het maken van een competitie

Nadere informatie

Structured Query Language

Structured Query Language Structured Query Language SQL = internationale standaardtaal. Origineel IBM. SQL92 (SQL2), SQL99 (SQL3), SQL:2003, SQL:2007 en SQL:2008. Vele dialecten. In wat volgt beperken we ons tot wat tot de kern

Nadere informatie

= > >= < <= BETWEEN IS NULL IS NOT NULL

= > >= < <= BETWEEN IS NULL IS NOT NULL Select queries SELECT...FROM... SELECT DISINCT...FROM... WHERE...AND...OR...NOT...LIKE...IN = > >= <

Nadere informatie

EMBEDDED SQL. Inleiding. Queries en update-opdrachten. Embedden en hostvariabelen

EMBEDDED SQL. Inleiding. Queries en update-opdrachten. Embedden en hostvariabelen Inleiding In het boek Databases & SQL wordt beschreven hoe opdrachten in de programmeertaal SQL gebruikt worden om de inhoud van een relationele database te raadplegen en te bewerken. SQL wordt daarbij

Nadere informatie

EXIN Databases en SQL Foundation

EXIN Databases en SQL Foundation EXIN Databases en SQL Foundation Preparation Guide Editie 201608 Copyright 2016 EXIN All rights reserved. No part of this publication may be published, reproduced, copied or stored in a data processing

Nadere informatie

Rabobank Schoolvoetbaltoernooi 2010

Rabobank Schoolvoetbaltoernooi 2010 Jongens groep 3/4 poule A PSV 0-2 0-5 0-7 (3) Borussia Dortmund 2-0 1-1 4 2 (2) Fiorentina 1-1 5-0 4 5 (1) 9.50 uur A1 PSV - Borussia Dortmund 0-2 10.40 uur A1 Borussia Dortmund - Fiorentina 1-1 11.30

Nadere informatie

Data Warehouse Script Generator Doel

Data Warehouse Script Generator Doel Data Warehouse Script Generator Doel Op basis van een aantal standaard sql scripts ( create table, create view ) een nieuwe sql script genereren welke alle objecten ( tables & views ) kan aanmaken in een

Nadere informatie

NHibernate als ORM oplossing

NHibernate als ORM oplossing NHibernate als ORM oplossing Weg met de SQL Queries Wat is ORM? ORM staat in dit geval voor Object Relational Mapping, niet te verwarren met Object Role Modeling. ORM vertaalt een objectmodel naar een

Nadere informatie

Excel Controller. Handleiding Excel Controller Wizard

Excel Controller. Handleiding Excel Controller Wizard Excel Controller Handleiding Excel Controller Wizard 1 Inhoud Inleiding... 3 Eigen SQL... 3 Stap 1 Eigen SQL... 3 Stap 2 Testen SQL... 8 Stap 3 Wizard... 11 Stap 4 Parameters... 13 Voorbeeld Eigen Parameter...

Nadere informatie

9 oktober 2006 Toestemming voor een commercieel televisieprogramma voor bijzondere omroep. Uw kenmerk Ons Kenmerk Contactpersoon Doorkiesnummer

9 oktober 2006 Toestemming voor een commercieel televisieprogramma voor bijzondere omroep. Uw kenmerk Ons Kenmerk Contactpersoon Doorkiesnummer Brinkhof Advocaten T.a.v. de heer R.D. Chavannes De Lairessestraat 111-115 1075 HH AMSTERDAM Datum Onderwerp 9 oktober 2006 Toestemming voor een commercieel televisieprogramma voor bijzondere omroep Uw

Nadere informatie

Zelftest SQL Workshop

Zelftest SQL Workshop Zelftest SQL Workshop Document: n0087test.fm 04/01/2018 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST SQL WORKSHOP Handleiding Deze test

Nadere informatie

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Anatomie van een databank

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Anatomie van een databank Inhoud Computervaardigheden Hoofdstuk 5 Databanken (Let op: dit is enkel voor studenten Bio-Ingenieur.) Terminologie Data importeren Basis queries Allerhande Joins Doe dit. Aandachtspunt! Wat gebeurt hier?

Nadere informatie

KONINKLIJKE NEDERLANDSE VOETBALBOND BETAALD VOETBAL. Reglement play-off promotie/degradatie betaald voetbal seizoen 2019/ 20

KONINKLIJKE NEDERLANDSE VOETBALBOND BETAALD VOETBAL. Reglement play-off promotie/degradatie betaald voetbal seizoen 2019/ 20 KONINKLIJKE NEDERLANDSE VOETBALBOND BETAALD VOETBAL Reglement play-off promotie/degradatie betaald voetbal seizoen 2019/ 20 Artikel 1 De betaaldvoetbalorganisatie waartoe het (eerste of tweede) elftal

Nadere informatie

Inhoud. Voorwoord Belangrijkste kenmerken van dit boek De opzet van dit boek Over de auteur Woord van dank

Inhoud. Voorwoord Belangrijkste kenmerken van dit boek De opzet van dit boek Over de auteur Woord van dank v Voorwoord Belangrijkste kenmerken van dit boek De opzet van dit boek Over de auteur Woord van dank 1 Introductie: data en informatie 1.0 Wat leer je in dit hoofdstuk? 1.1 Verschil tussen gegevens en

Nadere informatie

Beste S.D.O.L. -lid & -Supporter,

Beste S.D.O.L. -lid & -Supporter, Beste S.D.O.L. -lid & -Supporter, Vrijdag 11 augustus start het nieuwe Eredivisieseizoen 2017-2018. In samenwerking met René Heuven, heeft de Supportersclub hiervoor opnieuw een Weddenschap georganiseerd:

Nadere informatie

handleiding S(impel)QL bladzijde 1 Inhoudsopgave

handleiding S(impel)QL bladzijde 1 Inhoudsopgave handleiding S(impel)QL bladzijde 1 Inhoudsopgave Inhoudsopgave... 1 Het doel van S(impel)QL... 3 Over de werking van S(impel)QL... 4 De bouwstenen van S(impel)QL... 5 Queries en scripts... 7 Het gebruik

Nadere informatie

EREDIVISIE. = herfstkampioen

EREDIVISIE. = herfstkampioen SEIZOEN 2006-2007 EREDIVISIE M W G V + - S P PIM 1. PSV Eindhoven 34 23 6 5 75 25 +50 75 2. AFC Ajax Amsterdam 34 23 6 5 84 35 +49 75 3. AZ Alkmaar 34 21 9 4 83 31 +52 72 4. FC Twente Enschede 34 19 9

Nadere informatie

Versieperikelen. Bijlage C

Versieperikelen. Bijlage C Bijlage C Versieperikelen In dit boek beschrijven we PL/SQL aan de hand van Oracle versie 11g. Alle eigenschappen die in dit boek behandeld worden, zijn in deze versie van Oracle (en in nog te verschijnen

Nadere informatie

Handleiding configuratie en gebruik tekenmodule

Handleiding configuratie en gebruik tekenmodule Handleiding configuratie en gebruik tekenmodule B3Partners Inhoudsopgave 1 Inleiding...2 2 Configuratie tekenmodule...3 2.1 Database tabel...4 2.2 WMS Service...5 2.3 Gegevensbron en kaartlaag...6 2.4

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

Lab Webdesign: Javascript 3 maart 2008 H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen

Nadere informatie

3. Structuren in de taal

3. Structuren in de taal 3. Structuren in de taal In dit hoofdstuk behandelen we de belangrijkst econtrolestructuren die in de algoritmiek gebruikt worden. Dit zijn o.a. de opeenvolging, selectie en lussen (herhaling). Vóór we

Nadere informatie

Na bestudering van dit hoofdstuk, moet je tot het volgende in staat zijn:

Na bestudering van dit hoofdstuk, moet je tot het volgende in staat zijn: 5. De oefendatabase 5.1. Inleiding In de volgende hoofdstukken ga je oefenen / werken met SQL. Om te kunnen oefenen heb je natuurlijk wel een database nodig. In dit hoofdstuk wordt besproken hoe je deze

Nadere informatie

ECLI:NL:GHAMS:2011:674 Gerechtshof Amsterdam Datum uitspraak Datum publicatie Zaaknummer

ECLI:NL:GHAMS:2011:674 Gerechtshof Amsterdam Datum uitspraak Datum publicatie Zaaknummer ECLI:NL:GHAMS:2011:674 Instantie Gerechtshof Amsterdam Datum uitspraak 29-03-2011 Datum publicatie 26-03-2014 Zaaknummer 106.001.571-01 Rechtsgebieden Civiel recht Bijzondere kenmerken Hoger beroep Inhoudsindicatie

Nadere informatie

Promotie- en degradatieregeling betaald voetbal seizoen 2015/ 16

Promotie- en degradatieregeling betaald voetbal seizoen 2015/ 16 KONINKLIJKE NEDERLANDSE VOETBALBOND BETAALD VOETBAL Promotie- en degradatieregeling betaald voetbal seizoen 2015/ 16 29 juli 2015 knvb.nl Promotie van Eerste Divisie naar Eredivisie De betaaldvoetbalorganisatie

Nadere informatie

Straffen in het betaald voetbal tot en met 8 december 2017

Straffen in het betaald voetbal tot en met 8 december 2017 Straffen in het betaald voetbal tot en met 8 december 2017 Uitgesloten van deelname aan competitiewedstrijden van de KNVB van het 1e elftal van hun club voor het achter de naam van de betrokken speler

Nadere informatie

Op de werkbalk staan drie knoppen, die van links naar rechts staan voor de drie genoemde stappen.

Op de werkbalk staan drie knoppen, die van links naar rechts staan voor de drie genoemde stappen. pagina 1 van 9 Een informatiemodel vertalen naar een database Het ontwerpen van een database met behulp van het casetool gaat in drie stappen: 1. Controle Eerst voert het casetool een controle uit. Er

Nadere informatie

EREDIVISIE. = herfstkampioen

EREDIVISIE. = herfstkampioen SEIZOEN 2005-2006 EREDIVISIE M W G V + - S P PIM 1. PSV Eindhoven 34 26 6 2 71 23 +48 84 2. AZ Alkmaar 34 23 5 6 78 32 +46 74 3. Feyenoord Rotterdam 34 21 8 5 79 34 +45 71 4. AFC Ajax Amsterdam 34 18 6

Nadere informatie