Module: Enigma - Databases

Module: Enigma - Databases

A Inleiding

Vooraf

In de module Informatieverwerkende systemen hebben we uitgelegd wat we verstaan onder gegevens. Gegevens zijn (combinaties van) tekens of symbolen die niet voor iedereen betekenis hebben. Gegevens worden ook wel data genoemd.

Voor informatica zijn data en de opslag van data belangrijke onderwerpen. Data kunnen gestructureerd of ongestructureerd zijn.

Leerdoelen

Na verwerking van deze module:

  • kun je aangeven wat het verschil is tussen gestructureerde en ongestructureerde data;
  • kun je uitleggen wat een databasemanagement system en een database system is;
  • kun je aangeven wat het verschil is tussen een relationele database en een NoSQL database;
  • weet je wat een relationele database is;
  • ken je de begrippen redundantie en inconsistentie;
  • weet je wat een NoSQL database is;
  • ken je de begrippen sharding en replication;
  • weet je waarvoor een strokendiagram gebruikt wordt;
  • kun je eenvoudige selecties uit enkele tabellen in een database maken met SQL;
  • kun je eenvoudige selecties maken uit een database door tabellen te combineren;
  • kun je functies gebruiken in SQL;
  • kun je rijen op basis van overeenkomsten groeperen in SQL;
  • kun je omgaan met subqueries;
  • kun je in een bestaande database gegevens toevoegen en / of verwijderen.

Bijlagen

Bij deze module horen de volgende bijlagen:


Voor het uitvoeren van queries met Microsoft Access:


SQL-tool databases:

CD-DVD database
Transacties

Zo werkt het

Je bent begonnen in de module Databases.
Deze module bestaat uit meerdere onderdelen. In ieder onderdeel vind je, verdeeld over verschillende pagina's, informatie in de vorm van teksten, afbeeldingen en video's. Daarnaast ga je zelf aan de slag. Onder het kopje "Aan de slag" vind je steeds toepassingsopdrachten. Deze opdrachten maak je alleen of met een klasgenoot.

Er zijn ook toetsen. Deze herken je aan de blauwe knop met daarop "Adaptieve Toets".
Een toets bestaat uit meerdere vragen. Dat kunnen gesloten vragen zijn, die door de computer worden nagekeken, of open vragen, die moet je zelf nakijken.
Bij een enkele vraag moet je een bestand uploaden.

Van de toetsen wordt, als je ingelogd bent, de voortgang bijgehouden.
Het resultaat vind je onder de knop "Voortgang". Deze voortgang is ook door je docent te bekijken.


Succes met de module Databases.

B Data

Gestructureerde data

Van gestructureerde data is sprake als data op een standaard manier worden beschreven en de relaties die er bestaan tussen de data helder zijn. Hoe doen we dat? Lees daarvoor de volgende teksten.

Rijen en kolommen
Door in documenten of bestanden gebruik te maken van rijen en kolommen waarin telkens dezelfde typen gegevens worden ondergebracht. Dat kan een tabel zijn met de NAW-gegevens van werknemers van een bedrijf of een spreadsheet waarin per maand een gemiddelde temperatuur wordt vermeld. NAW staat voor Naam, Adres en Woonplaats.




Metadata
Structuur kan ook worden aangebracht door gebruik te maken van metadata. Metadata zijn gegevens die eigenschappen van bepaalde andere gegevens beschrijven. Het zijn dus eigenlijk 'data over data'. Het aanbrengen van structuur in data door data te voorzien van metadata noemen we ook wel het verrijken van data.

Een document kan metadata bevatten zoals de naam van de auteur, de uitgever, het aantal pagina's en de taal waarin het document is geschreven. Een zoekmachine die gebruik maakt van metadata kan dan direct zoeken naar documenten van de hand van een specifieke auteur. Zou de zoekmachine geen gebruik maken van metadata dan zou het resultaat ook documenten bevatten waarin de naam van de auteur voorkomt, maar die niet van de hand zijn van de gezochte auteur. De zoekmachine snapt door het gebruik van de metadata dus de inhoud van de doorzochte documenten.


Computers kunnen niet zelf denken. Dus ook niet zelfstandig beslissen welke data wel of niet belangrijk zijn. Of bepalen hoe data gebruikt moeten worden. Door structuur aan te brengen in data zorgen mensen ervoor dat computers data zelfstandig kunnen analyseren en doorzoeken.

Ongestructureerde data

Data kunnen ook ongestructureerd zijn. Een twitterbericht of een foto waar verder geen informatie over wordt gegeven, zijn voorbeelden van ongestructureerde data.

Tegenwoordig bestaat het grootste deel van alle gegevens uit ongestructureerde data. Zelfs meer dan 90%. Ga maar eens na wat je zelf opslaat aan bestanden, foto’s en films. Alleen al de opslag van deze grote hoeveelheden ongestructureerde data is een grote uitdaging voor de toekomst. En dan hebben we het nog niet gehad over het analyseren van dit soort gegevens.

Vaak willen we ook met ongestructureerde data meer doen dan alleen maar lezen of bekijken. Zijn er patronen of trends te herkennen in deze data? Of zijn we in staat regelmatigheden in deze grote hoeveelheden ongestructureerde data, daarvoor wordt vaak de term big data gebruikt, te ontdekken? Het analyseren daarvan biedt mogelijkheden. Alleen al voor commerciële doeleinden zou dat vaak erg interessant kunnen zijn.

C Dataplatformen

RDBMS

Voor het beheer van grote verzamelingen gestructureerde gegevens worden aparte systemen gebruikt. Denk bijvoorbeeld aan de gegevens van financiële instellingen, van scholen, van de NS of van bibliotheken. Zo'n verzameling gestructureerde gegevens noemen we een database. Op een database kunnen bewerkingen worden uitgevoerd zoals het toevoegen, veranderen of verwijderen van gegevens, maar vooral het raadplegen van gegevens. Het programma dat deze bewerkingen uitvoert, wordt een database management system (DBMS) genoemd. Als we spreken over een database system dan bedoelen we het programma (een database management system) en de gegevens (een database).

In 1970 kwam de wiskundige E.F.Codd met een destijds radicaal nieuw idee voor de opslag van data: het relationele model. In dit model bestaat een database uit één of meerdere tabellen, die vervolgens weer opgebouwd zijn uit rijen en kolommen. De term relationeel komt voort uit het feit dat er een relatie kan worden gelegd tussen de gegevens in de verschillende kolommen in de gebruikte tabellen.Een database management system (DBMS) dat is gebaseerd op het model van E.F.Codd noemen we een relationeel database management system (RDBMS). We lichten het relationele model toe aan de hand van een concreet voorbeeld.

★ Aan de slag 1

Als je de onderstaande afbeelding bekijkt zie je een tabel waarin de gegevens van leerlingen worden bijgehouden. In de eerste rij van de tabel, de 'heading', staan de namen van de kolommen: de veldnamen. Alle velden van één kolom behoren tot hetzelfde type. Uitgezonderd de eerste bevat elke tabelrij een bij elkaar horende groep gegevens, die verdeeld zijn over de kolommen van een tabel. In dit voorbeeld de gegevens van één leerling. Een rij uit de tabel wordt een record genoemd.

Bekijk deze tabel en lees de toelichting bij de verschillende onderdelen.



★ Aan de slag 2

Bekijk de tabel en beantwoord de volgende vragen:

 

  1. Hoeveel veldnamen kom je tegen in deze tabel?
  2. "Vertaal" de derde rij in de tabel naar een gewone Nederlandse zin.
  3. Op welke veldnaam is de tabel gesorteerd?
  4. Uit hoeveel records bestaat de tabel?
    Hoeveel velden heeft ieder record?
  5. Er is één kolom waar ieder gegeven maximaal één keer kan voorkomen.
    Welke kolom is dat?
  6. Waarom krijgt iedere leerling een administratienummer?

 

★ Aan de slag 3

Beantwoord de volgende vragen:

  1. Van welk type zijn de gegevens in de eerste kolom?
  2. En in de kolom adres?
  3. Deze tabel is nog niet compleet.
    Welke kolommen zouden er volgens jou nog moeten worden toegevoegd?

Administratiesysteem

In de schooladministratie wordt gebruik gemaakt van een administratienummer om een leerling uniek te kunnen identificeren. Een kolom of een combinatie van kolommen op basis waarvan een rij uit een tabel uniek te identificeren is, noemen we een sleutel. In een schooladministratiesysteem kunnen veel gegevens bijgehouden worden. Stel dat de schoolleiding wil bijhouden wanneer een leerling absent is. Hiervoor zou de tabel uitgebreid kunnen worden met een extra kolom 'absentie'.

Als je de tabel bekijkt, dan zie je al dat dit niet de ideale oplossing is. Om alle absenties te kunnen vastleggen zijn in deze tabel dezelfde gegevens meerdere keren opgenomen. Wanneer dezelfde informatie vaker in een tabel is opgenomen dan is er sprake van redundantie. In sommige gevallen kan redundantie nuttig of noodzakelijk zijn, maar over het algemeen kleven er een aantal nadelen en gevaren aan.

Stel dat Robert-Jan Velthausz verhuist naar de Kennedylaan 245. Op de administratie moet het adres aangepast worden. In de tabel komt het adres van Robert-Jan meerdere malen voor. Het adres moet in zijn geval op drie plaatsen gewijzigd worden. Dat is niet alleen onhandig, maar er schuilt ook het gevaar in dat het op één plaats vergeten wordt.

Wanneer dat gebeurt, staat er tegenstrijdige informatie in de database. We spreken in dat geval van inconsistentie. Een gevaar van redundantie is dat deze kan leiden tot inconsistentie

Een ander probleem is dat er een nieuwe sleutel gezocht moet worden. Het 'admnr' kan geen sleutel meer zijn, omdat er meerdere rijen in de tabel met hetzelfde administratienummer voorkomen. Een goede sleutel is in dit geval de combinatie 'admnr' en 'absentie'.

