Informatie verwerking en databases RDBMS en tabellen... 8 SQL SELECT... 8 SQL WHERE SQL INSERT SQL UPDATE SQL DELETE...

Maat: px
Weergave met pagina beginnen:

Download "Informatie verwerking en databases... 4. RDBMS en tabellen... 8 SQL SELECT... 8 SQL WHERE... 10 SQL INSERT... 14 SQL UPDATE... 17 SQL DELETE..."

Transcriptie

1 Databases+SQL 1

2 Inhoud Informatie verwerking en databases... 4 RDBMS en tabellen... 8 SQL SELECT... 8 SQL WHERE SQL INSERT SQL UPDATE SQL DELETE SQL ORDER BY SQL Aggregate functies SQL GROEP BY SQL HAVING SQL Tabel relaties, Primaire- en Foreign keys De Primaire-key en Foreign key Referentiële integriteit Soorten relaties Benamingen van tabellen, velden en queries Nulde normaalvorm (0NV) Eerste normaalvorm (1NV) Tweede normaalvorn (2NV) Derde normaalvorm (3NV)

3 SQL UNION SQL genestelde queries SQL CREATE SQL ALTER SQL Views SQL Indexen SQL Hosting Bijlage: SQL Operators en functies (engels)

4 Informatie verwerking en databases Een makkelijke manier om gegevens (feiten) bij te houden is een tabel (lijst). Op basis van gegevens, of wel feiten, kunnen verantwoorde en goed afgewogen keuzes gemaakt worden. Hiervoor moeten gegevens geïnterpreteerd worden, zodat de beschikbare gegevens informatie opleveren. Sinds de intrede van de computer worden die lijsten ook elektronisch bijgehouden. Als de lijst niet al te lang is, kan dit uitstekend met een EXCEL- spread sheet. Maar wanneer de lijsten complexer en groter worden, dan wordt het beheer en het correct invoeren van gegevens een hele klus. Zeker wanneer er ook nog andere lijsten komen waar gegevens uitgehaald moeten worden. Nog lastiger wordt het wanneer er foto s, geluid en film beheerd moeten worden. Er ontstaan te veel situaties waarbij redundantie kan optreden (gegevens dubbel opgeslagen). Ook kunnen belangrijke gegevens per ongeluk worden verwijderd of gegevens kunnen elkaar gaan tegenspreken (inconsistentie), bijvoorbeeld: een persoon heeft twee verschillende woonplaatsen. Zulke fouten kunnen niet worden getolereerd als je het hebt over: de bedrijfsjaarcijfers, belastingbetalingen, relatiebeheer, verkoopcijfers, noem maar op De integriteit (juistheid) van de gegevens moet 100% zijn. Kennis is macht, mits deze kennis wordt onderbouwd met de interpretatie van de juiste gegevens (informatie). 4

5 Een database, ook wel gegevensbank, is een verzameling bij elkaar horende tabellen (lijsten), inclusief hun onderliggende relaties. Om gegevens uit de tabellen op te roepen is een Database Management Systeem (DBMS) nodig. Aan een DBMS worden vragen (queries) gesteld, zodat er een specifieke set gegevens wordt gepresenteerd. Een taal die gegevens uit databases kan halen is SQL (Structurated Query Language). Er zijn naast de bestaande SQL standaarden enkele andere populaire relationele database-systemen zoals: MS SQL-Server, MySQL, Oracel, Sybase en DB2 die elk hun eigen SQL dialect hebben (ook bekend als SQL extentions of SQL implementations) van één van de twee SQL standaarden (ISO of ANSI). Er zijn vele SQL- implementaties en zogenaamde SQL-dialecten en SQL-extensions. Bijvoorbeeld: een MS SQL-server specifieke versie van SQL wordt: Transact SQL genoemd, de versie van het Orakel wordt: PL/SQL genoemd en de versie van MS- Access wordt: JET SQL genoemd. Deze reader is zo dialect onafhankelijk mogelijk gemaakt en de meeste voorbeelden kunnen op de meeste belangrijke SQL-implementaties worden toegepast. Om de in- en uitvoer te regelen wordt een interface gebruikt, maar de feitelijke opslag gebeurt in een database. De in- en uitvoer wordt de front-end genoemd, die gekoppeld is met de back-end, waar bijvoorbeeld een Oracle database draait met daarin de tabellen. De front-end kan door MS Access worden gedaan, terwijl een DBMS een koppeling maakt met de back-end (de database) om de gevraagde gegevens te benaderen. Omdat niet iedereen zomaar alle gegevens mag opvragen, worden er in het DBMS accounts aangemaakt die geautoriseerd worden met de gewenste bevoegdheden per gebruiker. Omdat een database (meestal) niet door één gebruiker wordt benaderd, kan het voor komen dat twee gebruikers tegelijkertijd een record (tabel rij) willen wijzigen. Slechts één gebruiker kan een record wijzigen, anders zou het mogelijk zijn dat twee online-klanten beide het zelfde huisje huren. Dit wordt voorkomen door record-locking. 5

6 De basis van SQL SQL is een afkorting voor Structurated Query Language (uitgesproken als: S-Q-L of see-quill) en is een standaard relationele query- taal (SQL is gestandaardiseerd door zowel ANSI als ISO) die voor gegevens uitwisseling met databases wordt gebruikt. SQL werd ontwikkeld door IBM in jaren '70 en heeft zijn wortels in de relationele algebra gedefinieerd door dhr. Codd in De SQL functionaliteit gaat verder dan de relationele algebra, die gegevens kan terug vinden, toevoegen, wijzigen en verwijderen van/aan een RDBMS (Relationeel DataBase Management Systeem). SQL kan rekenkundige operators zoals: deling, vermenigvuldiging, aftrekking en optellen en vergelijkingsoperators (=, <, >, <=, >=, <= en <>). SQL ken select functies zoals: LIKE, IS NULL, IS NOT NULL, AS, MAX(), MIN(), AVG(), COUNT(), SUM(), FIRST() en LAST(). SQL definieert veel keywoorden, die in verscheidene categorieën kunnen worden verdeeld. De eerste SQL keywoorden categorie is voor het verkrijgen van gegevens zoals het SELECT keywoord. De tweede categorie is voor de SQL keywoorden die voor gegevensmanipulatie worden gebruikt zoals het INSERT, UPDATE, en DELETE SQL keywoorden. De derde categorie is de transact-sql keywoorden categorie, die keywoorden zoals COMMIT en het ROLLBACK. Een andere SQL keywoorden categorie is de SQL Data Definition Language zoals CREATE en DROP kenmerkt. Nog een andere categorie van SQL keywoorden controleert de rechten van RDBMS (GRANT en REVOKE keywoorden). SQL gebruikt opeenvolging van karakters als één enkel herkenningsteken van een lijncommentaar. 6

7 De SQL commando s zijn niet hoofdlettergevoelig en de volgende SQL queries geven het zelfde resultaat: SELECT * FROM Gebruikers; select * from Gebruikers; Voorkom veel type werk door jokers te gebruiken; * voor alle kolommen in die aangegeven tabel(len) % voor een onbekend aantal willekeurige tekens en cijfers (wildcard in strings) # voor een enkel getal? voor een enkele letter NB: In MS Access wordt de * als wildcard gebruikt in teksten (strings) 7

8 RDBMS en tabellen DBMS is een afkorting voor het Relationele Database Management Systeem. Gegeven in een RDBMS worden opgeslagen in database objecten, de tabellen. De databasetabellen zijn de primaire gegevensopslag voor elke RDBMS en hoofdzakelijk zijn zij verzamelingen van data (gegevens) die meestal met elkaar zijn gerelateerd. De relaties komen later aanbod. Een beschrijving van een tabel met de naam Gebruikers zou informatie over vele personen kunnen opslaan en elke invoering (rij of record) in deze tabel zal één unieke gebruiker vertegenwoordigen. Hoewel alle gebruikersinvoeringen in de tabel van Gebruikers uniek zijn, zijn zij verwant in de betekenis dat zij gelijkaardige object beschrijven. De Gebruikers van de tabel VoorNaam AchterNaam GebDatum John Smit 12/12/1969 David Bakker 30/07/1954 Susan Advocaat 03/03/1970 Elke databasetabel bestaat uit kolommen en rijen. Elke tabelkolom bepaalt het type van de gegevens die daarin worden opgeslagen en dit gegevenstype is geldig voor alle onderliggende rijen in die kolom. Een tabel-rij (record) is een invoering van gegevens die voor elke kolom in deze bepaalde tabel waarden bevat. RDBMS slaan de gegevens op in groep van tabellen (database), die meestal (soms ook niet) een relatie met elkaar hebben (kolommen uit verschillende tabellen). SQL SELECT SQL SELECT is zonder enige twijfel het meest gebruikte SQL commando. Het SQL SELECT commando wordt gebruikt om gegevens van één of meerdere databasetabellen op te vragen. Om het gebruik van het SELECT commando te illustreren wordt de tabel gebruiken van Gebruikers (uit het vorige hoofdstuk): VoorNaam AchterNaam GebDatum John Smit 12/12/1969 David Bakker 01/03/1973 Susan Advocaat 03/03/1970 De SQL statement (verklaring) toont hieronder een eenvoudig gebruik van het SQL SELECT commando: SELECT VoorNaam, AchterNaam, GebDatum FROM Gebruikers; 8

9 Dit SLQ-statement begint met het SELECT keywoord dat door tabelkolom(men) wordt gevolgd. De gespecificeerde kolommen in het SELECT statement worden aangeleverd door het RDBMS vanuit de tabel(len) die genoemd zijn bij FROM (waaruit de gegevens moeten komen). Er is een speciale syntaxis die met het SELECT commando kan worden gebruikt, als alle kolommen van een tabel moeten worden opgevraagd., dan worden alle kolomnamen vervangen door het * symbool. Zoals hieronder: SELECT * FROM Gebruikers; Gegevens uit twee tabellen ( Gebruikers en Aankopen ) ophalen gaat als volgt: SELECT VoorNaam, AchterNaam, GebDatum, Product, Aantal, Prijs FROM Gebruikers, Aankopen; SELECT INTO statement wint gegevens van een databasetabel terug en neemt het in een andere tabel op. Het SELECT INTO voorbeeld staat hieronder: SELECT VoorNaam, AchterNaam, GebDatum INTO UsersBackup FROM Gebruikers; Het eerste deel van het statement lijkt vertrouwd, het selecteert alleen de verschillende kolommen uit een tabel. Het tweede deel van deze SQL statement is het belangrijke deel, dat specificeert om de rijen in de UsersBackup- tabel op te nemen. Het laatste deel specificeert welke tabel er wordt gebruikt om de rijen van te verkrijgen. Dit voorbeeld veronderstelt dat zowel de Gebruikers als de UsersBackup- tabellen een identieke structuur hebben. Om een exacte kopie van de gegevens in de Gebruikers te maken wordt het volgende statement gebruikt: SELECT * INTO UsersBackup FROM Gebruikers; 9

10 SQL WHERE SQL WHERE het keywoord wordt gebruikt om gegevens voorwaardelijk te selecteren, uit de opgegeven tabel(en). Om de WHERE-keywoord toepassingen te illustreren; zijn er twee extra kolommen en extra rijen aan de tabel Gebruikers toegevoegd, die in de vorige hoofdstukken al eerder is gebruikt. VoorNaam AchterNaam GebDatum Stad John Smit 12/12/1969 Zwolle David Bakker 01/03/1954 Den Haag Susan Advocaat 03/03/1970 Hengelo Paul Janssen 09/17/1982 Zwolle Stephen Advocaat 03/03/1974 Hengelo Bekijk de volgende SQL vraag: SELECT VoorNaam, AchterNaam, Stad FROM Gebruikers WHERE Stad = ' Hengelo '; Het resultaat van de SQL uitdrukking zal het volgende zijn: VoorNaam AchterNaam Stad Susan Advocaat Hengelo Stephen Advocaat Hengelo De SQL vraag gebruikte "=" (Gelijk aan) exploitant in de WHERE criteria: Stad = ' Hengelo ' Slechts de gebruikers die zijn geselecteerd en gelijk zijn met de waarde Hengelo in de kolom Stad. Wanneer string-waarden (karakters) in queries worden gebruikt, dan moeten ze tussen aanhalingstekens (dubbele quotes) worden gezet. Bijvoorbeeld: bij de SQL query hieronder worden dubbele quotes in plaats van de enkele quotes gebruikt: SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE Stad = Den Haag ; Als alle gebruikers worden opgevraagd die in AchterNaam O Brain hebben, volgt hier het SQL statement: SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE AchterNaam = O Brain ; 10