Het is mogelijk het ontwerp aan te passen zodat redundantie verdwijnt en deze vorm van inconsistentie onmogelijk wordt. De oplossing ligt in het maken van twee tabellen.

Bij het ontwerpen van een relationele database is het belangrijk om goed na te denken over de samenstelling van de tabellen. Wanneer dit eenmaal goed gebeurd is, kun je met een paar handelingen de informatie die erin zit tevoorschijn halen.

Niet alleen kun je met behulp van deze twee tabellen een lijst samenstellen met de namen van de leerlingen die absent zijn geweest, maar je kunt ook vragen beantwoorden als: In welke klas is nog nooit iemand absent geweest? of Uit welke plaatsen komen de absenten?

Om met een relationele database te kunnen werken, heb je een database management system nodig. De populaire DBMS-programma's bevatten als kern allemaal dezelfde vraagtaal: SQL. In deze module maken we kennis met deze taal.

★ Aan de slag 4

  1. In de tabel leerlingen is admnr de sleutel waarmee iedere leerling uniek geïdentificeerd wordt.
    1. Waar dient een sleutel voor?
    2. Men had er ook voor kunnen kiezen om de combinatie voornaam - achternaam - adres - woonplaats als sleutel te gebruiken.
      Waarom wordt dat niet gedaan?
       
  2. In het dagelijks leven is er vaak sprake van een unieke identificatie door middel van een sleutel. Denk daarbij bijvoorbeeld aan overheidsdiensten.
    1. Noem drie voorbeelden.
    2. Auto's kunnen op twee manieren uniek geïdentificeerd worden, dus met twee verschillende sleutels. Welke sleutels zijn dat en door wie of welke instantie worden ze gebruikt?
    3. Met welke sleutel worden bromfietsen uniek geïdentificeerd?
       
  3. Om alle absenties te kunnen vastleggen, zijn in deze tabel dezelfde gegevens meerdere keren opgenomen.
    1. Leg uit wat hier wordt bedoeld.
    2. Waar is sprake van wanneer dezelfde informatie meer dan één keer in de tabel staat?
    3. Wat is daarvan een gevaar?
    4. Noem een mogelijke oplossing.

 

★ Aan de slag 5

Bekijk de tabellen leerlingen en absenties.

Tabel 1

 

Tabel 2

 

  1. Wat zijn de voor-en achternaam van de leerling die op 13 november 2016 afwezig was?
  2. Welke leerling was drie dagen afwezig?
  3. Wat is de sleutel van de tabel absentie?

 

★ Aan de slag 6

Wanneer dezelfde informatie meer dan één keer in een tabel staat, is er sprake van redundantie.


 
  1. Zoek op internet de betekenis van het begrip redundantie op.
  2. In de tabel absenties kun je niet zien wie op een bepaalde dag afwezig was.
    Beschrijf wat je hebt gedaan om hierachter te komen.
  3. In welke klas zijn geen absenten geweest?

 

★ Aan de slag 7

Een sleutel moet uniek identificeren.

  1. Is de pincode van jouw bank- of giropas een sleutel?
  2. Waarom wel of waarom niet?
  3. Verklaar de term sleutel aan de hand van de behandelde tabellen.

NoSQL

In een relationele database ligt de structuur van de data vast. Er wordt een schema gebruikt voor het beschrijven van die structuur. Tabellen en kolommen hebben vaste namen en in eenzelfde kolom mogen geen verschillende soorten data voorkomen. Bij het ontwerpen van een database wordt voor de kolommen in de tabellen aangegeven wat voor soort data daarin opgeslagen gaan worden. Dat kan de ene keer om numerieke en een andere keer om bijvoorbeeld alfanumerieke gegevens gaan. In een kolom kunnen echter nooit verschillende typen data door elkaar worden gebruikt.

Voor het identificeren van een rij wordt een sleutel gebruikt. In een relationele database moet redundantie vermeden en consistentie nagestreefd worden.

Kenmerkend voor een relationele database is dat er met harde gestructureerde data wordt gewerkt. De data die zijn opgeslagen in de database kunnen worden bevraagd en worden bewerkt door SQL-opdrachten.

Er kunnen zich echter situaties voordoen waarbij het niet voor de hand ligt data op te slaan in een relationele database maar waarbij de voorkeur uitgaat naar het gebruik van een zogenaamde NoSQL database. Bijvoorbeeld als er met hele grote hoeveelheden gegevens gewerkt wordt. Dan is het niet handig om die gegevens op te slaan in een RDBMS. No in NoSQL staat overigens voor Not only.

Data in een relationele database staan altijd op dezelfde server. In de NoSQL database worden gegevens over meerdere servers verspreid. Het verspreiden van data over meerdere servers noemen we sharding. Een groot voordeel daarvan is dat gebruikers deze data snel kunnen benaderen.

Zo maakt Twitter voor het opslaan van tweets gebruik van een NoSQL oplossing. De tweets verouderen namelijk snel en alle tweets moeten ook nog eens bewaard blijven. Dankzij NoSQL kunnen de data over meerdere servers verspreid worden die dan aan elkaar worden gekoppeld.

Bij een NoSQL database werken niet alle gebruikers met dezelfde database. Dat wordt mogelijk gemaakt door op verschillende servers telkens een kopie van de oorspronkelijke database op te slaan. Dit principe wordt replication genoemd. Een nadeel van deze manier van werken, is dat de gebruikte gegevens niet altijd up to date zijn.

We hebben gezien dat in een relationele database het gebruikelijk is om alle gegevens in tabellen op te slaan. De structuur van een relationele database staat vast. Een NoSQL database hoeft niet altijd dezelfde vorm te hebben:

  • Een NoSQL database kan zo georganiseerd zijn dat er alleen op een sleutel (key-value) gezocht kan worden, maar niet op de inhoud van de gegevens zelf.
  • Een NoSQL database kan een document database zijn. Dit is een database die bestaat uit collections. Onder een collection verstaan we een verzameling van (min of meer) gelijksoortige documenten. In een document georiënteerde database staat, in tegenstelling tot een relationele database, niet alles vast. De database is flexibel. Veldnamen zijn dynamisch en er kunnen verschillende soorten gegevens worden opgeslagen zonder dat de structuur van de tabellen moet worden gewijzigd.

    Een document bestaat uit een verzameling velden (eigenschappen). Een veld heeft een naam en een waarde. In een collection wordt een document geïdentificeerd op basis van een sleutel. Deze sleutel wordt de document-id genoemd en staat altijd in het '_id'-veld.
  • Een kenmerk van een NoSQL database is dat er variatie is in de structuur van de data. Kijk maar eens naar hoe gegevens van sensoren kunnen worden opgeslagen:
    {sensor: "temperature", time: "12:35", value: 12.7, location: "garden",}
    {sensor: "pressure", time: "12:17", value: 1024.3}
    {sensor: "light", time: "12:19", value: [200,150,150,30]}


    De documenten verschillen van elkaar. Niet elk document heeft dezelfde velden. Dat is ook logisch want we hebben te maken met verschillende soorten sensoren die ook weer verschillende soorten waarden opleveren. Een temperatuursensor, een druksensor en een lichtsensor. In een relationele database zou deze manier van gegevens opslaan ondenkbaar zijn.
  • Een NoSQL database kan ook een Graaf database zijn. Dat is een database die gebruik maakt van een graaf om data te tonen en te verwerken. Een graaf bestaat uit een verzameling punten (knopen), waarvan sommigen verbonden zijn door lijnen (zijden).

    Graaf:


In een NoSQL database zijn data minder hard gestructureerd dan in een relationale database. Afhankelijk van het soort gegevens waarmee gewerkt wordt, kan gekozen worden voor opslag in een relationele- of een NoSQL database.

★ Aan de slag 8

Een NoSQL database maakt gebruik van replication.

  1. Wat wordt hiermee bedoeld?
  2. Noem een voor- en een nadeel van replication.

D Database transacties

Inleiding

In de module databases gaat onze aandacht hoofdzakelijk uit naar relationele databases. In dit lesmateriaal gebruiken we twee verschillende relationele databases:

  1. De database transacties
  2. De cd-dvd database

De database transacties bevat gegevens over de financiële transacties van klanten van de ING. De cd-dvd database bevat gegevens over cd's en dvd's die kunnen worden geleend.

Bijna alle door ons gebruikte gegevens zijn fictief. In de tabel bank staan BIC-codes van banken die in het echt ook gebruikt worden. Alle rekeningnummers en
NAW-gegevens van klanten daarentegen zijn verzonnen.
Dat geldt ook voor de NAW-gegevens die gebruikt worden in de cd-dvd database.

Bij de verschillende aan de slag opdrachten wordt altijd aangegeven welke database je moet gebruiken voor het maken van de opdracht.

Tabellen

De database transacties bestaat uit 5 tabellen:

  • De tabel bank
  • De tabel rekening
  • De tabel rekeninghouder
  • De tabel transactie
  • De tabel betaalpas

 

Tabel bank

In de tabel bank staan de namen van de Nederlandse banken. Elk bank wordt uniek geïdentificeerd door middel van de BIC-code van de bank. De BIC-code is de unieke code die een bank gebruikt voor internationale betalingen.
Voor de Rabobank is dat bijvoorbeeld RABONL2U.

Tabel rekening

In de tabel rekening staan gegevens zoals de rekeninghdr_id, de bank_id, het saldo en de status van de rekening. Elke rekening wordt uniek geïdentificeerd door middel van een rekening_id. Een rekening kan op naam staan van één persoon of meerdere personen. In dat laatste geval hebben we te maken met zogenaamde en/of rekeningen.

Voor een en/of rekening kunnen meerdere betaalpassen zijn uitgegeven. Elke rekening heeft een status.



De status van een rekening kan zijn:

  • actief
  • geblokkeerd
  • opgeheven

Van een geblokkeerde rekening kan sprake zijn bij een faillissement. Op de rekening kunnen dan nog wel bedragen worden bijgeschreven, maar er kan niets meer worden afgeschreven.

Tabel rekeninghouder

In de tabel rekeninghouder staan de NAW-gegevens van rekeninghouders.

Tabel transactie

In de tabel transactie staat de datum waarop een transactie plaatsvindt, rekening_bij en rekening_af, een omschrijving, het type transactie, voor overschrijvingen de betaalstatus van de overschrijving en tot slot het bedrag.
Elke transactie wordt uniek geïdentificeerd door middel van een transactie_id.

Een transactie is van een bepaald type:

  • AC: acceptgiro
  • BA: betaalautomaat
  • GM: geldautomaat
  • OV: overschrijving
  • ST: storting
  • PO: periodieke overschrijving

De betaalstatus van een overschrijving kan zijn:

  • goedgekeurd (de betaalopdracht is uitgevoerd) - code GK
  • afgekeurd (de betaalopdracht is definitief afgewezen, bijvoorbeeld vanwege een te laag saldo) code - AK
  • gereserveerd (komt voor bij spoedbetalingen. Deze worden op werkdagen tot 16:30 uur verwerkt. Als de betaling na dit tijdstip wordt gedaan, krijgt de betaling tot 08:00 uur de volgende dag de status 'gereserveerd'). - code GR

Tabel betaalpas

Op de betaalpas staan het pasnummer en het rekening_id. De combinatie pasnummer en rekening_id is uniek. In het geval van een en/of rekening kunnen er meerdere passen gekoppeld zijn aan dezelfde rekening. Deze betaalpassen hebben niet hetzelfde nummer.

Relaties

De tabellen in de database transacties zijn onderling met elkaar verbonden. Er bestaan relaties tussen de diverse tabellen. Niet voor niets spreken we van een relationele database. Om de tabellenstructuur van een database inzichtelijk te maken, wordt vaak een strokendiagram gebruikt. De tabellen verschijnen als stroken met daarboven de namen van de kolommen. De sleutel van een tabel wordt aangegeven met een dubbele pijl onder de kolom of kolommen die deel uit maken van de sleutel. Indien een sleutel betrekking heeft op meerdere kolommen, noemen we dat een samengestelde sleutel.

Het strokendiagram van de database transacties kun je als pdf downloaden onder het menu-item bijlagen. Je hebt dit strokendiagram nodig bij het maken van opdrachten die uitgevoerd worden op deze database.

E SQL

Inleiding

SQL, de afkorting staat voor Structured Query Language, is een formele taal die speciaal ontworpen is voor de communicatie met databases. SQL is de standaardtaal die tegenwoordig door de meeste databasesystemen wordt gebruikt. In de vraagtaal SQL kunnen opdrachten worden gegeven waarmee gegevens uit een database kunnen worden opgevraagd, worden toegevoegd of gewijzigd of worden verwijderd. Een SQL-opdracht wordt ook wel een query genoemd. Het Engelse woordje 'query' betekent (zoek)vraag.

SQL-queries kunnen worden uitgevoerd door gebruik te maken van een RDBMS (een Relationeel Database Management Systeem). Een voorbeeld van een RDBMS is Microsoft Access. Scriptingtalen zoals PHP of PERL kunnen ook gebruik maken van SQL-queries. Bijvoorbeeld voor het opvragen van gegevens uit de database van een webwinkel.

In Enigma gebruiken we een eigen ontworpen tool om SQL-queries te kunnen uitvoeren. In deze tool kunnen queries worden uitgevoerd op de database transacties en de cd-dvd-database.

★ Aan de slag 9

Om de tabellenstructuur van een database weer te geven, wordt vaak een strokendiagram gebruikt. Bekijk het strokendiagram van een webwinkel.


Beantwoord de volgende vragen:

  1. Hoe wordt de sleutel van een tabel aangeduid in een strokendiagram?
  2. Noteer de drie namen van de tabellen van de database webwinkel en geef aan wat de bijbehorende sleutels zijn.
  3. Komen in dit strokendiagram samengestelde sleutels voor?

 

★ Aan de slag 10

  1. Tussen de verschillende tabellen in een relationele database bestaan verbanden.
    1. Hoe worden de verbanden tussen de tabellen in een strokendiagram aangegeven?
    2. Schrijf alle verbanden op die er zijn in de database van de webwinkel.
       
  2. Je weet wat een vraagtaal is.
    1. Leg in eigen woorden uit waarvoor je een vraagtaal gebruikt.
    2. Noem een voorbeeld van een (veelgebruikte ) vraagtaal.

SQL

We beginnen met een eenvoudige zoekopdracht. Stel dat de eigenaar van de webwinkel een lijst van de namen van al zijn klanten wil hebben. Deze vraag kan in SQL als volgt geformuleerd worden:

SELECT achternaam, voornaam
FROM klant;


Achter SELECT staan de kolommen die getoond moeten worden. De kolomnamen worden gescheiden door komma's. Achter FROM staat de naam van de tabel (of tabellen) waaruit deze kolommen komen. Een SQL-vraag wordt altijd afgesloten met een puntkomma (;).

Wanneer de eigenaar van de webwinkel alle gegevens uit de tabel klant wil hebben
dan zou de vraag er zo uit kunnen zien:

SELECT klant_id, achternaam, voornaam, adres, woonplaats
FROM klant;



​Dit kan echter korter. Wanneer je alle kolommen wilt zien dan ziet de SQL-vraag er zo uit:

SELECT *
FROM klant;


De asterisk zorgt ervoor dat alle kolommen getoond worden op het scherm.

★ Aan de slag 11

Bekijk de onderstaande query (database webwinkel):

SELECT datum, tijd
FROM bestelling;

  1. Beschrijf in eigen woorden wat hier wordt bedoeld.
  2. Je ziet dat de SQL-commando's met hoofdletters worden getypt. Dat is niet verplicht, maar waarom zou het in het algemeen worden gedaan?

★ Aan de slag 12

Je kunt een selectie van kolommen maken uit een bepaalde tabel.
Je kunt echter ook alle kolommen selecteren.
Bekijk de onderstaande tabel:

 

  1. Welke query levert als resultaat de naam en omschrijving van een product op?
  2. Met welke query krijg je alle kolommen uit de tabel product te zien?

 

SQL-tool

SQL-tool
Voor het uitvoeren van queries op een echte database gebruiken we een eigen ontwikkelde tool.


Van deze SQL-tool gaan we in de nu volgende 'aan de slag'-opdrachten gebruik maken. De tool bestaat uit een invoerveld waar de query die moet worden uitgevoerd kan worden ingetypt. Daarna kan door op de knop met de tekst 'Uitvoeren' te klikken het resultaat bekeken worden.

Bekijk de onderstaande instructievideo over de SQL-Tool.

 

★ Aan de slag 13

Open de SQL-tool.

Transacties


We maken voor deze opdracht gebruik van de database 'transacties'.
Beantwoord de onderstaande vragen met behulp van queries die uitgevoerd worden in de SQL-tool. Schrijf de queries ook op.

  1. Maak een lijst met de namen, het adres en de woonplaats van de rekeninghouders.
  2. Maak een lijst met alle gegevens van de rekeninghouders.

Een selectie maken

Een selectie maken
Je hebt gezien dat je met behulp van SQL een volledige tabel of een aantal kolommen uit een tabel op het scherm kunt tonen. Het zal ook voorkomen dat je niet de gegevens uit alle rijen wilt hebben.
Stel dat je een lijst wilt hebben van de namen van alle rekeninghouders die in Utrecht wonen. In dat geval zal er een selectie van rijen gemaakt moeten worden. Dit doe je door een voorwaarde te stellen:

SELECT rekeninghouder
FROM rekeninghouder
WHERE plaats = 'Utrecht';


Achter WHERE staat de voorwaarde dat in de kolom rekeninghouder alleen de namen van de rekeninghouders moeten staan die in Utrecht wonen.
In de volgende query wordt een lijst gemaakt van het rekening_id, het saldo en de status van de rekeningen waarvan het saldo groter is dan of gelijk aan € 1900,00.

SELECT rekening_id, saldo, status
FROM rekening
WHERE saldo >= 1900.00;


Kijk eens naar de notatie van het bedrag. In plaats van 1900,00 hebben we in de query 1900.00 genoteerd. Als decimaalteken hebben we een punt in plaats van een komma gebruikt. In Nederland en België zetten we een komma voor decimalen. Bijvoorbeeld 24,95. In Engelstalige landen wordt als decimaalteken een punt gebruikt en is de notatie dus 24.95 in plaats van 24,95.

SQL kent een aantal verschillende typen data zoals tekst en numerieke gegevens. Bij het maken van een tabel moet voor iedere kolom een geschikt type data gespecificeerd worden. Als het om tekst gaat, dan moet het gegeven tussen aanhalingstekens staan. Is er sprake van een numeriek gegeven dan worden de aanhalingstekens achterwege gelaten. Een datum wordt in SQLite tussen enkele aanhalingstekens gezet.

De volgende query levert als resultaat een lijst op met de transactie_id, de datum en het bedrag. Alleen die rijen worden getoond, waarvan de datum na 19-12-2015 ligt.

SELECT transactie_id, datum, bedrag
FROM transactie
WHERE datum > '19-12-2015';


De Europese notatie voor een datum is eerst de dag, dan de maand en daarna het jaar. In de Verenigde Staten is dat eerst de maand, dan de dag en daarna het jaar. In de SQL-tool wordt de datum in de tabel transacties nog anders genoteerd. Namelijk eerst het jaar, daarna de maand en dan de dag.

In onze SQL-tool wordt de query dus:

SELECT transactie_id, datum, bedrag
FROM transactie
WHERE datum > '2015-12-19';