11 Echter een string-opmaakt die gebruikt is in de WHERE criteria geeft een error. De SQL-engine zal proberen om de SQL-statement te interpreteren en zal enkele quote binnen de string als het einde van die string beschouwen. Het resterende deel van de SQL-statement wordt niet correct geïnterpreteerd. Door alle enkele quotes in een string met twee enkele quotes te vervangen worden zij geïnterpreteerd door SQL en aangezien één quote in een string. Hier onder staat de verbeterde SQL-statement die correct zal werken: SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE AchterNaam = ' O''Neil '; Het gebruik van = (Gelijk aan) operator in de voorbeelden hierboven, maar er kan ook een van de volgende vergelijkingsoperators samen met SQL WHERE keywoord worden gebruikt: <> (Not Equal) SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE VoorNaam <> 'John'; > (Groter dan) SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE GebDatum > ' 02/03/1970 '; > = (Groter of Gelijk) SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE GebDatum > = ' 02/03/1970 '; < (Less than) SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE GebDatum < '02/03/1970'; <= (Less or Equal) SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE GebDatum <= '02/03/1970'; Er zijn meer mogelijkheden: BETWEEN 20 AND 80 IN (3, 73, `Veld1`) LIKE Ker% IS NULL, IS NOT NULL, AS, MAX(), MIN(), AVG(), COUNT(), SUM(), FIRST() en LAST(), DATEDIFF(), AND, OR en NOT Zie de bijlagen of de mysql website met documentatie voor meer mogelijkheden. 11

12 Naast de vergelijkingsoperators kunnen ook logische operators worden gebruikt. Logische operators worden gebruikt om twee of meer criteria te combineren in een WHERE- statement. Om alle gebruikers uit de tabel Gebruikers te geselecteren die wonen in Zwolle en na 10/10/1975 geboren zijn: SELECT VoorNaam, AchterNaam, GebDatum, , Stad FROM Gebruikers WHERE Stad = ' Zwolle AND GebDatum > ' 10/10/1975 '; Hieronder staat het resultaat van bovengenoemde SELECT: VoorNaam AchterNaam GebDatum Stad Paul Janssen 09/17/1982 [email protected] Zwolle Criteria worden doormiddel van de AND (logische operator) aaneengeschakeld, wat betekent dat beide voorwaarden WAAR moeten zijn. Als alle gebruikers van de tabel Gebruikers worden geselecteerd, welke wonen in Zwolle of na 10/10/1975 geboren zijn zullen in het volgen het statement worden gebruikt: SELECT VoorNaam, AchterNaam, GebDatum, , Stad FROM Gebruikers WHERE Stad = ' Zwolle ' OR GebDatum > ' 10/10/1975 '; Het resultaat is: VoorNaam AchterNaam GebDatum Stad John Smit 12/12/1969 [email protected] Zwolle Paul Janssen 09/17/1982 [email protected] Zwolle Stephen Advocaat 03/03/1974 [email protected] Hengelo Dit keer werken de twee criteria samen met FROM, wat betekent dat minstens één van de twee criteria moet voldoen om te worden opgenomen in het resultaat. De logische operator NOT kan ook in de SQL-statements worden gebruiken, zie het volgende voorbeeld: SELECT VoorNaam, AchterNaam, GebDatum, , Stad FROM Gebruikers WHERE Stad NOT LIKE %dam% '; Dit statement zal alle gebruikers selecteren de van wonen in een stads zonder dam in de kolom Stad. Meer logische operators zijn: BETWEEN.. AND.., IN(..,..,..), IS NULL, IS NOT NULL, AND, OR, NOT en meer 12

13 Jokers (wildcards) zijn: %, # en _ LIKE (gelijkwaardig aan) SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE VoorNaam LIKE ' S% ' Een SQL-statement waarin het LIKE keywoord is gebruikt, zal alle gebruikers met voornaam, die beginnen met de letter S, als resultaat geven. Wanneer het %- karakter binnen een LIKE statement wordt gebruikt, wordt het % beschouwd als een vervanging voor verschillende letters. Het WHERE keywoord samen met het BETWEEN keywoord wordt gebruikt om een gebied te bepalen: SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE GebDatum BETWEEN ' 02/03/1970 ' AND ' 10/10/1972 ' Om meerdere waarden bij een WHERE keywoord te gebruiken kan de IN operator worden gebruikt. SELECT VoorNaam, AchterNaam FROM Gebruikers WHERE Stad IN ( Hengelo, Zwolle ) De SQL statement zal hierboven alle gebruikers van Hengelo en Zwolle terugkeren. 13