In het Microsoft Access bestand van de database transacties wordt de datum op de Europese manier genoteerd en komt de datum tussen #'s te staan: #19-12-2015#.

Een query in SQL heeft een basisstructuur:

SELECT <een of meer kolommen>
FROM <een of meer tabellen>
WHERE <een of meer voorwaarden>;

★ Aan de slag 14

Open de SQL-tool. We maken voor deze opdracht gebruik van de database 'transacties'.

Transacties
  1. Voer in de tool de onderstaande query uit en bekijk het resultaat:

    SELECT transactie_id, datum, bedrag
    FROM transactie
    WHERE datum > '2015-12-19';

     
  2. Verander nu de datum in de query in 2016-03-19 en voer de query nogmaals uit. Welke melding krijg je? Kun je daarvoor een verklaring geven?

Sorteren

De query heeft geen invloed op de volgorde waarin de rijen getoond worden.
In SQL kan het resultaat gesorteerd worden met behulp van de component ORDER BY.

Wanneer we een overzicht willen hebben van het adres en de woonplaats van alle rekeninghouders die wonen in Alkmaar gesorteerd op adres dan kan dat met de volgende query:

SELECT adres, plaats
FROM rekeninghouder
WHERE plaats = 'Alkmaar'
ORDER BY adres;


In dit voorbeeld wordt de tabel oplopend gesorteerd: teksten volgens de ASCII-tabel, getallen en datums van klein naar groot. Het is ook mogelijk om de volgorde om te keren: aflopend sorteren. De Engelse termen daarvoor zijn 'ascending' en 'descending' (ASC en DESC). Wanneer je er niets bij zet, wordt automatisch oplopend gesorteerd. Om aflopend te sorteren moet je dat achter de kolom in ORDER BY zetten.

SELECT adres, plaats
FROM rekeninghouder
WHERE plaats = 'Alkmaar'
ORDER BY adres DESC;


Wanneer je een overzicht wilt hebben van alle opgenomen of afgeschreven bedragen en de data waarop de transacties hebben plaatsgevonden en je wilt sorteren op bedrag, kan het een probleem worden als sommige bedragen meerdere keren voorkomen. In dat geval kun je de tabel op twee kolommen sorteren. In het resultaat willen we alleen bedragen die hoger zijn dan € 500,00 terugzien.

SELECT transactie_id, datum, bedrag
FROM transactie
WHERE bedrag > 500
ORDER BY bedrag, datum;

Nogmaals: wanneer je er niets bij zet, wordt automatisch oplopend gesorteerd. Om aflopend te sorteren moet je dat achter de kolom in ORDER BY zetten.

SELECT transactie_id, datum, bedrag
FROM transactie
WHERE bedrag > 500
ORDER BY bedrag ASC, datum DESC;

★ Aan de slag 15

Je hebt gelezen hoe je selecties gesorteerd kunt weergeven.

  1. Welk commando gebruik je daarvoor?
  2. Hoe wordt de volgende selectie gesorteerd?
    Maak een keuze uit:
    SELECT type, bedrag
    FROM transactie
    WHERE type = 'BA'
    ORDER BY bedrag;
    1. Alfanumeriek aflopend op bedrag
    2. Numeriek oplopend op bedrag
    3. Alfanumeriek oplopend op bedrag
    4. Numeriek aflopend op bedrag

★ Aan de slag 16

Bekijk de volgende query:

SELECT datum, bedrag
FROM transactie
ORDER BY datum, bedrag;

  1. In de laatste regel zie je 'datum' en 'bedrag' staan. Verklaar waarom.
  2. Hoe ziet de query eruit als je eerst sorteert op bedrag en vervolgens op datum?
  3. Wordt de lijst oplopend of aflopend gesorteerd?
  4. Herschrijf de query, zodat de lijst aflopend gesorteerd wordt.

Geen duplicaten

Van alle rekeningen wordt het saldo en de status van de rekening vermeld.
We kunnen deze gegevens opvragen met de volgende query:

SELECT saldo, status
FROM rekening;


In de resultaattabel hieronder komen sommige combinaties meerdere keren voor.
Dat geldt bijvoorbeeld voor de combinatie saldo 750 en status actief

Als we een lijst willen hebben waarin elke combinatie maar één keer voorkomt, moeten we in SQL dubbele rijen verwijderen. Daarvoor maken we gebruik van DISTINCT:

SELECT DISTINCT saldo, status
FROM rekening;

★ Aan de slag 17

Bekijk de volgende query:

SELECT DISTINCT plaats
FROM rekeninghouder;

  1. Leg in eigen woorden uit wat het commando SELECT DISTINCT in de deze query doet.
  2. Maakt het verschil als je in dit voorbeeld SELECT DISTINCT vervangt door SELECT?
  3. Open de SQL-tool database transacties. Voer de query uit met en zonder het commando DISTINCT en controleer of het antwoord dat je hebt gegeven bij b klopt.
Transacties

★ Aan de slag 18

Open de SQL-tool. We maken voor deze opdracht gebruik van de database 'transacties'.

Transacties

Beantwoord de volgende vragen met behulp van queries. Noteer de queries.
Je kunt gebruik maken van het strokendiagram database transacties.
Dit strokendiagram vind je bij Bijlagen.

  1. Maak een lijst van de NAW-gegevens van rekeninghouders die in Heerlen wonen.
  2. Maak een lijst van de rekeningen waarvan het saldo hoger is dan € 750,00.
  3. Wat is het adres van de rekeninghouder die telefoonnummer 010-4553666 heeft?
  4. Maak een lijst van alle typen transacties. In de lijst mogen géén duplicaten voorkomen.
  5. Maak een lijst met alle rekeningnummers waar bedragen van zijn afgeschreven.
  6. Wat is de BIC-code van de Rabobank?

F Voorwaarden

AND-operator

Samengestelde voorwaarden: AND-operator
Tot nu toe heb je queries moeten schrijven waarbij de te selecteren rijen aan één voorwaarde moesten voldoen. Sommige vragen zijn daarmee niet te beantwoorden, bijvoorbeeld de vraag: Wat is het adres van de rekeninghouder die in Alkmaar woont?

SELECT adres, rekeninghouder
FROM rekeninghouder
WHERE plaats = 'Alkmaar';


Dat gaat goed als er maar é&eaacute;n rekeninghouder in Alkmaar woont. Maar het ligt voor de hand dat deze query meerdere adressen oplevert zoals we hieronder kunnen zien.


Om het juiste adres te weten te komen, moet er een tweede voorwaarde gesteld worden: de naam van de rekeninghouder.

SELECT adres, rekeninghouder
FROM rekeninghouder
WHERE plaats = 'Alkmaar'
AND rekeninghouder = 'Gerdien Jansen';


Alleen die rijen moeten worden geselecteerd waarvoor geldt dat beide voorwaarden waar zijn. Hiervoor gebruik je de AND-operator.

OR-operator

Samengestelde voorwaarden: OR-operator
De ING-bank wil een overzicht van de transacties die de status goedgekeurd of afgekeurd hebben gekregen. Daarvoor wordt de volgende query uitgevoerd:

SELECT transactie_id
FROM transactie
WHERE status_ov = 'GK'
OR status_ov = 'AK';

 

★ Aan de slag 19

Had je in deze query in plaats van de OR-operator ook de AND-operator mogen gebruiken?
Licht je antwoord toe.

LIKE-operator

Samengestelde voorwaarden: LIKE-operator
De OR-operator zorgt ervoor dat die rijen worden geselecteerd waarvoor geldt dat één van beide of beide voorwaarden waar zijn. De ING-bank had ook een andere query kunnen maken, die hetzelfde resultaat oplevert:

SELECT transactie_id
FROM transactie
WHERE status_ov LIKE '_K';


Met de LIKE-operator kun je rijen selecteren die een tekstwaarde bevatten met een bepaald patroon.
Achter de LIKE-operator staat '_K';. De letter K moet precies kloppen, maar de underscore heeft voor de LIKE-operator een speciale betekenis: de underscore staat in plaats van een enkel teken en daar kan ieder teken staan. In plaats van een underscore kan ook het procentteken (%) gebruikt worden. Dit teken staat voor nul, één of meer tekens:

SELECT adres
FROM rekeninghouder
WHERE adres LIKE 'Ad%';


Het resultaat van de query op de vorige pagina is de tabel:

In Microsoft Access wordt in SQL-opdrachten in plaats van de underscore (_) het vraagteken (?) gebruikt en in plaats van het procentteken (%) een asterisk (*).

★ Aan de slag 20

Om te weten te komen welke rekeninghouder op de Kanaalkade in Amsterdam woont, zou de bank de volgende query kunnen uitvoeren:

SELECT rekeninghouder, adres
FROM rekeninghouder
WHERE adres LIKE 'Kanaalkade%';

  1. Waarom voldoet deze query niet?
  2. Hoe zou je de query moeten aanpassen om wel het gewenste resultaat te krijgen?

★ Aan de slag 21

Behalve de AND-operator bestaat er ook de OR-operator.
Leg in eigen woorden uit waarvoor je deze operator kunt gebruiken.

★ Aan de slag 22

In sommige gevallen kun je in plaats van de OR-operator de LIKE-operator gebruiken. Kijk bijvoorbeeld naar de volgende query:

SELECT bank_id, bank
FROM bank
WHERE bank_id = 'ABNANL2A' OR bank_id = 'BICKNL2A' OR bank_id = 'INGBNL2A';


  1. Herschrijf deze query door gebruik te maken van de LIKE-operator. Test de query in de SQL-tool database transacties.
  2. Wat is in de LIKE-operator het verschil tussen % en __?
Transacties

NOT-operator

Samengestelde voorwaarden: NOT-operator
De ING-bank wil een overzicht genereren van de namen van alle rekeninghouders met uitzondering van de rekeninghouders die in Utrecht wonen:

SELECT rekeninghouder, plaats
FROM rekeninghouder
WHERE NOT plaats = 'Utrecht';