14 SQL INSERT De SQL INSERT INTO conditie wordt gebruikt om gegevens in een SQL tabel op te nemen. Het INSERT INTO wordt vaak gebruikt en heeft de volgende syntaxis: INSERT INTO TABEL1 (KOLOM1, KOLOM2, KOLOM3) VALUES (KolomWaarde1, KolomWaarde2, KolomWaarde3) INSERT INTO bestaat eigenlijk uit twee delen. Als eerste de gespecificeerde kolommen in de tabel en ten tweede de waarden die moeten worden toegevoegd in de kolomtabel. De tabel Gebruikers van het vorige hoofdstuk ziet er als volgt uit: VoorNaam AchterNaam GebDatum Stad John Smit 12/12/1969 Zwolle David Bakker 01/03/1954 Den Haag Susan Advocaat 03/03/1970 Hengelo Paul Janssen 09/17/1982 Zwolle Stephen Advocaat 03/03/1974 Hengelo Als er een nieuw record in de tabel Gebruikers wordt invoegt, kan het met het volgende SQL INSERT INTO statement: INSERT INTO Gebruikers (VoorNaam, AchterNaam, GebDatum, , Stad) VALUES (' Frank ', ' Drum ', ' 10/08/1955 ', ', ' Arnhem '); Alle gegevens van de tabel Gebruikers worden geselecteerd vanaf het SQL INSERT INTO hierboven is doorgevoerd. Dat levert het volgende resultaat: VoorNaam AchterNaam GebDatum Stad John Smit 12/12/1969 Zwolle David Bakker 01/03/1954 Den Haag Susan Advocaat 03/03/1970 Hengelo Paul Janssen 09/17/1982 Zwolle Stephen Advocaat 03/03/1974 Hengelo Frank Drum 10/08/1955 Arnhem Het SQL INSERT INTO kan ook een gedeelte van de kolommen, in plaats van alle kolommen in de tabel invoegen. Een voorbeeld om een nieuw record met waarden voor de eerste 4 kolommen en de vijfde niet invult: INSERT INTO Gebruikers (VoorNaam, AchterNaam, GebDatum, ) VALUES (' Frank ', ' Drum ', ' 10/08/1955 ', ' [email protected] '); 14

15 In het bovengenoemde voorbeeld wordt verondersteld dat de waarden in de laatste kolom leeg blijft (niet ingevuld). Het resultaat van het SQL INSERT zal hierboven zijn: VoorNaam AchterNaam GebDatum Stad John Smit 12/12/1969 Zwolle David Bakker 01/03/1954 Den Haag Susan Advocaat 03/03/1970 Hengelo Paul Janssen 09/17/1982 Zwolle Stephen Advocaat 03/03/1974 Hengelo Frank Drum 10/08/1955 NULL Als een nieuwe record wordt opgenomen met waarden voor alle kolommen, dan kunnen de volledige kolomtabellen in het statement worden weggelaten. De volgende twee SQL statementen van het INSERT gelijkwaardig: INSERT INTO Gebruikers VALUES (' Frank ', ' Drum ', ' 10/08/1955 ', ' ', ' Arnhem '); INSERT INTO Gebruikers (VoorNaam, AchterNaam, GebDatum, , Stad) VALUES (' Frank ', ' Drum ', ' 10/08/1955 ', ' ', ' Arnhem '); Als er een kolom wordt overgeslagen en geen waarde krijgt, maar de andere kolommen wel, dan levert dat een fout op van de SQL INSERT INTO uitvoering: INSERT INTO Gebruikers VALUES (' Frank ', ' Drum ', ' 10/08/1955 ', ' '); Het bovengenoemde SQL INSERT zal een fout veroorzaken, omdat er geen waarde voor de kolom Stad is gespecificeerd. De waarde moet bepaald worden om de fout op te lossen. 15

16 SQL DISTINCT Het SQL DISTINCT commando dat samen met het SELECT keywoord wordt gebruikt geeft slechts unieke waarden in de kolom die zijn gespecificeerd. VoorNaam AchterNaam GebDatum Stad John Smit 12/12/1969 Zwolle David Bakker 01/03/1954 Den Haag Susan Advocaat 03/03/1970 Hengelo Paul Janssen 09/17/1982 Zwolle Stephen Advocaat 03/03/1974 Hengelo De Gebruikers tabel heeft verscheidene gebruikers en het zou interessant zijn om een tabel met alle steden op te vragen waar onze gebruikers wonen. Het statement hieronder geeft een lijst met (eventueel) dubbele steden. Mensen kunnen in de zelfde stad wonen: SELECT Stad FROM Gebruikers; Een tabel maken met alle steden zonder die te herhalen in het resultaat wordt gemaakt met DISTINCT keywoord: SELECT DISTINCT Stad FROM Gebruikers; Het resultaat van de SQL DISTINCT uitdrukking van hierboven zal zijn: Stad Zwolle Den Haag Hengelo Eigenlijk verwijdert het DISTINCT keywoord de duplicaten uit de resultatenreeks die door uw SELECT SQL statement is terug gegeven. Het DISTINCT keywoord kan meer dan één kolom uitvoeren. SELECT DISTINCT AchterNaam, Stad FROM Gebruikers; Het bovengenoemde statement waarin een combinatie wordt gemaakt van de kolom AchterNaam en van Stad zal het onderstaande resultaat geven: AchterNaam Smit Bakker Advocaat Janssen Stad Zwolle Den Haag Hengelo Zwolle 16

17 In de originele tabel zijn er twee gebruikers met identieke namen (Advocaat), die om in de zelfde stad (Hengelo) wonen. Omdat de combinatie AchterNaam en waarden van de Stad voor beide gebruikers niet uniek zijn, komt slechts één record terug van de twee. Echter wanneer er één kolom ( ) bij wordt gevoegd: SELECT DISTINCT AchterNaam, , Stad FROM Gebruikers; Dan komen beide gebruikers met de gelijke achternaam wel weer terug. Eenvoudig omdat zij verschillende hebben en zo hun invoeringen wat betreft onze SQL statement uniek zijn geworden: AchterNaam Stad Smit Zwolle Bakker Den Haag Advocaat Hengelo Janssen Zwolle Advocaat Hengelo SQL UPDATE Het SQL commando UPDATE wordt gebruikt om gegevens te wijzigen die in databasetabellen zijn opgeslagen. Als een van één van de gebruikers in de tabel Gebruikers wordt bijgewerkt, dan kan dit met het SQL- statement hieronder: UPDATE Gebruikers SET = [email protected] ' WHERE = ' [email protected] '; In de eerste rij wordt het keywoord UPDATE gevolgd door de tabelnaam die wordt bijwerkt. De tweede regel bepaalt de kolomnaam die wordt gewijzigd, gevolgd door een gelijkaan-teken met de nieuwe waarde voor deze kolom. Meer dan één taak kan na de nieuwe waarde worden ingevoerd, bijvoorbeeld zowel als de stad kunnen worden bijwerken in het zelfde SQL statement: UPDATE Gebruikers SET = ' [email protected]', Stad = ' Den Haag ' WHERE = ' [email protected] '; De derde lijn is de WHERE conditie, die specificeert record(s) die worden geupdate. Hier wordt de kolom bijgewerkt. Wat gebeurt de WHERE de conditie wordt verwijdert zal de SQL query er als volgt uitzien: UPDATE Gebruikers SET = ' [email protected]'; 17

18 Hierdoor zullen alle waarden in de kolom in de tabel Gebruikers veranderd worden in de waarde Dit zal meestal niet de bedoeling zijn, maar het zou kunnen wanneer er verscheidene records bijwerken moeten worden. Bijvoorbeeld wanneer één een kantoor van een bedrijf verhuisd van Den Haag naar Hengelo (er vanuit gaande dat alle werknemers ook verhuisd zijn) kunnen alle records in één keer worden bijgewerkt. Om dat te doen, gebruik de volgende SQL statement: UPDATE Gebruikers SET Stad = ' Hengelo ' WHERE Stad = ' Den Haag '; In beide voorbeelden zorgt de UPDATE WHERE conditie ervoor dat kolomwaarden een nieuwe waarde krijgen, mits ze dezelfde WHERE conditiecriteria hebben. Er kunnen ook meerdere WHERE criteria worden gebruikt, bijvoorbeeld: UPDATE Gebruikers SET = ' [email protected]' WHERE VoorNaam = ' Stefan ' AND AchterNaam = ' Advocaat '; De WHERE criteria zorgen ervoor dat updates alleen in die rijen wordt toegepast, die genoemd zijn. Bij het voorbeeld zal VoorNaam = Stefan ervoor zorgen dat niet alle personen met de achternaam Advocaat worden bijgewerkt. SQL DELETE Om gegevens uit een tabel te verwijderen is er het SQL DELETE commando. Eén van de gebruikers in de tabel Gebruikers (Stefan Advocaat) heeft net het bedrijf verlaten, en zijn record moet worden en verwijderen. Dat gaat als volgt: DELETE FROM Gebruikers WHERE AchterNaam = ' Bakker '; De eerste lijn in het SQL DELETE statement hierboven specificeert de tabel waar record(s) moeten worden verwijdert. De tweede lijn (WHERE conditie) specificeert welke rijen precies worden verwijdert (alle rijen waar AchterNaam gelijk is aan Advocaat). Een probleem dat zich voor kan doen bij DELETE is, dat er teveel records worden verwijderd. Er zijn in ons voorbeeld meer dan één gebruiker met dezelfde achternaam. Alle gebruikers met deze achternaam zullen worden verwijderd. Het is van belang om records zeer goed te specificeren (uniek maken). Onze betere SQL vraag die slechts het record van Stefan Advocaat record verwijderd zal er bijvoorbeeld als volgt uitzien: DELETE FROM Gebruikers WHERE = ' [email protected] '; 18

19 Wat gebeurt er als de WHERE conditie in DELETE niet is gespecificeerd? DELETE FROM Gebruikers; Het antwoord is dat alle records in de tabel van Gebruikers worden verwijderd. SQL TRUNCATE statement hieronder zal het zelfde effect hebben als het DELETE statement: TRUNCATE TABLE Gebruikers; De TRUNCATE statement zal alle rijen in de tabel van Gebruikers, verwijderen zonder de tabel zelf te verwijderen. Wees zeer zorgvuldig met het gebruik van DELETE en TRUNCATE, omdat deze statements niet ongedaan gemaakt kunnen worden. Zodra de record(s) verwijdert zijn uit de tabel is het niet meer terug te draaien. SQL ORDER BY SQL ORDER BY conditie wordt gebruikt om de gegevensreeksen die van een SQL database worden ontvangen te ordenen. Een opdracht waar één of meerdere kolommen uit een tabel worden gehaald, komt vaak niet gestructureerd over. Dit wordt opgelost door gegevens in een van de kolomen te sorteren op (bijvoorbeeld) de VoorNaam. Zie de volgende ORDER BY SQL statement om dit toe te passen: SELECT * FROM Gebruikers ORDER BY VoorNaam; Het resultaat van de ORDER BY statement zal hierboven het volgende zijn: VoorNaam AchterNaam GebDatum Stad David Bakker 01/03/1954 [email protected] Den Haag John Smit 12/12/1969 [email protected] Zwolle Paul Janssen 09/17/1982 [email protected] Zwolle Stefan Advocaat 03/03/1974 [email protected] Hengelo Susan Advocaat 03/03/1970 advocaat@door_zee.com Hengelo De rijen in de kolom VoorNaam zijn nu alfabetisch gesorteerd. ORDER BY kan ook gebruikt worden om de gegevens door meer dan één kolom toe te passen. Bijvoorbeeld, als er zowel de AchterNaam als de kolom Stad toevoegen, zou de volgende ORDER BY statement moeten werken: SELECT * FROM Gebruikers ORDER BY AchterNaam, GebDatum; 19

20 Hier is het resultaat van deze ORDER BY statement: VoorNaam AchterNaam GebDatum Stad Susan Advocaat 03/03/1970 Hengelo Stefan Advocaat 03/03/1974 Hengelo David Bakker 01/03/1954 Den Haag Paul Janssen 09/17/1982 Zwolle John Smit 12/12/1969 Zwolle De kolommen kunnen ook worden omgekeerd in de ORDER BY statement, zoals hieronder: SELECT * FROM Gebruikers ORDER BY GebDatum, AchterNaam; Deze ORDER BY statement zal de zelfde resultaten terugkeren, maar de volgorde is anders. Hier is het resultaat: VoorNaam AchterNaam GebDatum Stad David Bakker 01/03/1954 [email protected] Den Haag John Smit 12/12/1969 [email protected] Zwolle Susan Advocaat 03/03/1970 advocaat@door_zee.com Hengelo Stefan Advocaat 03/03/1974 [email protected] Hengelo Paul Janssen 09/17/1982 [email protected] Zwolle In beide ORDER BY voorbeelden tot dusver, wordt voor karakterkolommen (VoorNaam, AchterNaam) op gesorteerd op alfabetische volgorde en van vroeger aan recentere data voor de kolom GebDatum. Om onze gegevens omgekeerd te sorteren wordt het keywoord DESC toegevoegd: SELECT * FROM Gebruikers ORDER BY VoorNaam DESC; Het resultaat is als volgt: VoorNaam AchterNaam GebDatum Stad Susan Advocaat 03/03/1970 advocaat@door_zee.com Hengelo Stefan Advocaat 03/03/1974 [email protected] Hengelo Paul Janssen 09/17/1982 [email protected] Zwolle John Smit 12/12/1969 [email protected] Zwolle David Bakker 01/03/1954 [email protected] Den Haag Het tegengestelde van het keywoord DESC is het ASC keywoord waarbij de gespecificeerde kolommen alfabetisch worden gesorteerd. Wanneer er geen ASC of DESC na een kolom in de ORDER BY wordt specificeert, dan zal de opdracht worden uitgevoerd met ASC (alfabetisch, van laag aan hoogte). 20

21 Het is belangrijk om te onthouden dat wanneer er door meer dan één kolom opdracht geeft tot ASC en/of DESC, elke kolom moet worden gespecificeerd. Bijvoorbeeld zal het statement hieronder door zowel AchterNaam als GebDatum opdracht geven tot maar slechts zal AchterNaam in dalende ORDER BY zijn: SELECT * FROM Gebruikers ORDER BY GebDatum, AchterNaam DESC; Wanneer beide kolommen aflopend moeten zijn, dan moet het ORDER BY statement in dit veranderen: SELECT * FROM Gebruikers ORDER BY GebDatum DESC, AchterNaam DESC; SQL Aggregate functies De SQL aggregate functies komt er één enkele waarde terug, waarbij waarden zijn gebruikt uit een kolom. Voor dit hoofdstuk wordt een nieuwe tabel gebruikt met de naam Verkoop, die de volgende kolommen en de gegevens zal hebben: ORDER Nr ORDER Datum ORDER Prijs ORDER Aantal KlantNaam 1 12/22/ Smit 2 08/10/ Johnson 3 07/13/ Baldwin 4 07/15/ Smit 5 12/22/ Hout 6 10/2/ Smit 7 11/03/ Baldwin De SQL functie van de COUNT geeft voor alle rijen in een tabel een waarde terug die aan de criteria voldoet aan de specificaties in de WHERE conditie. Als de hoeveel orders van een klant met de KlantNaam Smit moet worden bepaald, dan zal het volgende SQL uitdrukking van de COUNT worden gebruikt: SELECT COUNT (*) FROM Verkoop WHERE KlantNaam = ' Smit '; Het COUNT keywoord wordt gevolgd door het * karakter tussen haken. Het gaat om alle kolommen in de tabel. Het statement zal de zelfde resultaten geven als bij WHERE, mits de voorwaarden het zelfde zijn. Het resultaat van de bovengenoemde SQL statement zal aantal 3 zijn, omdat de klant met de naam Smit in totaal drie bestellingen heeft geplaatst. Als de specificaties in de WHERE conditie niet wordt gebruikt, zoals bij het statement hieronder. Er komen 7 records terug: SELECT COUNT(*) FROM Verkoop; 21

22 Het aantal unieke klanten bepalen die een bestelling hebben geplaatst kan door het DISTINCT keywoord toe te voegen aan een functie zoals COUNT: SELECT COUNT (DISTINCT KlantNaam) FROM Verkoop; De SQL functie SOM wordt gebruikt om de som van waarden in een numerieke kolom te bepalen. Bij de tabel Verkoop, kan de som van alle orders met de volgende SQL statement worden bepaald: SELECT SOM (OrderPrijs) FROM Verkoop; Het resultaat van de bovengenoemde SQL statement is aantal Als de hoeveel producten die in totaal verkocht zijn (de som van OrdersPrijs) bepaald moet worden: SELECT SOM (OrderPrijs) FROM Verkoop; De SQL AVG functie bepaald de gemiddelde waarde voor een numerieke kolom terug. Dit opvragen kan als volgt: SELECT AVG (OrdersPrijs) FROM Verkoop; Natuurlijk kan de functie AVG worden gebruikt in combinatie met de WHERE conditie, waarbij de gegevens worden beperkt met de conditie(s): SELECT AVG (OrderPrijs) FROM Verkoop WHERE ORDER Prijs > 200; De bovengenoemde SQL uitdrukking zal gemiddelde order Aantal voor alle orders met een orderprijs groter dan 200 terugkeren. De SQL MIN functie selecteert het kleinste getal van een numerieke kolom. Om te bepalen wat de minimumprijs van de OrdersPrijs in de Verkoop- tabel, de volgende SQL uitdrukking wordt gebruikt: SELECT MIN (OrdersPrijs) FROM Verkoop; De SQL MAXIMUM functie vraagt het maximum numerieke waarde van een numerieke kolom terug. De MAXIMUM SQL statement geeft de hoogste orderprijs van de tabel van de Verkoop terug: SELECT MAX(OrdersPrijs) FROM Verkoop; 22

23 SQL GROEP BY De SQL GROEP BY statement wordt gebruikt samen met de SQL aggregate functies om de ontvangen gegevens te groeperen voor één of meerdere kolommen. De GROUP BY is één van de lastigste onderwerpen voor mensen die nieuw zijn met SQL. Van de tabel Verkoop moeten de unieke klanten worden verzameld en het totale besteedde bedrag per klant worden bepaald. ORDER Nr ORDER Datum ORDER Prijs ORDER Aantal KlantNaam 1 12/22/ Smit 2 08/10/ Johnson 3 07/13/ Baldwin 4 07/15/ Smit 5 12/22/ Hout 6 10/2/ Smit 7 11/03/ Baldwin Om uit een tabel de unieke klanten op te vragen wordt het DISTINCT keywoord gebruikt: SELECT DISTINCT KlantNaam FROM Verkoop; Dit werkt, maar geeft geen totale bestedingen per klant terug. De SQL SUM functie en de GROUP BY conditie samen gaat als volgt: SELECT KlantNaam, SOM (OrderPrijs) FROM Verkoop GROUP BY KlantNaam; Er worden 2 kolommen met SELECT gespecificeerd. KlantNaam en SOM (ORDER Prijs). Het probleem is dat de SOM (ORDER Prijs), één enkele waarde terugkeert, terwijl er vele klanten in onze tabel van de Verkoop hebben. De GROUP BY conditie combineert alle unieke klantnamen uit KlantNaam samen. In dit geval de GROUP BY conditie gelijk met het DISTINCT statement. Het resultaat dat wordt gegeven is: KlantNaam ORDER Prijs Baldwin 2500 Johnson 190 Smit 1400 Hout 1000 Groepering met GROUP BY op meer dan één kolom gaat bijvoorbeeld als volgt: SELECT KlantNaam, OrderDatum, SOM (OrderPrijs) FROM Verkoop GROUP BY KlantNaam, OrderDatum; Alle kolommen in een SELECT statement verschijnen in moeten ook in de GROUP BY conditie worden vermeld, muv de aggretage kolommen. 23

24 SQL HAVING SQL HAVING conditie wordt gebruikt samen met de SELECT conditie om een onderzoeksvoorwaarde voor een groep of een aggregate te specificeren. De HAVING conditie gedraagt zich als WHERE de conditie, maar op groepen - de rijen die een groep vertegenwoordigen. In tegenstelling tot WHERE wordt de HAVING conditie toegepast op individuele rijen, niet op groepen. Verduidelijken hoe precies HAVING werkt: ORDER Nr ORDER Datum ORDER Prijs ORDER Aantal KlantNaam 1 12/22/ Smit 2 08/10/ Johnson 3 07/13/ Groot 4 07/15/ Smit 5 12/22/ Hout 6 10/2/ Smit 7 11/03/ Groot In het vorige hoofdstuk werd uit een tabel met alle klanten, het totale bedrag per klant verkregen: SELECT KlantNaam, SOM (OrderPrijs) FROM Verkoop GROUP BY KlantNaam; Nu worden alle unieke klanten selecterend, die meer dan 1200 per artikel hebben besteed. Het SQL statement hier boven wordt gecombineerd met de HAVING conditie aan het eind van het wijzigen: SELECT KlantNaam, SOM (OrderPrijs) FROM Verkoop GROUP BY KlantNaam HAVING SOM (OrderPrijs) > 1200; Het resultaat van de SELECT vraag nadat er de HAVING onderzoeksvoorwaarde aan is toevoegd staat hieronder: KlantNaam ORDER Prijs Groot 2500 Smit 1400 Een ander nuttig voorbeeld van de HAVING conditie is wanneer alle klanten geselecteerd moeten worden die meer dan tot 5 artikelen hebben besteld. Het HAVING statement zal er dan zo uitzien: SELECT KlantNaam, SOM (ORDER Aantal) FROM Verkoop GROUP BY KlantNaam HAVING SOM (OrderAantal) > 5; 24

25 WHERE en HAVING beide in één SELECT statement gebruiken kan ook. Bijvoorbeeld wanneer alle klanten geselecteerd worden die meer dan 1000, na 10/01/2005 hebben besteed. De SQL statement met inbegrip van de HAVING- en WHERE condities ziet er zo uit: SELECT KlantNaam, SOM (OrderPrijs) FROM Verkoop WHERE OrderDatum > 10/01/2005. GROUP BY KlantNaam HAVING SOM (OrderPrijs) > 1000; De voorwaarde van het conditieonderzoek in een WHERE conditie wordt toegepast op elke individuele record in de tabel van de Verkoop. Daarna wordt de HAVING conditie toegepast op het resultaat uit WHERE, om de rijen te bepalen voor het definitieve resultaat. Het belangrijke om te onthouden is dat de groepering slechts op de rijen wordt toegepast die in de WHERE conditievoorwaarde passen. 25

26 SQL Tabel relaties, Primaire- en Foreign keys Tot dusver zijn alle SQL voorbeelden die zijn toegepast op één enkele tabel. In werkelijkheid bestaan databases uit veel verschillende tabellen, die een relatie met elkaar hebben. Het ware kracht van Relational Database Management Systems (RDBMS) is het feit dat ze relationeel zijn. De relaties in een RDBMS zorgen ervoor dat er geen overbodige gegeven worden opgeslagen. Een voorbeeld van overbodige gegeven is bijvoorbeeld: Een online computerverkoper kan het makkelijkst zijn verkoop bijhouden in een database. Een tabel Product met alle artikelen bevatten met informatie over elke model, prijs en de fabrikant en details zoals fabrikanten-website en hun support adres. De tabel kan er als volgt uitzien: model Prijs Fabrikant website B Dello B Dello E Dello A Tomma P Tomma Om de overtollige fabrikantengegevens in de tabel van het Product te verwijderen, kan een nieuwe tabel worden gemaakt met de naam Fabrikant, die slechts één invoering (rij) voor elke fabrikant zal hebben en tussen deze tabel en de tabel Product een relatie leggen. Om deze relatie tot stand te brengen moeten er een extra kolom in de tabel Product worden toevoegt die de verwijzingen naar een specifieke fabrikant legt. Een verband tussen 2 tabellen wordt gelegd wanneer de gegevens in één van de kolommen in de eerste tabel, gegevens in een kolom uit de tweede tabel verband met elkaar hebben. 26

27 De Primaire-key en Foreign key. De Primaire-key, ook wel Globally Unique Identifier GUID), is een kolom of een combinatie van kolommen die elke rij in een tabel uniek maakt (identificatie voor die rij met gegevens). De Foreign-key is een kolom of een combinatie van kolommen waarvan de waarden overeen komen met een Primaire-key in een andere tabel. Meestal past een Primaire-key (tabel-x) op één van de andere tabellen met een Foreign-key (tabel-y). De volgende tabellen hieronder gaan we gebruiken: Fabrikant FabrikantID Fabrikant website 1 Dell [email protected] 2 Toshiba [email protected] Product model Prijs FabrikantID Inspiron B Inspiron B Inspiron E Satelliet A Satelliet P De eerste tabel Fabrikant heeft 2 records, een voor Dell en een voor Toshiba. Elk van deze records heeft een waarde FabrikantID, een uniek interger getal. Omdat de kolom FabrikantID voor de tabel uniek is voor de fabrikant, kan dit als Primaire-key voor deze tabel worden gebruiken. De tabel Product heeft de kolommen Model en Prijs, maar heeft een nieuwe kolom met de naam FabrikantID, die gelijk is aan de Primary key uit de tabel Fabrikant. Alle waarden in de kolom FabrikantID moeten één een Primaire-key hebben die aansluit op de FabrikantID uit de tabel Fabrikant. (bijvoorbeeld: FabrikantID met waarde van 3 in de tabel Product kan niet, omdat FabrikantID 3 niet staat in de tabel fabrikanten). Uiteraard kunnen de keys elke gewenste waarde krijgen, die denkbaar is. De vraag is nu: hoe kan worden voorkomen dat er een ongeldige invoer in de tabel Product wordt gezet, zoals de laatste invoering hieronder een foutieve tabel geeft: model Prijs FabrikantID Inspiron B Inspiron B Inspiron E Satelliet A Satelliet P MacBook Pro Referentiële integriteit Er bestaat geen fabrikant met de waarde 3 als FabrikantID in de tabel Fabrikant, vandaar dat deze invoering in de tabel Product ongeldig is. Referentiële integriteit tussen de 2 tabellen moet worden afgedwongen. Verschillende RDBMS hebben verschillende manieren om referentiële integriteit af te dwingen. Bij MS Access is dit een checkbox op de eigenschappen van de relatie. 27