De NOT-operator zorgt ervoor dat die rijen worden geselecteerd waarvoor geldt dat de voorwaarde niet waar is.

Een andere query, die hetzelfde resultaat oplevert, is:

SELECT rekeninghouder, plaats
FROM rekeninghouder
WHERE plaats <> 'Utrecht';

Relationele operatoren

Samengestelde voorwaarden: Relationele operatoren
Net als Java kent SQL een aantal relationele operatoren.
Het zijn echter niet altijd dezelfde operatoren als bij Java:

< kleiner dan
> groter dan
<= kleiner dan of gelijk aan
>= groter dan of gelijk aan
= is gelijk aan
<> is ongelijk aan

★ Aan de slag 23

Van alle rekeninghouders die in Alkmaar wonen, klopt bij één rekeninghouder het
telefoonnummer niet.
Deze rekeninghouder is pas geleden verhuisd van Goes naar Alkmaar.
In de database wordt echter nog steeds het oude telefoonnummer
vermeld.
Het netnummer van Alkmaar is 072, dat van Goes 0113.

Transacties
  1. Schrijf een query waarbij je met behulp van het netnummer van Alkmaar achterhaalt om wie het gaat.
  2. Schrijf een query waarbij je met behulp van het netnummer van GOES achterhaalt om wie het gaat.

IS NULL / prioriteit

Samengestelde voorwaarden: IS NULL
In een database kunnen in tabellen sommige velden leeg gelaten worden. In de tabel rekeninghouder staat een kolom telefoonnr. Stel dat een rekeninghouder geen telefoonnummer heeft of er bewust geen heeft doorgegeven aan de bank. In dat geval wordt er geen waarde opgeslagen in het veld telefoonnr.

In de tabel transactie zal bij een geldopname bij een geldautomaat wel een rekeningnummer worden vermeld in de kolom rekening_af, maar niet in de kolom rekening_bij. Dit veld blijft leeg.

In SQL geef je een leeg veld aan met IS NULL. Met IS NOT NULL kan worden gecontroleerd of een veld niet leeg is en er een waarde is ingevuld.

★ Aan de slag 24

Open de SQL-tool. We maken voor deze opdracht gebruik van de database 'transacties'. Schrijf een query waarmee je kunt controleren of alle rekeninghouders een telefoonnummer hebben opgegeven.

Transacties

De ING wil een overzicht van alle transacties van het type GM (geldautomaat) of OV (overschrijving) vanaf 1 maart 2016. Daarvoor is de onderstaande query bedacht:

SELECT transactie_id, type, rekening_bij, rekening_af, datum
FROM transactie
WHERE datum >= '2016-03-01'
AND type ='GM' OR type = 'OV';


Het resultaat van deze query is een lijst van alle transacties van het type GM vanaf 1 maart 2016 en alle transacties die van het type OV zijn. Dat was niet de bedoeling.

Je kunt deze query vergelijken met de volgende som: 3 + 2 x 5. De uitkomst van deze som is 13. Je vermenigvuldigt immers eerst 2 met 5 en daarna tel je er 3 bij op. Kortom: vermenigvuldigen gaat vóór optellen. Als het de bedoeling is om eerst op te tellen en dan pas te vermenigvuldigen, dan moet je haakjes gebruiken: (3 + 2) x 5.

Hetzelfde is het geval wanneer je in een voorwaarde AND en OR gebruikt: AND gaat voor OR.

In het voorbeeld wordt dus eerst gezocht naar de rijen waarvoor geldt dat het transacties zijn vanaf 1 maart 2016 en waarvan het type = 'GM'. Daarna wordt er gezocht naar alle transacties met type = 'OV'. Om het gewenste resultaat te krijgen, moeten er haakjes gebruikt worden in de query:

SELECT transactie_id, type, rekening_bij, rekening_af, datum
FROM transactie
WHERE datum >= '2016-03-01'
AND (type ='GM' OR type = 'OV');

Met als resultaat alle transacties met type = 'GM' of type = 'OV' vanaf 1 maart 2016.

★ Aan de slag 25

Bekijk de onderstaande query:

SELECT transactie_id, type
FROM transactie
WHERE rekening_af IS NULL
AND (type = 'GM' OR type ='OV');


Leg uit waarom het voor de hand ligt dat geen enkele rij aan deze voorwaarden voldoet.

★ Aan de slag 26

Open de SQL-tool. We maken voor deze opdracht gebruik van de database 'transacties'.

Voer hier het SQL-script in.

Transacties
  1. Bekijk de onderstaande query:

    SELECT rekeninghouder, adres, plaats
    FROM rekeninghouder
    WHERE NOT plaats = 'Utrecht';


    Wat selecteert deze query?
  2. Er is een andere manier om hetzelfde resultaat te krijgen. Dan moet je gebruik maken van één van de relationele operatoren van SQL. Herschrijf de bovenstaande query op die manier en test de query in de SQL-tool.
  3. Met welke operator selecteer je lege velden?

IN-operator

Samengestelde voorwaarden: IN-operator
De bank wil een lijst van alle transactie_id's waarvoor zowel bij rekening_bij als bij rekening_af een rekeningnummer moet worden ingevuld.

Bekijk de onderstaande query:

SELECT transactie_id
FROM transactie
WHERE type = 'BM'
OR type = 'OV'
OR type = 'PO'
OR type = 'AC';


Deze samengestelde voorwaarde ziet er omslachtig uit. Dit komt met name voor als bepaald moet worden of een waarde voorkomt in een verzameling, die bestaat uit een groot aantal elementen. Met de IN-operator kan deze query vereenvoudigd worden.

SELECT transactie_id
FROM transactie
WHERE type IN ('BM', 'OV', 'PO', 'AC');


De IN-operator zorgt ervoor dat die rijen worden geselecteerd waarvoor geldt dat de waarde van de kolom type voorkomt in de verzameling tussen de haakjes achter de IN-operator.

★ Aan de slag 27

Bekijk de query met de samengestelde voorwaarden:

SELECT transactie_id
FROM transactie
WHERE type = 'BM'
OR type = 'OV'
OR type = 'PO'
OR type = 'AC';


Dat is een omslachtige manier.

  1. Met welke operator kun je deze query vereenvoudigen?
  2. Hoe ziet de query eruit die alle rekeninghouders selecteert die in Amsterdam, Rotterdam en Utrecht wonen.

★ Aan de slag 28

  1. Open de SQL-tool. We maken voor deze opdracht gebruik van de database 'transacties'.
    Transacties
    Maak een lijst van de rekening-id's en het saldo van alle rekeningen waarvan het saldo € 250,00, € 350,00, € 750,00 of € 850,00 is. Maak in de query gebruik van de IN-operator.
  2. Als de bedragen tussen aanhalingstekens geplaatst worden, levert de query in de resultaattabel géén records op. Waarom niet?

Toets 1

In de volgende toets wordt getoetst wat je inmiddels zou moeten weten over het onderwerp databases.

Maak de toets:

Databases

G Tabellen combineren

Tabellen combineren

De database transacties bestaat uit meerdere tabellen. Dat is niet zomaar gebeurd. Je weet dat er goede redenen zijn om de informatie te spreiden over verschillende tabellen. In de vorige onderdelen heb je geleerd hoe je met behulp van SQL informatie kunt halen uit één tabel. Om een antwoord op een vraag te krijgen, zal het vaak nodig zijn om de informatie uit meerdere tabellen te combineren. In een relationele database worden twee tabellen gecombineerd tot een nieuwe tabel door ze te koppelen (in het Engels: join). Als je daarbij niet oppast, kan dat tot vreemde resultaten leiden.

We nemen als voorbeeld de administratie van een buurtvereniging. Die bestaat uit twee tabellen: leden en kinderen.

Tabel: Leden
Tabel: Kinderen

Om een uitnodiging te maken voor een spelletjesmiddag wil de organisatie een lijst van de roepnamen van de kinderen, hun achternamen en adressen hebben.
In een SQL-query geef je bij FROM aan welke tabellen geraadpleegd moeten worden. Als je meer dan één tabel opgeeft, worden de tabellen eerst gecombineerd tot één tabel. Daarna wordt die combinatietabel gebruikt om de gewenste informatie te vinden.
De volgende query heeft als resultaat een combinatietabel:

SELECT roepnaam, naam, adres,
FROM leden, kinderen;


Het resultaat van de query op de vorige pagina zal niet de lijst
opleveren die de organisatie van de spelletjesmiddag had beoogd:

Resultaat

In deze lijst zijn alle mogelijke combinaties van rijen uit de twee tabellen afgedrukt: ieder kind wordt drie keer afgedrukt: een keer met zijn eigen achternaam en adres en daarnaast met de namen en adressen van de andere leden.
Dit levert dus 4 x 3 is 12 rijen op.

Als er vijftig gezinnen lid zijn van de buurtvereniging en die gezinnen samen honderd kinderen hebben, dan levert deze query 50 x 100 = 5000 rijen op in de combinatietabel waarvan de meeste rijen geen relevante informatie opleveren.

De organisatie wil alleen de combinatie van de roepnaam bij de juiste achternaam en adres. Daarvoor zoeken we in de beide tabellen naar iets gemeenschappelijks. In dit voorbeeld is dat de kolom lidnr. Wanneer voor een rij geldt dat het lidnummer in de tabel leden gelijk is aan het lidnr in de tabel kinderen dan zal het een gewenste combinatie opleveren. In de SQL-opdracht komt deze voorwaarde achter de WHERE‑component te staan:

SELECT roepnaam, naam, adres
FROM leden, kinderen
WHERE leden.lidnr = kinderen.lidnr;



In de WHERE-component komt twee keer de kolom lidnr voor.
Om duidelijk te maken welke kolom je bedoelt, zet je voor de kolomnaam de naam van de tabel en een punt. De aanduiding van een kolom heeft een basisstructuur: tabelnaam.kolomnaam .

In dit voorbeeld staat de informatie die je wilt hebben in twee tabellen verspreid. Het kan ook voorkomen dat je drie of meer tabellen moet gebruiken om de informatie te krijgen, die je wilt hebben. In dat geval zet je achter de FROM-component de namen van de tabellen en koppel je achter de WHERE-component de tabellen
twee aan twee.

★ Aan de slag 29

We willen een overzicht van alle rekeninghouders en het saldo van hun rekening hebben. Bekijk de volgende query:

SELECT rekeninghouder, saldo
FROM rekeninghouder, rekening;

  1. Leg in eigen woorden uit waarom de tabel die deze query oplevert fout is.
  2. Uit hoeveel rijen bestaat de resultaattabel van deze query?
  3. Herschrijf deze query zodat de juiste lijst wordt opgeleverd.

★ Aan de slag 30

Voor deze opdracht maken we gebruik van de SQL-tool database transacties.

Transacties

Dit onderdeel gaat over het combineren van tabellen in een query. Dezelfde kolomnaam kan meerdere keren voorkomen. Bekijk het volgende voorbeeld:

SELECT bank_id, bank, rekening_id
FROM bank, rekening
WHERE bank_id = bank_id;


Pas deze query zo aan, zodat er geen onduidelijkheid meer bestaat over de kolomnamen.

Test de herschreven query in de SQL-tool database transacties.

Tabellen combineren - 2

We kijken nogmaals naar de database transacties. De ING wil een overzicht van alle geblokkeerde rekeningen waar nog geld op is gestort. Daarvoor is informatie nodig uit twee tabellen. In de query moeten meerdere voorwaarden worden opgenomen:

  1. Het rekening_id uit de tabel rekening moet gelijk zijn aan rekening_bij uit de tabel transactie.
  2. De status van de rekening moet geblokkeerd zijn.
  3. Het type van de transactie moet ST zijn.

De uit te voeren query luidt dan:

SELECT rekening_id, bedrag
FROM rekening, transactie
WHERE rekening_bij = rekening_id
AND type = 'ST' AND status = 'geblokkeerd';

★ Aan de slag 31

  1. ​Bekijk de volgende query. Wat selecteert deze query?

SELECT rekeninghouder
FROM rekeninghouder, rekening
WHERE rekeninghouder.rekeninghdr_id = rekening.rekeninghdr_id
AND saldo >= 1500;

 

  1. Voor deze opdracht maken we gebruik van de SQL-tool database transacties.
Transacties
  1. Op welke rekeningen die geblokkeerd zijn, is geld bijgeschreven?
  2. Op wiens naam staat de rekening met een saldo van € 3831,34.

 

  1. Voor deze opdracht maken we gebruik van de SQL-tool database transacties.
Transacties
  1. Maak een lijst met de NAW-gegevens van rekeninghouders en de namen van de banken waar de rekeninghouders een betaalrekening hebben bij de ING.
  2. Maak een lijst van de rekeninghouders waarvan de rekening is geblokkeerd of is opgeheven.

Tabellen combineren - 3

Tot nu toe hebben we in de SQL-tool telkens queries uitgevoerd op de database transacties. We gaan de tool echter ook inzetten bij een andere database: de cd-dvd database.

De cd-dvd database bestaat uit 4 tabellen. In de tabel leners staan de gegevens van mensen die cd's of dvd's lenen. Denk daarbij aan voornaam, achternaam, adres, postcode, woonplaats en telefoonnummer. Elke lener heeft een uniek nummer, het zogenaamde admnr. In de tabel uitlening wordt bijgehouden wie wat heeft geleend en wanneer iets teruggebracht is. Een omschrijving van alle cd's en/of dvd's is terug te vinden in de tabel cd_dvd. In deze tabel staan de namen van artiesten, de titels van de nummers, het jaar waarin de release heeft plaatsgevonden, het genre waartoe het nummer behoort en een type-omschrijving. Iedere cd en/of dvd wordt in deze tabel uniek geïdentificeerd aan de hand van een cdid. Tot slot is er dan nog de tabel nummers.

Voor de weergave van de tabellenstructuur van de cd-dvd database gebruiken we net als bij de database transacties een strokendiagram:

 

 

★ Aan de slag 32

Voor deze opdracht maken we gebruik van de SQL-tool cd-dvd database.

CD-DVD database
  1. Noem de artiest/band van de cd waarop het nummer Waterloo staat. In het resultaat mogen géén duplicaten voorkomen.
  2. Noem het adminnr en de voor- en achternaam(en) van de lener(s) die ooit de cd waarop het nummer She loves you staat, heeft (hebben) geleend.

H Functies

Functies

De ING wil graag een overzicht hebben van het totale saldo op alle ING-rekeningen. In SQL bestaat een aantal functies waarmee dit soort vragen beantwoord kunnen worden. De functie SUM berekent de som van een aantal getallen in een kolom:

SELECT SUM(saldo)
FROM bank, rekening
WHERE bank.bank_id = rekening.bank_id
AND bank = 'ING';


Het resultaat van de query is één getal, de som van alle waarden in de kolom saldo:


We hebben de query uitgevoerd in onze SQL-tool. Boven het totale bedrag staat nu SUM(saldo). We kunnen de naam van de kolom ook opgeven met behulp van de AS-component:

SELECT SUM(saldo) AS 'totale saldo van alle ING-rekeningen'
FROM bank, rekening
WHERE bank.bank_id = rekening.bank_id
AND bank = 'ING';


SQL kent de volgende functies:

functie betekenis
AVG Berekent het gemiddelde van de getallen in een kolom.
COUNT Telt het aantal waarden in een kolom of telt het aantal rijen in een tabel.
MAX Bepaalt de grootste waarde in een kolom.
MIN Bepaalt de kleinste waarde in een kolom.
SUM Berekent de som van de getallen in een kolom.


Wanneer we willen weten hoeveel rekeninghouders er niet in Rotterdam wonen, kan dat met de volgende query:

SELECT COUNT(*) AS 'Aantal rekeninghouders buiten Rotterdam'
FROM rekeninghouder
WHERE plaats <> 'Rotterdam'

★ Aan de slag 33

Je hebt gelezen dat de functie SUM de som van een aantal getallen in een kolom berekent.

  1. Wat is het resultaat van de volgende query?

    SELECT SUM(bedrag)
    FROM transactie;

     
  2. Wat is er mis met de volgende query?

    SELECT SUM(type)
    FROM transactie;

★ Aan de slag 34

SQL kent nog meer functies.

  1. Leg uit wat de volgende query selecteert:

    SELECT COUNT(*)
    FROM rekeninghouder
    WHERE NOT plaats = 'Heerlen';
  2. Het resultaat van deze query is één getal. Hoe kun je ervoor zorgen dat boven dit getal de tekst 'rekeninghouders' komt te staan?

 

★ Aan de slag 35

Voor deze opdrachten maken we gebruik van de SQL-tool database transacties.

Transacties

1. Maak de volgende opgaven

  1. Hoeveel betaalpassen zijn er in totaal uitgegeven?
  2. Wat is het hoogste saldo dat er op een rekening staat?
  3. Wat is het laagste saldo dat er op een rekening staat?

2. Maak de volgende opgaven

  1. Wat is de datum van de transactie die het langst geleden heeft plaatsgevonden?
  2. Wat is de datum van de meest recente transactie?
  3. Hoe groot is het gemiddelde bedrag aan transacties?

★ Aan de slag 36

Voor deze opdrachten maken we gebruik van de SQL-tool cd -dvd database.

CD-DVD database

 

  1. Maak de volgende opdrachten
    1. Hoeveel cd's van Genesis zijn in de tabel cd_dvd opgenomen?
    2. Uit welk jaar dateert de oudste cd die in de database terug te vinden is?
       
  2. In hoeveel verschillende woonplaatsen wonen leners?
     
  3. Maak de volgende opdrachten
    1. Hoeveel leners hebben ooit een cd of dvd geleend? Geef de resultaattabel de naam 'ooit geleend'.
    2. Kunnen in deze resultaattabel dezelfde leners meerdere keren voorkomen? Licht je antwoord toe.
       
  4. In een query kun je ook berekeningen laten uitvoeren met behulp van rekenkundige operatoren =, -, *, /.
    1. Wat is het verschil tussen het hoogste en het laagste saldo in de tabel rekening?
    2. Het bedrag in de resultaattabel is hoger dan het hoogste saldo. Hoe kan dat?

I Groeperen

Inleiding

In het vorige onderdeel hebben we bekeken hoeveel rekeninghouders er niet in Rotterdam wonen. Daarna hadden we ook nog kunnen bekijken hoeveel rekeninghouders wel in Rotterdam wonen. Het wordt lastiger als we een overzicht van het aantal rekeninghouders per plaats willen opvragen. We zouden dan kunnen beginnen om eerst een lijst van woonplaatsen te maken:

SELECT DISTINCT plaats
FROM rekeninghouder
ORDER BY plaats;


en vervolgens per woonlaats het aantal rekeninghouders op te vragen:

SELECT COUNT(*) AS 'Maastricht'
FROM rekeninghouder
WHERE plaats = 'Maastricht';


 

GROUP BY

De voorgaande methode is vrij omslachtig. Gelukkig kent SQL een opdracht om rijen te groeperen op basis van overeenkomsten tussen die rijen: GROUP BY. In dit voorbeeld zou de tabel rekeninghouder gegroepeerd moeten worden op basis van gelijke woonplaatsen. Hiervan kunnen we dan opvragen uit hoeveel rekeninghouders elke groep (woonplaats) bestaat:

SELECT plaats, COUNT(*) AS 'aantal rekeninghouders'
FROM rekeninghouder
GROUP BY plaats;


Het resultaat van deze query is een lijst met woonplaatsen met daarachter het aantal rekeninghouders uit de desbetreffende woonplaats.