28 Soorten relaties Er zijn 3 soorten relaties tussen tabellen. One-To-Many, Many-To-Many en One-To- One. De relatie hierboven is One-To-Many en is het meest gebruikte. In One-To- Many relaties kan een rij in één van de tabellen een relatie hebben met meerdere rijen in een tweede tabel. In het voorbeeld, wordt elke fabrikant (een rij in de tabel van de Fabrikant) in relatie gelegd met verschillende computermodellen (verscheidene rijen in de tabel Product), maar elk bepaald product (een rij in de tabel van het Product) heeft slechts één fabrikant (een rij in de tabel van de Fabrikant). Het tweede type is de Many-To-Many relatie. In deze relatie kunnen vele rijen van de eerste tabel een relatie hebben met vele rijen in de tweede tabel en omgekeerd. Om dit relatie type uit te leggen is er een derde tabel nodig waar de Primaire-key wordt samengesteld uit 2 Foreign-keys (die uit twee andere tabellen komen). Wij hebben een tabel van het Artikel (ArtikelID is Primaire-key) en Categorie tabel (CategorieID is Primaire-key). Elk artikel dat in de tabel Artikel wordt gepubliceerd kan tot meerdere categorieën behoren. Er wordt in deze situaties een nieuwe tabel gemaakt met de naam ArtikelCategorie, die slechts 2 kolommen heeft; ArtikelID en CategorieID (deze 2 kolommen vormen samen de primaire sleutel voor deze tabel). Deze nieuwe tabel soms verbindingstabel (junction-tabel) genoemd en bepaalt het Many-To-Many verband tussen de 2 tabellen, zodat één artikel tot meerdere categorieën kan behoren, en elke categorie kan meer dan één artikel bevatten. In de One-To-One relatie kan elke rij in de eerste tabel slechts één rij in de tweede tabel. In deze gevallen is het vaak handiger om van die twee tabellen één tabel te maken. Een handige toepassing van One-to-One is: de gegevens van één grote tabel in twee tabellen te verdelen. Details worden uit de oorspronkelijke tabel verwijdert en in de nieuwe tabel gezet. Bij wijzigingen of toevoegingen worden enkele records gewijzigd in plaats van meerdere records. Dit verbeterd de prestaties en verkleint de grootte van de database. Het proces om overtollige gegevens uit tabellen te verwijderen en de onderlinge relaties tussen tabellen te bepalen wordt Normalisatie genoemd. Het proces van de normalisatie gebruikt formele methodes om de database met daarin de nodige tabelverbanden te ontwerpen. 28

29 De eerste stappen om een database op te zetten De volgende stappen moeten worden doorlopen om een genormaliseerde database te maken: 1. Tabellen maken (incl normalisatie) 2. Relaties leggen 3. Queries maken 4. Forms maken (in- en uitvoer windows + de menustructuur + evt. macro s) 5. Reports en grafieken maken 6. Testen Om te beginnen moeten er tabellen komen. De benodigde velden voor een tabel(len) zijn te halen uit documenten, facturen, bestellijsten, productlijsten, ed. Of ze moeten worden uitgedacht. Zo kunnen bijvoorbeeld de onderstaande documenten gebruikt worden om van een database op te zetten: 29

30 Als eerst is het handig om het volgende te weten, wanneer een tabel wordt gemaakt: Maak geen kolommen aan waarvan de gegevens overal terug komen, bijv: bedrijfsnaam Expert Als er geen directe sleutel (identificatie) voor rijen is aan te wijzen, introduceer die dan. Namen bestaan uit: titulatuur (dhr, mevr, etc), de voornaam, tussenvoegsel, en de achternaam. Voeg eventueel tabellen samen wanneer dit kan, bijv: woonadres en afleveradres. Adressen bestaan uit: straatnaam, huisnummer en het appartementnummer. Alle kolommen (attributen) moeten een unieke naam hebben. Dus de kolomnaam product komt slecht in één tabel voor. Voorkom namen die het zelfde betekenen, zoals debiteur en klantnummer. Gegevens kunnen de volgende typen hebben: numeriek, tekst, kladblok/memo (string), datum en logisch. Benamingen van tabellen, velden en queries Enkele algemene tips bij het benoemen van velden en tabellen: Gebruik geen underscores _ ; het is slecht te lezen, automatisch code genereer programma s hebben er soms moeite mee, Gebruik een Mix van Hoofd- en kleineletters, Gebruik geen spaties, Om enig overzicht te houden in een database is het wijs de verschillende databaseonderdelen in de naamgeving terug te laten komen, bijvoorbeeld: Een tabelnaam begint met: tbl Een querynaam begint met: qry Een formuliernaam begint met: frm Een rapportnaam begint met: rpt Goede voorbeelden van benamingen zijn: tblklant, tblorder, tblorderinvoer, tblfabricant en tblproduct. Kolomnamen (voor de in te vullen velden) moeten ook eenduidig worden gebruikt. Enkele tips speciaal voor velden in een tabel: Geef een code mee tot welke tabel het veld behoord; In de tabel tblklanten komen velden voor als: kntklantnummer, kntklantnaam, etc. Velden met een algemeen doel zoals: notities (notes), status, naam (name) of een datum krijgen dit mee in hun naam. Enkele voorbeelden van dergelijk veldnamen: kntklantnotes, ordordernotes, prdproductguid (primary key) Een query kan het beste beginnen met het soort SQL-query dat gebruikt is, bijvoorbeeld: s voor SELECT, i voor INSERT, u voor UPDATE, d voor DELETE en x voor opgeslagen procedures die worden aangeroepen. 30

31 Normalisatie Normalisatie is een gestructureerde manier bij het opzetten van een databases, zodat een aantal gerelateerde tabellen gezamenlijk alle gewenste gegevens bevatten. Nulde normaalvorm (0NV) Uit de beschikbare tabellen worden: Contanten zijn verwijdert. Proces gegevens / berekeningen verwijdert. Uitsluitend data en relevante gegevens worden bewaard. Een sleutel aangewezen. 0NV = sleutel, RG(datum, code, titel, naam, type, omschrijving) RG betekend: repeterende groep. Kandidaatsleutels kunnen zijn: klantnummers, Sofi-numers, Leerlingnummers, en codes. Eerste normaalvorm (1NV) Voor de repeterende groep worden gegevens vaak meerdere malen ingevoerd, zoals het veld code. Neem repeterende groepen appart, zodat er GEEN repeterende groepen meer zijn. 1NV = (datum) (datum, code, titel, naam, type, omschrijving) Tweede normaalvorn (2NV) De gegevens die niet behoren tot de gehele sleutel (voor alle gegevens, hier is dat datum), maar slechts tot een deel worden verder opgesplitst. 2NV = (code, titel, naam, type, omschrijving) (datum, code) (datum) Derde normaalvorm (3NV) Bij de derde normaal vorm worden overtollige gegevens verwijdert. In de 2NV hierboven staat een type, dat enkele vastgestelde combinaties kent. Deze combinaties kunnen in een aparte tabel worden gezet. Daarnaast is er een tabel waarin één veld datum zit. Dit is zinloos, deze tabel wordt verwijdert. Het resultaat van de 3NV is: 3NV =(type, omschrijving) (code, titel, naam, type) (datum, code) 31

32 Uit de 3NV kunnen we tabellen met de benodigde kolomnamen (attributen) maken. De relaties worden van de eerste tabel trapsgewijs gelegd met de andere tabellen. TABEL1 met datum en code heeft de vreemde sleutel code, die meer betekenis krijgt in TABEL2 met de waarden: code, titel, naam, type. De vreemde sleutel type krijgt op zijn beurt weer meer betekenis door TABEL3 waarin de omschrijving staat. Daarbij moet de referentiele integriteit van de relaties worden bepaald, zie hiervoor het hoofdstuk met Soorten relaties. Een entiteit relatie diagram verduidelijkt en geeft een helder overzicht welke velden (kolommen) relaties onderhouden en op welke manier. In een entiteit relatie diagram kunnen op de volgende manieren relaties naar andere tabellen verduidelijken en worden weergegeven. Eén op één combinatie; niet veel gebruikt Nul op één combinatie; Eén op meer combinatie; Nul op meer combinatie; 32

33 SQL JOIN De SQL JOIN conditie wordt gebruikt om van twee of meer tabellen gegevens op te vragen en die in een gemeenschappelijk weer te geven in één resultaat. Zoals bij de tabellen Product en Fabrikant. Wanneer een Primaire-key in één van de tabellen gelijk is aan een Foreign-key in de tweede tabel, dan kunnen de twee gerelateerde tabellen worden gebruikt in een JOIN statement: SELECT Fabrikant, website, , AVG(Prijs) AS GemPrijs FROM Fabrikant JOIN Product ON Fabrikant.ManufacturerID = Product.ManufacturerID GROUP BY Fabrikant, website, ; Het eerste wat duidelijke wordt over het SELECT statement is dat de kolommen uit twee verschillende tabellen komen. De FROM conditie wordt gevolgd door een JOIN conditie. De JOIN conditie bestaat uit twee delen, ten eerste het deel dat de tabellen verklaart aanwijst: Fabrikant JOIN Product En het tweede deel, dat specificeert bij welke kolommen de gegevens komen: ON Fabrikant.ManufacturerID = Product.ManufacturerID Omdat de kolom Prijs een parameter voor de functie AVG is in het SQL statement, kan de GROUP BY conditie alleen voor de andere kolommen worden gebruikt die in het SELECT statement zijn gebruikt. Alle fabrikanten en de gemiddelde prijs van hun product worden als resultaat weergegeven: Fabrikant website AvgPrice Dello [email protected] Tomma [email protected] Een JOIN voorwaarde nabootsen, kan ook in een WHERE conditie zijn geplaatst in plaats van een FROM conditie, zonder het JOIN keywoord te gebruiken, zoals hieronder gedaan is: SELECT Fabrikant, website, , AVG(Prijs) AS GemPrijs FROM Fabrikant, Product WHERE Fabrikant.ManufacturerID = Product.ManufacturerID GROUP BY Fabrikant, website, ; Het wordt gezien als beter programmeerwerk om de JOIN te gebruiken ipv de FROM conditie. Bij het samenvoegen van tabellen (JOIN) moet ervoor worden opgepast dat er geen dubbelzinnig taalgebruik in de kolomnamen voorkomt. In het voorbeeld worden zowel de tabel: Fabrikant en Product worden de kolomnamen genoemd (bijv: ManufacturerID). Daarom zijn de kolommennaam en de gebruikte tabelnaam samengevoegd met een punt. 33

34 Een ander onderwerp om aan te halen is het volgende stukje SQL statement: AVG (Prijs) AS GemPrijs Omdat de kolom voor de AVG functie wordt gemaakt, geven we die kolom ook een naam (in het voorbeeld: GemPrijs). In SQL termen is er een alias voor een nieuwe kolom aangemaakt. Er zijn 2 belangrijke soorten SQL JOINS; INNER JOINS en OUTER JOINS. In het voorbeeld is dit niet gespecificeerd, maar standaard is het een INNER JOIN. De INNER JOIN- en JOIN condities zijn algemeen verwisselbaar (JOIN condities kunnen voor de verschillende RDBMS verschillende syntaxis hebben!). INNER JOIN conditie zal alle rijen van beide tabellen opvragen zolang er een overeenkomst is tussen de kolommen. Als er een nieuwe fabrikant aan de tabel van Fabrikant wordt toevoegt, maar deze is niet toevoegt aan de Producten tabel, dan zal het resultaat het zelfde zijn als het alvorens de nieuwe fabrikant toe te voegen was. Dit gebeurt eenvoudig omdat er geen overeenkomst is voor deze nieuwe fabrikant in de Producten tabel en omdat er een INNER JOIN is gebruikt, die slechts de overeenkomende records terugkeert. Het definitieve resultaat is dat deze fabrikant met producten niet in de query gegevens verschijnt. Om alle fabrikanten uit de tabel weergegeven moeten worden, of ze nu wel of geen producten in de Product tabel hebben, dan is OUTER JOIN de oplossing. De OUTER JOIN conditie geeft alle records van minstens één van de aangesloten bij tabellen als resultaat geven, mits deze rijen aan de zoekvoorwaarden voldoen die in WHERE en HAVING conditie gespecificeerd zijn. Om alle fabrikanten en hun gemiddelde productprijs te krijgen, zonder dat er een enkele fabrikant nog geen vermelde producten heeft, dan zal het volgende SQL statement worden gebruikt: SELECT Fabrikant, website, , AVG (Prijs) AS AvgPrice FROM Fabrikant LEFT OUTER JOIN Product IN Fabrikant.ManufacturerID = Product.ManufacturerID GROUP BY Fabrikant, website, ; Het verschil in het nieuwe statement is het keywoord LEFT OUTER voor het JOIN keywoord is toevoegt. LEFT OUTER heeft twee subtypes, namelijk een LEFT en een RIGHT. Wanneer de LEFT OUTER wordt gebruikt, wordt bedoeld dat alle records weergegeven moeten worden uit de tabel die LINKS is genoemd van het woord JOIN (ook wel de eerste tabel zelfs wanneer de records niet in de tweede tabel staan. Left is in het voorbeeld: Fabrikant). Wanneer er geen gemiddelde waarden (AVG) in de Product tabel aanwezig zijn, voor een opgevraagde Fabrikant, dan zal daar de NULL worden ingevuld. Het resultaat van onze LEFT OUTER JOIN query zal er als volgt zien als Apple aan de tabel van de Fabrikant wordt toevoegt, terwijl er nog geen producten zijn toe gevoegd aan de tabel Producten: 34

35 Fabrikant website AvgPrice Dello Tomma Apple NULL De RIGHT OUTER JOIN of simpel gezegd RIGHT JOIN doet precies het tegenover gestelde van de LEFT JOIN. Alle records uit de tabel Producten (tweede tabel) die aan de FROM conditie voldoen, worden vermeld. Producten waarvoor nog geen Fabrikant (eerste tabel) zijn aangemaakt zullen de waarde NULL krijgen. In het kort komt het hier op neer: JOIN: Geeft alle records als er minimal 1 overeenkomst is in de tabellen LEFT JOIN: Geeft alle records als er minimal 1 overeenkomst is in de linker tabel, zelfs als er geen overeenkomst is in de rechter tabel. RIGHT JOIN: Geeft alle records als er minimal 1 overeenkomst is in de rechter tabel, zelfs als er geen overeenkomst is in de linker tabel. FULL JOIN: Geeft records terug als ere en overeenkomst is in één van de tabellen Tot slot; een tabel kan ook aan zich worden gekoppeld (joined), daarvoor moeten er voor de gekoppelde waarden in die tabel twee verschillende aliassen in FROM conditie worden opgegeven. SQL UNION De SQL UNION wordt gebruikt om de resultaten van twee of meer SELECT SQL statements in één enkel resultaat te combineren. Alle statements die met UNION worden aaneengeschakeld moeten de zelfde structuur hebben. Dit betekent dat de beide statements evenveel kolommen moeten hebben, en de overeenkomstige kolommen moeten ook de zelfde of uitwisselbare gegevenstypes hebben (impliciet aan het zelfde type of de uitdrukkelijk kan worden omgezet naar het zelfde type). De kolommen in elke SELECT statement moeten ook in precies de zelfde volgorde zijn vermeld. Zo ziet een eenvoudige UNION statement er uit: SELECT KOLOM1, KOLOM2 FROM TABEL1 UNION SELECT KOLOM1, KOLOM2 FROM TABEL2; De kolomnamen in het resultaat van een UNION zijn altijd gelijk met de kolomnamen in het eerste SELECT statement. De UNION operator verwijdert standaard alle dubbele records uit de lijst met resultaten. De ALL optie kan na het UNION keywoord worden gebruikt, hiermee wordt afgedwongen dat alle records met inbegrip van duplicaten terecht komen in de lijst met resultaten. 35