Het is ook mogelijk om te groeperen op twee kolommen. We willen graag weten of er rekeningen bestaan die dezelfde status en het zelfde saldo hebben. Daarvoor voeren we de onderstaande query uit:

SELECT saldo, status, COUNT(*)
FROM rekening
GROUP BY saldo, status;


Hieronder zie je een stukje van het resultaat:

Voorwaarden stellen

Met behulp van de WHERE-component kunnen we een voorwaarde stellen aan een query. Die voorwaarde wordt opgelegd aan de rijen. Wanneer we een overzicht willen van alle rekeninghouders per woonplaats die wonen op een adres waar 'kade' in voorkomt dan kan dat met de query:

SELECT plaats, COUNT(*) AS 'aantal rekeninghouders'
FROM rekeninghouder
WHERE adres LIKE '%kade%'
GROUP BY plaats;

 

★ Aan de slag 37

Bekijk de volgende query:

SELECT status, COUNT(status) AS 'aantal'
FROM rekening
GROUP BY status;


Leg in eigen woorden uit wat deze query selecteert en hoe de lijst gepresenteerd wordt.

★ Aan de slag 38

In een database van een voetbalvereniging wordt van de leden in een tabel met de NAW-gegevens ook het geslacht genoteerd. Dat kan M of V zijn.

Bekijk de volgende queries:

SELECT COUNT(*) AS 'aantal'
FROM leden
WHERE geslacht = 'V';

SELECT COUNT(*) AS 'aantal'
FROM leden
WHERE geslacht = 'M';


Herschrijf deze queries tot één query door de tabel leden te groeperen op basis van het geslacht.

★ Aan de slag 39

Bekijk de volgende query die betrekking heeft op de database van een voetbalvereniging:

SELECT woonplaats, geslacht, COUNT(*) AS 'aantal leden'
FROM leden
GROUP BY woonplaats, geslacht;


Leg in eigen woorden uit wat deze query selecteert en hoe de lijst gepresenteerd wordt.

★ Aan de slag 40

We vestigen onze aandacht weer op de database transacties. Bekijk de volgende query:

SELECT status_ov, COUNT(*) AS 'GK of AK'
FROM transactie
WHERE status_ov LIKE '_K'
GROUP BY status_ov;


Leg in eigen woorden uit wat deze query doet en hoe de lijst gepresenteerd wordt.

Voorwaarden stellen - 2

Het kan nodig zijn om een voorwaarde te stellen aan de groepen op basis van bepaalde groepseigenschappen. Wanneer we een overzicht van alle plaatsen willen hebben waar meer dan drie rekeninghouders wonen dan kunnen we met de GROUP BY-component bekijken in welke plaatsen rekeninghouders wonen. Vervolgens gebruiken we de HAVING-component om die plaatsen te selecteren waar meer dan drie rekeninghouders wonen:

SELECT plaats, COUNT(*) AS 'aantal rekeninghouders'
FROM rekeninghouder
GROUP BY plaats
HAVING COUNT(*)>3;


De WHERE-component gebruik je wanneer je een voorwaarde oplegt aan de te selecteren rijen.
De HAVING-component gebruik je wanneer je een voorwaarde oplegt aan de te selecteren groepen.

 

★ Aan de slag 41

Voor deze opdracht maken we gebruik van de SQL-tool database transacties.

Transacties

Je kunt bij het groeperen van rijen ook de HAVING-component gebruiken.

  1. Leg uit wat de HAVING-component doet.
  2. Wat is het verschil met de WHERE-component.
  3. Wat selecteert de volgende query?

    SELECT rekening_bij, SUM(bedrag) AS 'totaal bedrag'
    FROM transactie
    GROUP BY rekening_bij
    HAVING SUM(bedrag) > 1400;

     
  4. Geef van de rekeningen het gemiddelde bedrag dat bijgeschreven is (rekening_bij) waarvoor geldt dat het gemiddelde bedrag hoger is dan € 1000.

★ Aan de slag 42

  1. Je kunt rijen groeperen. Welk commando gebruik je daarvoor?
  2. Bekijk de volgende queries:

    SELECT COUNT(rekeninghdr_id) AS 'aantal rekeninghouders'
    FROM rekeninghouder
    WHERE plaats = 'Haarlem';


    SELECT COUNT(rekeninghdr_id) AS 'aantal rekeninghouders'
    FROM rekeninghouder
    WHERE plaats = 'Maastricht';


    Herschrijf deze queries tot één query.

★ Aan de slag 43

Voor deze opdrachten maken we gebruik van de SQL-tool database transacties.

Transacties
  1. Maak de volgende opdrachten
    1. Geef per woonplaats het adres van de rekeninghouders?
    2. Voor welke rekeningen (rekening_id) zijn meerdere passen uitgereikt?
       
  2. In welke woonplaats wonen meer dan 3 rekeninghouders?

 

★ Aan de slag 44

Voor deze opdrachten maken we gebruik van de SQL-tool cd-dvd database.

CD-DVD database
  1. Maak de volgende opdrachten
    1. Hoeveel leners hebben ooit een cd of dvd geleend? In de resultaattabel mogen geen dubbele leners meer voorkomen.
    2. Geef een overzicht van de adminnr's van leners die meer dan 3 keer iets hebben geleend.
       
  2. Maak de volgende opdrachten
    1. Maak een lijst van het aantal nummers per cd.
    2. Welke cd's hebben minder dan 10 nummers op de cd staan?
       
  3. SQL kent ook de BETWEEN-operator. Deze operator geeft aan dat een waarde een tussen twee grenzen ligt of precies een grenswaarde aanneemt.
    Bijvoorbeeld: bedrag BETWEEN 25 en 50.
    Maak een lijst van alle cd's die tussen de 4 en 8 nummers bevatten.

 

J Subqueries

Subqueries

De ING wil graag weten van welke type de oudste transactiedatum is. Deze vraag is niet zo makkelijk. Dit komt omdat je eigenlijk twee opdrachten moet uitvoeren om deze vraag te beantwoorden: Zoek de oudste transactiedatum en zoek uit wat voor type bij deze transactie hoort.

Het antwoord op het eerste deel van de vraag kun je vinden met de query:

SELECT MIN(datum)
FROM transactie;


 

Het resultaat van deze query is 2015-12-19.
Wanneer je dit antwoord hebt, is het tweede deel van de vraag niet zo moeilijk meer te beantwoorden:

SELECT type
FROM transactie
WHERE datum = '2015-12-19';



Deze twee queries kun je combineren tot een enkele query:

SELECT type
FROM transactie
WHERE datum = (SELECT MIN(datum)
                          FROM transactie);



In plaats van het resultaat van de eerste SELECT, 2015-12-19, is de hele SELECT-opdracht ingevuld, die dat resultaat oplevert. Dit wordt een subquery of subselect genoemd.

Er is een belangrijk verschil tussen de definitie van een subquery en een query: De SELECT-component van een subquery mag maar één expressie bevatten, omdat anders de subquery een tabel oplevert bestaande uit een aantal kolommen. Elke rij bevat dan meerdere waarden. Bij voorwaarden met een subquery wordt het resultaat vergeleken met een waarde uit één enkele kolom, bijvoorbeeld datum =
'2015-12-19'.

★ Aan de slag 45

Je hebt gelezen wat een subquery is.

  1. Leg in eigen woorden uit wat een subquery is.
  2. Noem een belangrijk verschil tussen een query en een subquery.
  3. Geef een voorbeeld van een subquery.
  4. Beschrijf wat je met deze query uit onderdeel c selecteert.

 

Subqueries - 2

In het voorbeeld van het type van de oudste transactiedatum komen de gegevens uit één tabel. Dit is natuurlijk niet altijd het geval. Wanneer we willen weten welke rekeninghouder het hoogste saldo op zijn rekening heeft staan, komen de gegevens uit twee tabellen: rekeninghouder en rekening. De vraag die beantwoord moet worden, bestaat wederom uit twee opdrachten: zoek de rekening met het hoogste saldo en kijk daarna van wie deze rekening is. Het antwoord op de eerste vraag wordt gevonden met de query:

SELECT MAX(saldo)
FROM rekening;


Omdat de tabel rekening geen namen van de rekeninghouders bevat, moeten we eerst de rekeninghdr_id zoeken van de rekeninghouder die het hoogste saldo op zijn/haar rekening heeft staan:

SELECT rekeninghdr_id
FROM rekening
WHERE saldo = (SELECT MAX(saldo)
                        FROM rekening);


Tenslotte moet de juiste naam of de juiste namen gezocht worden bij de rekeninghdr_id:

SELECT rekeninghouder
FROM rekeninghouder
WHERE rekeninghdr_id IN
           (SELECT rekeninghdr_id
            FROM rekening
            WHERE saldo = (SELECT MAX(saldo)
                           FROM rekening));


Je ziet dat in plaats van de =-operator de IN-operator wordt gebruikt. Het is mogelijk dat er meer rekeninghouders zijn die het hoogste saldo op hun rekening hebben staan.

Het resultaat van de subquery bestaat in dat geval uit een verzameling van namen. Je kunt de =operator dan niet gebruiken, omdat die eist dat wat er links en rechts van staat precies gelijk is. We moeten hier daarom gebruik maken van de IN-operator.

★ Aan de slag 46

Bekijk de volgende query:

SELECT bank
FROM bank
WHERE bank_id IN
     (SELECT bank_id
     FROM rekening
     WHERE saldo = (SELECT MIN(saldo)
                      FROM rekening));

  1. Het is lastig om deze query in één keer te doorgronden. Ontrafel deze queries in subqueries en beschrijf van iedere query afzonderlijk wat er gebeurt.
  2. Waarom wordt in de derde regel de IN-operator gebruikt en niet de = -operator?
  3. Beschrijf wat je uiteindelijk met deze query selecteert.

★ Aan de slag 47