36 SQL genestelde queries Een SQL genestelde query (nested) is een SELECT vraag die een SELECT, UPDATE, INSERT of DELETE-query wordt gebruikt. Een eenvoudig voorbeeld van SQL genestelde vraag: SELECT Model FROM Product WHERE ManufacturerID IN (SELECT ManufacturerID FROM Fabrikant WHERE Fabrikant = ' Dell '); De genestelde vraag zal hierboven alle modellen van de tabel van het Product selecteren die door Dell wordt vervaardigd: Model Inspiron B120 Inspiron B130 Inspiron E1705 Een geneste quety kan meer dan één niveau (zoals hierboven, waarbij er maar één enkele vraag is genesteld). Een ander voorbeeld van genestelde query (subquery) is hier onder te zien: SELECT * FROM atrtikelen WHERE ArtikelNummer IN (SELECT ArtikelNummer FROM Orders WHERE OrderNummer IN (SELECT OrderNummer FROM Orders WHERE OrderDatum BETWEEN #01/12/2007# AND #29/05/2008#)); Doormiddel van de IN-keys worden er meerdere tabellen geraadpleegd. 36

37 SQL CREATE De CREATE DATABASE statement wordt gebruikt om tot een nieuw SQL database te maken heeft de volgende syntaxis: CREATE DATABASE DatabaseNaam De CREATE DATABASE implementatie en syntaxis verschilt tussen verschillende RDBMS. De CREATE TABLE statement wordt gebruikt om een nieuwe databasetabel te maken. Hier CREATE TABLE statement: CREATE TABLE TabelNaam ( Kolom1 DataType, Kolom2 DataType, Kolom3 DataType,.. ); DataType die na elke kolomnaam komt wordt gespecificeerd als een placeholder voor de echte gegevenstype van de kolom. Kolommen kunnen de volgende datatypes hebben: Numeriek, Tekst; CHAR Kladblok (memo), Datum, DATE Logisch. LOGIC Het volgende CREATE TABLE statement maakt de tabel van Gebruikers die in één van de eerste hoofdstukken hebben gebruikt: CREATE TABLE SoCalledFriends ( VoorNaam CHAR (100), AchterNaam CHAR (100), GebDatum DATE ); 37

38 SQL ALTER De CREATE TABLE statement hierboven heeft 3 kolommen; VoorNaam van type karakter (char) met lengte van 100 karakters, de kolom AchterNaam van het type karakter heeft een lengte van 100 karakters en kolom GebDatum heeft het type datum. De ALTER TABLE statement gebruikt om een tabel definitie te veranderen door het toevoegen van: kolommen, wijzigen of verwijderen van kolomen. Onder is de syntaxis van een ALTER TABLE statement te zien, waarin een nieuwe kolom aan de tabel wordt toevoegt: ALTER TABLE TableName ADD KolomNaam DataType; Om een kolom te verwijderen kan het volgende doen ALTER TABLE statement: ALTER TABLE TableName DROP KolomNaam; 38

39 SQL Views Een SQL VIEW is een virtuele tabel, die op SQL SELECT query gebaseerd is. Een view ligt zeer dicht bij een echte databasetabel (het heeft kolommen en rijen zoals een gewone tabel), behalve dat echte tabellen gegevens opslaan, wat in een view niet kan. Een view bevat gegeven die dynamisch worden aangemaakt wanneer deze een verwijzing (referentie) heeft. Een views-verwijzing kan naar één of meer bestaande databasetabellen of andere views worden gelegd. Elke view bevat een soort filter voor tabelgegevens die daarin worden verwezen. Dit filter kan zowel naar de kolommen als de rijen van de tabellen worden toegepast. Hier volgt een voorbeeld van hoe een SQL VIEW gemaakt kan worden met de reeds eerder gebruikte tabellen Product en Fabrikant : CREATE MANDING GemPrijs AS SELECT Fabrikant, website, , AVG(Prijs) LIKE AvgPrice FROM Fabrikant JOIN Product ON Fabrikant.ManufacturerID = Product.ManufacturerID GROUP BY Fabrikant, website, Een view kan worden verwezen (referenced) en gebruikt in een andere view, van een SQL-vraag en van eerder opgeslagen procedures. Een view kan worden verwezen zoals bij elke echte SQL databasetabel: SELECT * FROM `GemPrijs` 39

40 SQL Indexen De indexen in databases zijn te vergelijken met de indexen in een bibliotheek. Indexen zorgen ervoor dat informatie binnen een database snel terug te vinden is (lokaliseren). Als alle boeken in een bibliotheek alfabetisch geïndexeerd zouden zijn, dan zou nooit de gehele bibliotheek doorzocht worden om één enkel boek te vinden. Zoeken op de eerste letter van de boektitel en daarna de volgende letter zou de zoekactie beduidend verkleinen. Een Index kan op één enkele kolom of een combinatie van kolommen worden gemaakt. Een tabelindex is een databasestructuur die de waarden van één of meerdere kolommen in een databasetabel in een bepaalde volgorde sorteert (zoals de boeken in de bibliotheek ook gesorteerd staan). De tabelindex heeft pointers (wijzers) die naar een gespecificeerde tabel-kolom of combinatie tabel-kolommen verwijst. Deze wijzers worden afhankelijk van de soort orde en de index die is gespecificeerd toegepast. Een index maken kan met het CREATE INDEX SQL statement. Voor het Model in de tabel Product wordt een index idxmodel gemaakt: CREATE INDEX idxmodel ON Product (Model); De syntaxis voor het maken van indexen varieert bij de verschillende RDBMSversies, De verdere details over indexen zullen per RDBMS bekeken moeten worden. Er zijn algemene regels voor het gebruik van indexen. Bij kleine tabellen, verbeteren de indexen geen prestaties. Indexen verbeteren alleen de prestaties van de database, wanneer de index wordt aangemaakt op tabel-join. Wanneer bij een query op een database kleine tabellen worden opgevraagd, dan zal het indexeren de zoeksnelheid verbeteren. Worden er bij een query grote delen van de database opgevraagd, dan zal indexeren juist vertragen. Het gebruik Indexen op kolommen die veel verschillende waarden bevat zal het de onderzoeksprestaties verbeteren, maar het zal de updates vertragen. Denk hierover na, voordat een index toegepast op een database. 40

41 SQL Hosting Wat is SQL hosting? De term SQL hosten verwijst naar een online dienst die database runt voor de ondersteuning van website(s). Een Web-hosting bedrijf kan SQL- hosting aanbieden, wat helpt om een dynamischere websites te ontwikkelen. De dagen van de statische websites zijn lang voorbij en achter elke populaire site zit tegenwoordig een database in de back-end. Om een kwalitatieve en gebruikers vriendelijke website te ontwikkelen en beheren is een SQL-account nodig. Groter ondernemingen gebruiken hun eigen database-servers, zoals: MS SQL-server, Oracel of MySQL. De SQL hosting aanbiedingen zijn de laatste jaren meer betaalbaar geworden. Perssonlijke websites gaan vaak via een webhostings bedrijf. Bekijk de mogelijkheden per hostings-bedrijf en bepaal zelf welke diensten nodig zijn tov van de kosten. SQL hosten op Linux De meeste hosting leveranciers van Linux bieden MySQL-database aan als standaard mogelijkheid. Oracel is een andere RDBMS die op Linux/Unix draait, maar die zijn zeldzaam tov het gebruik van SQL. Applicaties voor het lokaal-hosten van een web-server, MySQL, PHP en Peral op Linux. Zie: SQL hosten op Windows Als Windows zijn er verschillende keuzes om SQL te hosten als back-end. De MS SQL-server is de meest populairste database server (deze vorm van hosten wordt vaak SQL server hosting genoemd). Windows SQL hosting kan ook samen met een Oracel database werken, deze zijn kostbaarder maar ook beter. Een goed alternatief voor Windows SQL hosting is MySQL. De meeste Windows bedrijfsoplossingen (applicaties en sites) ondersteunen MySQL-databases. Een andere populaire SQL database is MS-Access, maar deze database wordt alleen voor kleine websites en applicaties aanbevolen, het aantal dagelijkse te verwerken bezoekers voor dergelijke applicaties of websites is beperkt. Applicaties voor het lokaal-hosten van een web-server, MySQL, PHP en Peral op Windows. Zie: SQL hosten op een Mac Op lokale systemen kan MySQL gehost worden bij zoals Windows als Linux. Veel webontwikkelaars gebruiken een Mac. Dus, op een Mac is het uiteraard ook mogelijk om SQL-t hosten. Applicaties voor het lokaal-hosten van een web-server, MySQL, PHP en Peral op een Mac. Zie: of 41

42 Bijlage: SQL Operators en functies (engels) Zie ook: Naam ABS() ACOS() ADDDATE()(v4.1.1) ADDTIME()(v4.1.1) AES_DECRYPT() AES_ENCRYPT() AND, && ASCII() ASIN() ATAN2(), ATAN() ATAN() AVG() BENCHMARK() BETWEEN... AND... BIN() BINARY BIT_AND() BIT_COUNT() BIT_LENGTH() BIT_OR() BIT_XOR()(v4.1.1) & Beschrijving: Return the absolute value Return the arc cosine Add dates Add time Decrypt using AES Encrypt using AES Logical AND Return numeric value of left-most character Return the arc sine Return the arc tangent of the two arguments Return the arc tangent Return the average value of the argument Repeatedly execute an expression Check whether a value is within a range of values Return a string representation of the argument Cast a string to a binary string Return bitwise and Return the number of bits that are set Return length of argument in bits Return bitwise or Return bitwise xor Bitwise AND ~ Invert bits Bitwise OR 42

43 ^ CASE CAST() CEIL() Bitwise XOR Case operator Cast a value as a certain type Return the smallest integer value not less than the argument CEILING() Return the smallest integer value not less than the argument CHAR_LENGTH() CHAR() CHARACTER_LENGTH() CHARSET()(v4.1.0) COALESCE() COERCIBILITY()(v4.1.1) Return number of characters in argument Return the character for each integer passed A synonym for CHAR_LENGTH() Return the character set of the argument Return the first non-null argument Return the collation coercibility value of the string argument COLLATION()(v4.1.0) COMPRESS()(v4.1.1) CONCAT_WS() CONCAT() CONNECTION_ID() CONV() CONVERT_TZ()(v4.1.3) Convert() COS() COT() COUNT(DISTINCT) COUNT() CRC32()(v4.1.0) CURDATE() CURRENT_DATE(), Return the collation of the string argument Return result as a binary string Return concatenate with separator Return concatenated string Return the connection ID (thread ID) for the connection Convert numbers between different number bases Convert from one timezone to another Cast a value as a certain type Return the cosine Return the cotangent Return the count of a number of different values Return a count of the number of rows returned Compute a cyclic redundancy check value Return the current date Synonyms for CURDATE() 43

44 CURRENT_DATE CURRENT_TIME(), Synonyms for CURTIME() CURRENT_TIME CURRENT_TIMESTAMP(), Synonyms for NOW() CURRENT_TIMESTAMP CURRENT_USER(), Return the username and hostname combination CURRENT_USER CURTIME() DATABASE() DATE_ADD() DATE_FORMAT() DATE_SUB() DATE()(v4.1.1) DATEDIFF()(v4.1.1) DAY()(v4.1.1) DAYNAME()(v4.1.21) Return the current time Return the default (current) database name Add two dates Format date as specified Subtract two dates Extract the date part of a date or datetime expression Subtract two dates Synonym for DAYOFMONTH() Return the name of the weekday DAYOFMONTH() Return the day of the month (0-31) DAYOFWEEK() Return the weekday index of the argument DAYOFYEAR() Return the day of the year (1-366) DECODE() DEFAULT() DEGREES() DES_DECRYPT() DES_ENCRYPT() DIV(v4.1.0) Decodes a string encrypted using ENCODE() Return the default value for a table column Convert radians to degrees Decrypt a string Encrypt a string Integer division / Division operator ELT() ENCODE() ENCRYPT() Return string at index number Encode a string Encrypt a string 44

45 <=> NULL-safe equal to operator = Equal operator EXP() EXPORT_SET() Raise to the power of Return a string such that for every bit set in the value bits, you get an on string and for every unset bit, you get an off string EXTRACT FIELD() Extract part of a date Return the index (position) of the first argument in the subsequent arguments FIND_IN_SET() Return the index position of the first argument within the second argument FLOOR() Return the largest integer value not greater than the argument FORMAT() Return a number formatted to specified number of decimal places FOUND_ROWS() For a SELECT with a LIMIT clause, the number of rows that would be returned were there no LIMIT clause FROM_DAYS() FROM_UNIXTIME() GET_FORMAT()(v4.1.1) GET_LOCK() Convert a day number to a date Format UNIX timestamp as a date Return a date format string Get a named lock >= Greater than or equal operator > Greater than operator GREATEST() GROUP_CONCAT()(v4.1) HEX() Return the largest argument Return a concatenated string Return a hexadecimal representation of a decimal or string value HOUR() IF() Extract the hour If/else construct 45

46 IFNULL() IN() INET_ATON() INET_NTOA() INSERT() Null if/else construct Check whether a value is within a set of values Return the numeric value of an IP address Return the IP address from a numeric value Insert a substring at the specified position up to the specified number of characters INSTR() INTERVAL() Return the index of the first occurrence of substring Return the index of the argument that is less than the first argument IS_FREE_LOCK() IS NOT NULL IS NOT IS NULL IS_USED_LOCK()(v4.1.0) Checks whether the named lock is free NOT NULL value test Test a value against a boolean NULL value test Checks whether the named lock is in use. Return connection identifier if true. IS ISNULL() LAST_DAY(v4.1.1) LAST_INSERT_ID() Test a value against a boolean Test whether the argument is NULL Return the last day of the month for the argument Value of the AUTOINCREMENT column for the last INSERT LCASE() LEAST() Synonym for LOWER() Return the smallest argument << Left shift LEFT() LENGTH() Return the leftmost number of characters as specified Return the length of a string in bytes <= Less than or equal operator < Less than operator LIKE LN() Simple pattern matching Return the natural logarithm of the argument 46

47 LOAD_FILE() LOCALTIME(), LOCALTIME LOCALTIMESTAMP, Load the named file Synonym for NOW() Synonym for NOW() LOCALTIMESTAMP()(v4.0.6) LOCATE() LOG10() LOG2() LOG() LOWER() LPAD() Return the position of the first occurrence of substring Return the base-10 logarithm of the argument Return the base-2 logarithm of the argument Return the natural logarithm of the first argument Return the argument in lowercase Return the string argument, left-padded with the specified string LTRIM() MAKE_SET() Remove leading spaces Return a set of comma-separated strings that have the corresponding bit in bits set MAKEDATE()(v4.1.1) MAKETIME(v4.1.1) MASTER_POS_WAIT() Create a date from the year and day of year MAKETIME() Block until the slave has read and applied all updates up to the specified position MATCH MAX() MD5() MICROSECOND()(v4.1.1) MID() MIN() Perform full-text search Return the maximum value Calculate MD5 checksum Return the microseconds from argument Return a substring starting from the specified position Return the minimum value - Minus operator MINUTE() MOD() Return the minute from the argument Return the remainder % Modulo operator MONTH() Return the month from the date passed 47

48 MONTHNAME()(v4.1.21) NAME_CONST()(v5.0.12) NOT BETWEEN... AND... Return the name of the month Causes the column to have the given name Check whether a value is not within a range of values!=, <> Not equal operator NOT IN() NOT LIKE NOT REGEXP NOT,! NOW() NULLIF() OCT() OCTET_LENGTH() OLD_PASSWORD()(v4.1) Check whether a value is not within a set of values Negation of simple pattern matching Negation of REGEXP Negates value Return the current date and time Return NULL if expr1 = expr2 Return an octal representation of a decimal number A synonym for LENGTH() Return the value of the old (pre-4.1) implementation of PASSWORD, OR Logical OR ORD() Return character code for leftmost character of the argument PASSWORD() PERIOD_ADD() PERIOD_DIFF() PI() Calculate and return a password string Add a period to a year-month Return the number of months between periods Return the value of pi + Addition operator POSITION() POW() POWER() PROCEDURE ANALYSE() QUARTER() QUOTE() RADIANS() A synonym for LOCATE() Return the argument raised to the specified power Return the argument raised to the specified power Analyze the results of a query Return the quarter from a date argument Escape the argument for use in an SQL statement Return argument converted to radians 48

49 RAND() REGEXP RELEASE_LOCK() REPEAT() REPLACE() REVERSE() Return a random floating-point value Pattern matching using regular expressions Releases the named lock Repeat a string the specified number of times Replace occurrences of a specified string Reverse the characters in a string >> Right shift RIGHT() RLIKE ROUND() ROW_COUNT()(v5.0.1) RPAD() RTRIM() SCHEMA()(v5.0.2) SEC_TO_TIME() Return the specified rightmost number of characters Synonym for REGEXP Round the argument The number of rows updated Append string the specified number of times Remove trailing spaces A synonym for DATABASE() Converts seconds to 'HH:MM:SS' format SECOND() Return the second (0-59) SESSION_USER() SHA1(), SHA() SIGN() SIN() SLEEP()(v5.0.12) SOUNDEX() SOUNDS LIKE(v4.1.0) SPACE() SQRT() STD() STDDEV_POP()(v5.0.3) STDDEV_SAMP()(v5.0.3) STDDEV() Synonym for USER() Calculate an SHA bit checksum Return the sign of the argument Return the sine of the argument Sleep for a number of seconds Return a soundex string Compare sounds Return a string of the specified number of spaces Return the square root of the argument Return the population standard deviation Return the population standard deviation Return the sample standard deviation Return the population standard deviation 49

50 STR_TO_DATE()(v4.1.1) STRCMP() SUBDATE() Convert a string to a date Compare two strings A synonym for DATE_SUB() when invoked with three arguments SUBSTR() SUBSTRING_INDEX() Return the substring as specified Return a substring from a string before the specified number of occurrences of the delimiter SUBSTRING() SUBTIME()(v4.1.1) SUM() SYSDATE() SYSTEM_USER() TAN() TIME_FORMAT() TIME_TO_SEC() TIME()(v4.1.1) TIMEDIFF()(v4.1.1) Return the substring as specified Subtract times Return the sum Return the time at which the function executes Synonym for USER() Return the tangent of the argument Format as time Return the argument converted to seconds Extract the time portion of the expression passed Subtract time * Times operator TIMESTAMP()(v4.1.1) With a single argument, this function returns the date or datetime expression; with two arguments, the sum of the arguments TIMESTAMPADD()(v5.0.0) TIMESTAMPDIFF()(v5.0.0) TO_DAYS() TRIM() TRUNCATE() UCASE() Add an interval to a datetime expression Subtract an interval from a datetime expression Return the date argument converted to days Remove leading and trailing spaces Truncate to specified number of decimal places Synonym for UPPER() - Change the sign of the argument UNCOMPRESS()(v4.1.1) Uncompress a string compressed 50

51 UNCOMPRESSED_LENGTH()( Return the length of a string before compression v4.1.1) UNHEX()(v4.1.2) UNIX_TIMESTAMP() UPPER() USER() UTC_DATE()(v4.1.1) UTC_TIME()(v4.1.1) UTC_TIMESTAMP()(v4.1.1) UUID()(v4.1.2) VALUES()(v4.1.1) VAR_POP()(v5.0.3) VAR_SAMP()(v5.0.3) VARIANCE()(v4.1) VERSION() WEEK() WEEKDAY() Convert each pair of hexadecimal digits to a character Return a UNIX timestamp Convert to uppercase Return the current username and hostname Return the current UTC date Return the current UTC time Return the current UTC date and time Return a Universal Unique Identifier (UUID) Defines the values to be used during an INSERT Return the population standard variance Return the sample variance Return the population standard variance Returns a string that indicates the MySQL server version Return the week number Return the weekday index WEEKOFYEAR()(v4.1.1) Return the calendar week of the date (0-53) XOR YEAR() YEARWEEK() Logical XOR Return the year Return the year and week 51

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

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

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

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

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

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

SQL Aantekeningen 3. Maarten de Rijke [email protected]. 22 mei 2003

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

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

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

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

2.2 Een tabel ontwerpen

2.2 Een tabel ontwerpen 2.2 Een tabel ontwerpen 2.2.1 Gegevens analyse Alvorens de tabellen van een database te kunnen gaan opzetten, dient u eerst te bepalen, welke gegevens daarin moeten worden opgenomen. Bepaal eerst het doel

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

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

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

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

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

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

Data Manipulation Language

Data Manipulation Language Data Manipulation Language (DML) In de vorige les hebben we een database structuur gemaakt van 4 tabellen. Hiervoor worden de volgende scripts gebruikt voor de verschillende tabellen: Tabel A ROBERT ELLIS

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

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

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 : [email protected] www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG

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

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

Les S-01: De basisbeginselen van SQL

Les S-01: De basisbeginselen van SQL Les S-01: De basisbeginselen van SQL 1.0 Relationele databases en SQL Een database is een bestand waarin gegevens worden opgeslagen in de vorm van tabellen. Zo kan een huisarts met behulp van een database

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

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

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

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

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

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

Workshop 3x. Normaliseren. Normaliseren. Hiëarchische database ODBMS. Relationele database. Workshop 14 oktober 2010. A. Snippe ICT Lyceum 1

Workshop 3x. Normaliseren. Normaliseren. Hiëarchische database ODBMS. Relationele database. Workshop 14 oktober 2010. A. Snippe ICT Lyceum 1 Workshop 3x Analytisch vermogen Huiswerk Lestijden 10:00 12:30 Pauze 10:15 10:30 Deze les: Hiëarchische database Relationele database ODBMS Normaliseer stappen Hiëarchische database Elk record in een database

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

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

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

In deze appendix wordt bekeken wat er moet gebeuren voordat

In deze appendix wordt bekeken wat er moet gebeuren voordat Normaliseren A In deze appendix wordt bekeken wat er moet gebeuren voordat een systeem kan worden gedefinieerd. Dit begint met een analyse van de gegevens die de basis vormen. Daarbij wordt gekeken naar

Nadere informatie

Relationele databases

Relationele databases Systematisch bouwen van informatiesystemen t.b.v. practicumopdracht : Relationele databases Structured Query Language SQL Relationele databases Geautomatiseerde informatiesystemen gebruiken bijna altijd

Nadere informatie

Datamodelleren en databases 2011

Datamodelleren en databases 2011 Datamodelleren en databases 21 Capita selecta 1 In dit college Modelleren Normaliseren Functionele afhankelijkheid 1-3N M:N-relaties, associatieve entiteittypes, ternaire relaties Weak entiteittypes Multivalued

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

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

Systeemontwikkeling, Hoofdstuk 4, Tabellen maken in MS Access 2010

Systeemontwikkeling, Hoofdstuk 4, Tabellen maken in MS Access 2010 4 Tabellen maken in MS Access In dit hoofdstuk starten we met de bouw van ons informatiesysteem met de belangrijkste bouwstenen: de tabellen. 4.1 Starten met MS Access Als je het programma Microsoft Access

Nadere informatie

9. Het wijzigen van gegevens

9. Het wijzigen van gegevens 9. Het wijzigen van gegevens Voor het wijzigen van gegevens wordt het DML-statement UPDATE gebruikt. Om dit statement correct te kunnen gebruiken moeten enkele zaken bekend zijn: In welke tabel moeten

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

voorbeeldexamen I-Tracks Databases and SQL Foundation Voorbeeldexamen DBSQLF Uitgave juni 2006

voorbeeldexamen I-Tracks Databases and SQL Foundation Voorbeeldexamen DBSQLF Uitgave juni 2006 voorbeeldexamen Databases and SQL Foundation (DBSQLF) I-Tracks Databases and SQL Foundation Voorbeeldexamen DBSQLF Uitgave juni 2006 inhoud 3 inleiding 4 voorbeeldexamen 21 antwoordindicatie 44 beoordeling

Nadere informatie

Les S-01: De basisbeginselen van SQL

Les S-01: De basisbeginselen van SQL Les S-01: De basisbeginselen van SQL 1.0 Relationele databases en SQL Een database is een bestand waarin gegevens worden opgeslagen in de vorm van tabellen. Zo kan een huisarts met behulp van een database

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

Database Structuur via menus

Database Structuur via menus Data Dictionary Database Structuur via menus Na het normaliseren en maken van een data dictionary kunnen de tabellen worden ingevoerd in de database. In deze les wordt getoond hoe dit in Access gebeurt.

Nadere informatie

Miniles gegevensbanken bevragen met SQL

Miniles gegevensbanken bevragen met SQL Miniles gegevensbanken bevragen met SQL In deze miniles gaat het over gegevensbanken of databases. Dit zijn bestanden waarin gegevens kunnen worden opgeslagen. Het is dan van belang dat je op een eenvoudige

Nadere informatie

databases & SQL - antwoorden

databases & SQL - antwoorden informatica databases & SQL - antwoorden Op dit lesmateriaal is een Creative Commons licentie van toepassing. 2010 Remie Woudt [email protected] 2013 François Vonk (XAMP vervangen door USBWebserver

Nadere informatie

ISO Query By Example

ISO Query By Example ISO Query By Example Prof. dr. Paul De Bra Gebaseerd op: Database System Concepts, 5th Ed. QBE waarom nog een query taal? de relationele algebra en SQL geven niet alleen een specificatie van een query-resultaat,

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

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

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

Sorteren, groeperen en totaliseren

Sorteren, groeperen en totaliseren 6 Sorteren, groeperen en totaliseren 6.1 Inleiding Een rapport maken begint met het selecteren van de tabellen en het plaatsen van de velden die u in uw rapport wilt afdrukken. Vervolgens sorteert, groepeert

Nadere informatie

Entiteit Zaken en gebeurtenissen waarvan gegevens moeten worden vastgelegd worden een entiteit genoemd: b.v. mens, voorstelling, auto.

Entiteit Zaken en gebeurtenissen waarvan gegevens moeten worden vastgelegd worden een entiteit genoemd: b.v. mens, voorstelling, auto. Relationele databases SqlServer en Oracle zijn relationele client server databases. De verwerking van de opdrachten vindt plaats op de server. Access is een relationele pc database. De verwerking van de

Nadere informatie

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.

SQL. SQL [email protected] Mogelijkheden Tabellen maken: create table Tabellen verwijderen: drop table Tabellen vullen: insert into Tabellen wijzigen: update, delete from Gegevens opvragen: select

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

Inhoud. Voorwoord 1 Belangrijkste kenmerken van dit boek 1 De opzet van dit boek 1 Over de auteurs 2 Woord van dank 2

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

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

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

Thinking of development

Thinking of development Thinking of development Databases Arjan Scherpenisse HKU / Miraclethings Agenda voor vandaag Opdracht tussenstand State diagram / Observer pattern Bret Victor Databases 2/42 Opdracht tussenstand Slides

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

oefeningen TOP2000 antwoorden

oefeningen TOP2000 antwoorden oefeningen TOP2000 antwoorden vragen niveau 1 Niveau 1 beslaat de volgende onderwerpen: SELECT, FROM, WHERE, DISTINCT, ORDER BY, LIKE, BETWEEN, IN, wildcards, eenvoudige vergelijkingen, eenvoudige logische

Nadere informatie

DATABASEBEHEER IN EXCEL

DATABASEBEHEER IN EXCEL DATABASEBEHEER IN EXCEL 1. LIJSTEN Een lijst is een reeks van rijen met gelijksoortige gegevens waarvan de eerste rij de labels (veldnamen) bevat. Een voorbeeld: Je kunt een lijst beschouwen als een eenvoudige

Nadere informatie

Systeemontwikkeling, Hoofdstuk 6, Query s, macro s en rapporten in MS Access 2010

Systeemontwikkeling, Hoofdstuk 6, Query s, macro s en rapporten in MS Access 2010 6. Query s, macro s en rapporten In dit hoofdstuk zetten we de puntjes op de i. Alle processen zullen in de aangemaakte formulieren met de gebruikersmenu s van de secretaris, penningmeester en wedstrijdsecretaris,

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

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

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

Zelftest SQL. Document: n0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

Zelftest SQL. Document: n0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium Zelftest SQL Document: n0453test.fm 19/04/2012 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST SQL Korte handleiding Deze test heeft als bedoeling

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

Ontwerp een datamodel

Ontwerp een datamodel SQL IAM-TDI-V2-SQL, handleiding datamodel Ontwerp een datamodel Fons van Kesteren, okt 2008, HvA IAM IAM-V2-TDI-SQL 1 Doelstelling... 3 Het ontwerpproces... 4 Afbakening van het informatiedomein... 5 Entiteiten,

Nadere informatie

OFFICE A LA CARTE - ACCESS 2013

OFFICE A LA CARTE - ACCESS 2013 OFFICE A LA CARTE - ACCESS 2013 Inhoud HOOFDSTUK ACC-1.1: TERMINOLOGIE - (0:20) Wat is een database? Onderdelen van een database Tabellen en relaties Schematisch overzicht van de structuur van een database

Nadere informatie

Als er besloten is een database op te stellen dient men een analyse van de informatiegegevens te volbrengen.

Als er besloten is een database op te stellen dient men een analyse van de informatiegegevens te volbrengen. Normaliseren Een van de voornaamste rollen in een informatie systeem is het bewaren van gegevens en liefst over een lange tijd. Meestal doen we dat door middel van een gegevensbank of databank. Deze gestructureerde,

Nadere informatie

SQL: query taal met. woorden. ISO SQL: Structured Query Language. de SQL basis query structuur. voorbeeld: doel: intuitieve query taal

SQL: query taal met. woorden. ISO SQL: Structured Query Language. de SQL basis query structuur. voorbeeld: doel: intuitieve query taal SQL: query taal met woorden ISO SQL: Structured Query Language Prof. dr. Paul De Bra Gebaseerd op: Database System Concepts, 5th Ed. doel: intuitieve query taal gebruikt Engelse woorden: select, from,

Nadere informatie

Relationele database. Het relationele model

Relationele database. Het relationele model Module SQL Relationele database. Een database, gegevensbank of databank is een verzameling van gegevens, ingericht met oog op makkelijke raadpleging en gebruik. Databases spelen een belangrijke rol in

Nadere informatie

1. * Database worden vaak gebruikt in Client-Server architectuur.

1. * Database worden vaak gebruikt in Client-Server architectuur. Naam Studentnummer Klas Herkansing [ ] ja, nee [ ], zoja uit welk jaar? kernbegrippen relationele database Minimaal drie van de vijf vragen goed beantwoorden. 1. * Database worden vaak gebruikt in Client-Server

Nadere informatie

Les 15 : updaten van gegevens in de database (deel2).

Les 15 : updaten van gegevens in de database (deel2). Les 15 : updaten van gegevens in de database (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige lessen en documenten om informatie op te zoeken

Nadere informatie

4 Tabellen maken in MS Access In dit hoofdstuk starten we met de bouw van ons informatiesysteem met de belangrijkste bouwstenen: de tabellen.

4 Tabellen maken in MS Access In dit hoofdstuk starten we met de bouw van ons informatiesysteem met de belangrijkste bouwstenen: de tabellen. 4 Tabellen maken in MS Access In dit hoofdstuk starten we met de bouw van ons informatiesysteem met de belangrijkste bouwstenen: de tabellen. 4.1 Starten met MS Access Als je het programma Microsoft Access

Nadere informatie

ADVANCED DATABASES Syllabus versie 2.0

ADVANCED DATABASES Syllabus versie 2.0 ECDL-MODULE ADVANCED DATABASES Syllabus versie 2.0 Doel Dit document bevat de syllabus van de module Advanced Databases. In de syllabus worden aan de hand van leeruitkomsten de kennis en vaardigheden uiteengezet

Nadere informatie

COMPUTERWOORDEN.NL SQL - basis

COMPUTERWOORDEN.NL SQL - basis Inhoudsopgave... 1 Introductie: SQL... 7 SQL... 7 SQL geschiedenis...7 SQL dialecten...7 Basis SQL-commando's...8 CREATE TABLE... 8... 8... 8 Datatype...8 Grootte...10 Veldtype... 10 DELETE FROM... 10...

Nadere informatie

Leerjaar 1/2 ICT-Academie. Niveau 4. Applicatie ontwikkeling

Leerjaar 1/2 ICT-Academie. Niveau 4. Applicatie ontwikkeling Databases SQL Leerjaar 1/2 ICT-Academie Niveau 4 Applicatie ontwikkeling Auteur: R. Meijerink Datum: Januari 2013 0. Inleiding Databases / SQL In deze lessen wordt je geleerd databases te bouwen in SQL-code.

Nadere informatie

INSTRUCT Samenvatting Praktijk Access 2010, H2 SAMENVATTING HOOFDSTUK 2

INSTRUCT Samenvatting Praktijk Access 2010, H2 SAMENVATTING HOOFDSTUK 2 SAMENVATTING HOOFDSTUK 2 Sorteren en filteren in een tabel Sorteren kun je met de knoppen (Oplopend) en (Aflopend). Hiermee zet je records in alfabetische of numerieke volgorde. Er wordt gesorteerd op

Nadere informatie

ISO SQL: Structured Query Language

ISO SQL: Structured Query Language ISO SQL: Structured Query Language Prof. dr. Paul De Bra Gebaseerd op: Database System Concepts, 5th Ed. SQL: query taal met woorden doel: intuitieve query taal gebruikt Engelse woorden: select, from,

Nadere informatie

Les 10 : Aanmaken van een database (deel2).

Les 10 : Aanmaken van een database (deel2). Les 10 : Aanmaken van een database (deel2). Wat is een database? Een centrale opslagruimte voor gegevens. Alle informatie wordt centraal opgeslagen en kan door iedereen geraadpleegd worden. Voordelen van

Nadere informatie

Hoofdstuk 21: Gegevens samenvatten

Hoofdstuk 21: Gegevens samenvatten Hoofdstuk 21: Gegevens samenvatten 21.0 Inleiding In Excel kunnen grote (en zelfs ook niet zo grote) tabellen met getallen en tekst er nogal intimiderend uitzien. Echter, Excel komt helemaal tot haar recht

Nadere informatie

U kunt een waardebon toepassen op alle klanten, op een klantengroep of op een enkele klant; u kunt de vervaldatum bepalen.

U kunt een waardebon toepassen op alle klanten, op een klantengroep of op een enkele klant; u kunt de vervaldatum bepalen. Winkelwagenregels Winkelwagenregels De pagina "Winkelwagenregels" geeft u toegang tot een geavanceerde tool dat het waardebonnensysteem van PrestaShop 1.4 opvolgt. Doorgewinterde PrestaShop-gebruikers

Nadere informatie

Databases gebruiken. Databases gebruiken

Databases gebruiken. Databases gebruiken Databases gebruiken In deze module wordt van de kandidaat verwacht dat hij een goed begrip heeft van databases en aantoont competent te zijn in het gebruik van een database. Doel van de module De kandidaat:

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

9 Werken met meer tabellen (zie ook query s)

9 Werken met meer tabellen (zie ook query s) 9 Werken met meer tabellen (zie ook query s) 9.1 Inleiding werkwijze je moet begrijpen waarom in de praktijk een databank meestal opgebouwd wordt met verschillende tabellen die aan elkaar gekoppeld worden.

Nadere informatie

Toelichting Validatieregels DBC GGZ RG12

Toelichting Validatieregels DBC GGZ RG12 Toelichting Validatieregels DBC GGZ RG12 Versie 20111201 Ingangsdatum: 1 januari 2012 Inhoudsopgave 1 Inleiding...3 2 Algemene gegevens van de tabel...4 3 Specificatie van de validatieregels...6 4 De validatieregels...8

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

EUROPEES COMPUTER RIJBEWIJS / INTERNATIONAAL COMPUTER RIJBEWIJS ADVANCED DATABASE

EUROPEES COMPUTER RIJBEWIJS / INTERNATIONAAL COMPUTER RIJBEWIJS ADVANCED DATABASE EUROPEES COMPUTER RIJBEWIJS / INTERNATIONAAL COMPUTER RIJBEWIJS ADVANCED DATABASE The European Computer Driving Licence Foundation Ltd. Portview House Thorncastle Street Dublin 4 Ierland Tel: + 353 1 630

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

Inhoud Basiscursus. Access 2010 NL-NL

Inhoud Basiscursus. Access 2010 NL-NL Inhoud Basiscursus Access 2010 NL-NL 1 - Access starten... 6 Een bestaande database openen... 8 Menu-opdrachten gebruiken... 9 Werkbalken tonen en verbergen... 11 Menu- en werkbalkopties aanpassen... 12

Nadere informatie

Technische nota AbiFire Rapporten maken via ODBC

Technische nota AbiFire Rapporten maken via ODBC Technische nota AbiFire Rapporten maken via ODBC Laatste revisie: 23 januari 2018 Inhoudsopgave 1 Inleiding... 2 2 Systeeminstellingen in AbiFire... 3 2.1 Aanmaken extern profiel... 3 2.2 Toewijzing extern

Nadere informatie

1 Download de database 'bieren.mdb' en bewaar het bestand in c:\werkmap van je computer.

1 Download de database 'bieren.mdb' en bewaar het bestand in c:\werkmap van je computer. DataBase Management & Databasetechnologie We gaan nu aan de slag met het databasemanagementprogramma Access. Zo'n set programma's waarmee je databases kunt maken, beheren en bevragen noemt men ook wel

Nadere informatie

Aan de slag met AdminView

Aan de slag met AdminView Aan de slag met AdminView uitgebreide handleiding S for Software B.V. Gildeweg 6 3771 NB Barneveld tel 0342 820 996 fax 0342 820 997 e-mail [email protected] web www.sforsoftware.nl Inhoudsopgave 1.

Nadere informatie