Voor deze opdracht maken we gebruik van de SQL-tool database transacties.

Transacties
  1. Geef de rekeninghouder-id van de transactie van het hoogste geldbedrag dat is bijgeschreven op een rekening.
  2. Geef de namen van de rekeninghouders die bij de bank meerdere betaalpassen voor hun rekening hebben ontvangen.

★ Aan de slag 48

Hieronder staan twee queries:

SELECT rekeninghouder
FROM rekeninghouder
WHERE rekeninghdr_id IN
     (SELECT rekeninghdr_id
      FROM rekening
      WHERE saldo =
           (SELECT MAX(saldo)
            FROM rekening));

 

SELECT rekeninghouder
FROM rekeninghouder, rekening
WHERE rekeninghouder.rekeninghdr_id = rekening.rekeninghdr_id
AND saldo = (SELECT MAX(saldo)
FROM rekening);

 

  1. Wat is het resultaat van de eerste query?
  2. Wat is het resultaat van de tweede query?
  3. In de eerste query staat rekeninghdr_id IN en in de tweede query rekeninghouder.rekeninghdr_id = rekening.rekeninghdr_id. Leg uit waarom.

 

★ Aan de slag 49

Voor deze opdracht maken we gebruik van de SQL-tool cd-dvd database.

CD-DVD database
  1. Geef de voor- en achternaam van de lener die meer dan 3 keer iets heeft geleend.
  2. Geef het adminnr en de voor- en achternaam van leners die iets geleend hebben, maar dat nog niet hebben teruggebracht.

 

Subqueries - 3

Stel de ING wil een overzicht van rekeninghouders die nog nooit gebruik hebben gemaakt van een acceptgirokaart. Daarvoor moeten we de EXISTS-operator gebruiken:

SELECT transactie_id
FROM transactie
WHERE NOT EXISTS
           (SELECT *
             FROM transactie
             WHERE type = 'AC');

★ Aan de slag 50

Voor deze opdracht maken we gebruik van de SQL-tool database transacties.

Transacties
  1. Voer de query uit in de tool. Wat is het resultaat?
  2. Verwijder in de query het woordje NOT en voer de query nogmaals uit. Wat is nu het resultaat van het uitvoeren van de query en welke conclusie kun je daaraan verbinden?
  3. Leg aan de hand van het voorbeeld uit wat de EXISTS-operator doet.
  4. Geef de rekening_id's van de rekeningen waar ten minste twee keer een geldopname heeft plaatsgevonden.

★ Aan de slag 51

Voor deze opdracht maken we gebruik van de SQL-tool cd-dvd database.

CD-DVD database

Wie heeft nog nooit iets geleend?

K Gegevens bewerken

Inleiding

Tot nu toe heb je queries geschreven waarmee je gegevens uit een database kunt opvragen. In SQL bestaan er ook commando's waarmee je in een database gegevens kunt invoeren, bewerken of verwijderen.

Toevoegen

Voor het toevoegen van een rij aan een tabel maken we gebruik van de INSERT INTO-component:

Achter INSERT INTO wordt de naam van de tabel vermeld. Bij VALUES geef je aan welke waarden in de rij van de tabel moeten worden opgenomen. Let erop dat alfanumerieke waarden tussen aanhalingstekens moeten worden ingevoerd. Bij numerieke gegevens, dit zijn gegevens waarmee je kunt rekenen, gebeurt dit niet. Een datum wordt standaard tussen aanhalingstekens ingevoerd.

De bank wil in de tabel rekeninghouder een rekeninghouder toevoegen:

INSERT INTO rekeninghouder
VALUES (54,'Ralph Bosman', 'Chopinstraat 4', 'Amsterdam', '020-7787262');


De tabel rekeninghouder bestaat uit 5 kolommen:rekeninghdr_id, rekeninghouder, adres, plaats en telefoonnr. De kolom rekeninghdr_id bevat alle sleutels. Alle andere velden zijn van het type tekst.

Na het uitvoeren van de query is er een rekeninghouder toegevoegd. Aan de rechterkant van het scherm is te zien dat er nu 54 rekeninghouders staan in de tabel rekeninghouder. Dat waren er 53.

 

★ Aan de slag 52

Voor deze opdracht maken we gebruik van de SQL-tool database transacties.                                                               

Transacties

Neem de onderstaande query over in de tool en voer de query uit:

INSERT INTO rekeninghouder
VALUES (54,'Ralph Bosman', 'Chopinstraat 4', 'Amsterdam', '020-7787262');


Controleer of het aantal rekeninghouders inderdaad met 1 is toegenomen
.

 

Wijzigen

Bij het invoeren van de gegevens van de nieuwe rekeninghouder heeft de bank een fout gemaakt. Ralph Bosman woont niet op nummer 4, maar op nummer 44. Alle andere gegevens blijven hetzelfde. Dit betekent dat in de tabel rekeninghouder het adres zal moeten worden aangepast. In SQL kan daarvoor de opdracht UPDATE gegeven worden:

UPDATE rekeninghouder
SET adres = 'Chopinstraat 44'
WHERE rekeninghdr_id = 54;


 

★ Aan de slag 53

Voor deze opdracht maken we gebruik van de SQL-tool database transacties.

Transacties

In een eerdere opdracht hebben we geconstateerd dat van een rekeninghouder die van Goes naar Alkmaar was verhuisd, nog het oude telefoonnummer werd vermeld. We gaan dat nummer aanpassen. Het gaat om de rekeninghouder Joost Oosterhout waarvan de volgende gegevens bekend zijn:

rekeninghdr_id: 29
rekeninghouder: Joost Oosterhout
straat: Vermeerstraat 6
plaats Alkmaar
telefoonnummer: 0113-575758


Het nieuwe telefoonnummer van Joost Oosterhout wordt 072-9394516.

  1. Schrijf een query waarmee de gegevens van Joost worden aangepast en het nieuwe telefoonnummer in de tabel rekeninghouder komt te staan. Voer de query uit en kijk naar het resultaat.
  2. Voer nu de onderstaande query uit en controleer of het telefoonnummer inderdaad gewijzigd is:

    SELECT *
    FROM rekeninghouder
    WHERE rekeninghouder = 'Joost Oosterhout';

Verwijderen

We kunnen de zojuist toegevoegde rij ook weer verwijderen.
Voor het verwijderen van een rij wordt in SQL DELETE FROM gebruikt:

DELETE FROM rekeninghouder
WHERE rekeninghdr_id = 54;



Het is ook mogelijk om alle rijen uit de tabel rekeninghouder in één keer te verwijderen.
Daarvoor hoeft slechts de WHERE-component in de query weggelaten te worden.

De DELETE FROM-component verwijdert alleen de inhoud van een tabel.
Met DROP TABLE wordt behalve de complete inhoud ook de tabel zelf verwijderd:

DROP TABLE rekeninghouder;


 

In onze SQL-tool kunnen we de oorspronkelijke database herstellen door te klikken op de knop 'Database herstellen'.




Na het bevestigen van de opdracht bestaat de database transacties wederom uit 5 tabellen inclusief de tabel rekeninghouder.


 

★ Aan de slag 54

Voor deze opdracht maken we gebruik van de SQL-tool database transacties.

Transacties
  1. Verwijder de tabel bank uit de database transacties.
  2. Klik op Database herstellen om de oorspronkelijk te herstellen en kijk of de tabel bank weer zichtbaar is.

Toets 2

In de volgende toets wordt getoetst wat je inmiddels zou moeten weten over het onderwerp databases.

Maak de toets.

Databases

Voortgang

Bekijk hier je voortgang

Keuzedeel

 


Docent kan klassen aanmaken en leerlingen volgen
Een docent kan op de profielpagina klassen aanmaken. Als een docent dat gedaan heeft, kunnen de leerlingen zich aan de klas koppelen. Als de leerlingen dat gedaan hebben, kan de docent de voortgang van de leerlingen volgen.

>> Profielpagina

 

  • Het arrangement Module: Enigma - Databases is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Auteur
    VO-content
    Laatst gewijzigd
    2024-05-15 19:26:53
    Licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding-GelijkDelen 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding en publicatie onder dezelfde licentie vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding-GelijkDelen 4.0 Internationale licentie.

    Het thema 'Databases' is ontwikkeld door auteurs en medewerkers van Enigma-online. Fair Use In de modules van Enigma-online wordt gebruik gemaakt van beeld- en filmmateriaal dat beschikbaar is op internet. Bij het gebruik zijn we uitgegaan van fair use. Meer informatie: Fair use Mocht u vragen/opmerkingen hebben, neem dan contact op via de helpdesk VO-content.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Toelichting
    Deze module is onderdeel van de arrangeerbare leerlijn van de Stercollecties voor het keuzedeel van Informatica voor hv456. Gegevens, ook wel data genoemd, zijn (combinaties van) tekens of symbolen die niet voor iedereen betekenis hebben. Voor informatica zijn data en de opslag van data belangrijke onderwerpen. In deze keuzemodule ga je leren over verschillende soorten database systemen en leer je selecties maken uit verschillende databases. In ieder onderdeel vind je, verdeeld over verschillende pagina's, informatie in de vorm van teksten, afbeeldingen en video's. Daarnaast ga je zelf aan de slag met toepassingsopdrachten en toetsen. Van de toetsen wordt je voortgang bijgehouden en deze voortgang zal zowel door jou als je docent te bekijken zijn. Veel succes!
    Leerniveau
    HAVO 4; VWO 6; HAVO 5; VWO 4; VWO 5;
    Leerinhoud en doelen
    Informatica;
    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
    Trefwoorden
    arrangeerbaar, data, databasemanagement, databases, enigma-databases, hv456, informatica, keuzedeel, stercollectie, tabellen

    Gebruikte Wikiwijs Arrangementen

    Leermateriaal, StudioVO. (2019).

    Databases

    https://maken.wikiwijs.nl/100748/Databases