Database 1 en 2

Sta ik rustig op de trein te wachten, wordt ik bestookt met vragen over database, waarvan de herkansing morgen ochtend is. De wildgroei aan bronnen is in grote getalen aanwezig en dus dacht ik, ik voeg ook wat toe aan die pioniersvegetatie van dit database-ecosysteem. Begonnen onderweg op de telefoon en verder gegaan thuis.

Morgen zijn de twee database tentamens. De ene is de herkansing van database 1 (SQL) en daarna in de middag database 2 (Triggers, views en Stored Procedures). In de onderstaande blog zal ik wat belangrijke onderdelen zetten waar aan geadcht kan worden. Wie weet helpt het. Al is het maar een extra vraag die zo opgelost kan worden, dan ben ik al blij(er) ;).

Database 1 – SQL

Voor deze herkansing is denk ik voornamelijk de syntax van SQL belangrijk – gezien het daar om draait. De SELECT bijvoorbeeld en die in combinatie met de JOIN en de UNION (ja, is deel van de leerstof).

De Wat, Waar, Wie

Als we kijken naar de SELECT, dan kan je die onderverdelen in drie hoofdonderdelen, de wat, waar en wie. De WAT beschrijft wat je wilt weten, de WAAR waar je het vandaan gaat halen en de WIE eventueel van wie je wat precies wilt hebben. SELECT [WAT] FROM [WAAR] WHERE [WIE].

Ik wil uit de klas met studenten alle namen van de roodharige hebben met groene ogen. Dus mijn WAT is NAAM, mijn WAAR is STUDENT en mijn WIE is KLEURHAAR = ROOD EN KELUROGEN = GROEN. Als we dat omzetten in de SELECT wordt dat SELECT naam FROM student WHERE kleurhaar=”rood” AND kleurogen=”groen”.

Als we dan gaan kijken hoe we van meer tabellen info kunnen krijgen, dan gebruiken we een join. Die hebben we in twee smaken, de natural join en de gewone join. Beide komen in de FROM voor. Het verschil? Het woord JOIN.

We kijken hierbij naar de primary- en de foreingn keys. Foreign key zegt het al, een soort buitenlandse sleutel. Deze komt dus ergens anders vandaan. De primary key is de hoofdsleutel. De foreign key komt van deze hoofdsleutel en verwijst er dus ook naar. Beide hebben dan dezelfde waarde als ze moeten matchen.

De natural join:

SELECT naam
FROM Studenten, Klas
WHERE Klas.Id = Studenten.KlasId
AND (kleurhaar = "rood" AND kleurogen = "groen")

De join:

SELECT naam
FROM Studenten
JOIN Klas ON Klas.Id = Studenten.KlasId
WHERE kleurhaar="rood" and kleurogen="groen"

Dit zijn de grote verschillen tussen de joins.

De joins verbinden dus twee tabellen die verschillend zijn. Maar je kan ook twee dezelfde tabellen met elkaar verbinden. We hebben het hier over tabellen, maar een tabel is niets anders dan een set met records (rijen) met een aantal kolommen. Eigenlijk is een SELECT query dat ook, een set met rijen en klommen. Die kunnen we dan ook samenvoegen met een UNION als deze dezelfde zijn.

UNION

Ik wil weer de namen van de studenten weten, maar nu heb ik meerder tabellen voor elke klas; Klas1A en Klas1B. Ik wil uit beide klassen de namen hebben en kan dat doen door die UNION.

SELECT naam
FROM Studenten, Klas1A
WHERE Klas.Id = Studenten.KlasId
AND (kleurhaar = "rood" AND kleurogen = "groen")

UNION

SELECT naam
FROM Studenten, Klas1B
WHERE Klas.Id = Studenten.KlasId
AND (kleurhaar = "rood" AND kleurogen = "groen")

Het resultaat? Misschien dit:

Naam
-----------
Bert
Ernie
Inimini
Koekie M
Grovert
Pino
-----------

Omdat mijn kolommen dezelfde zijn (namelijk naam) kan ik de twee gewoon toevoegen. Nu wil ik wel weten uit welke klas de studenten komen. Ik wil er dus eigenlijk een extra kolom aan toevoegen, maar de naam van de klas heb ik niet in de tabel staan. Dan voeg ik er gewoon een eigen veld in de SELECT aan toe.

SELECT naam, 'Klas1A' AS KlasNaam
FROM Studenten, Klas1A
WHERE Klas.Id = Studenten.KlasId
AND (kleurhaar = "rood" AND kleurogen = "groen")

UNION

SELECT naam, 'Klas1B' AS KlasNaam
FROM Studenten, Klas1B
WHERE Klas.Id = Studenten.KlasId
AND (kleurhaar = "rood" AND kleurogen = "groen")

Op deze manier kan ik dus ook zien uit welke klas de studenten komen. Mijn resultaat zou het volgende voorbeeld kunnen zijn:

Naam       | KlasNaam
-----------------------
Bert       | Klas1A
Ernie      | Klas1A
Inimini   | Klas1A
Koekie M   | Klas1B
Grovert    | Klas1B
Pino       | Klas1B
-----------------------

Door het gebruik van de alias krijgt mij kolomnaam ook een duidelijkere naam, namelijk KlasNaam.

Het vak gaat verder ook in op DELETE, UPDATE, INSERT en CREATE van tabellen. Dit ga ik nu niet behandelen. Ik denk dat als je de SELECT snapt dat je dan ook in staat bent om op W3Schools.com de syntax van de andere statements op te zoeken. Het is dan alleen een kwestie van opsplitsen van het commando en net als de SELECT deze toe te passen.

Vergeet ook niet te kijken naar ORDER BY en GROUP BY waarbij de ORDER BY wordt gebruikt om te sorteren en de GROUP BY om te groeperen. Door een HAVING aan de GROUP BY toe te voegen kan je ook een WIE gebruiken per groep.

Database 2 – Triggers, Views en Stored procedures

Voor het vak Database 2, gaan we verder in op triggers, views en stored procedures. Eigenlijk is dat niets anders dan programmeren voor de database. De taal is SQL. De queries van hierboven kunnen worden vergeleken met adhoc commando’s die je naar de database stuurt en resultaat verwacht. Je kan echter ook een stuk programmeren (bijvoorbeeld een querie maken) en deze opslaan in de database zodat je deze vaker kan gebruiken.

Stored procedures

De stored procedures zijn te vergelijken met methodes die kunnen worden aangeroepen vanuit je query. Hierin kunnen complexe queries voorkomen. Misschien zelfs met variables, loopjes en if’s. Om deze code te kunnen hergebruiken kan je twee dingen doen. Je kan het of opslaan in een TXT bestand en elke keer copy-pasten naar je uitvoerscherm, of je kan het opslaan in de database. Opslaan (store) die procedure (stored procedure)!

Triggers

Triggers zijn events die zich voordoen als bepaalde acties worden gedaan op een tabel. Bijvoorbeeld een INSERT. Een trigger wordt dan getriggerd en kan op zijn beurt een strored procedure afvuren. Eentrigger kan ook worden afgeschoten voordat een actie plaats vindt. Dus als iemand een INSERT wil uitvoeren, dan wordt eerst de trigger uitgevoerd en dan pas de INSERT zelf. Dit kan door het keyword BERFORE te gebruiken.

Views

Views zijn eigenlijk SELECT queries die als zodanig worden opgeslagen in de database alsof het een tabel is. Het is dus eigenlijk een soort virtuele tabel. Dit kan sommige joins vergemakkelijken en kan handig zijn voor hergebruik.

Wanneer gebruik je nou een stored procedure en wanneer een view?

Omdat een stored procedure heel complex kan zijn (kan je zo maken) worden de SP’s meestal gebruikt als methodes, bijvoorbeeld InsertAlleenDeStudentMetRoodHaar(Naam AS VARCHAR(25), KleurHaar AS VARCHAR(10), KleurOgen AS VARCHAR(10)). In de SP zit een check of het haar wel rood is, zo ja, dan wordt een INSERT uitgevoerd, zo nee, dan niet.

Een view wordt eigenlijk alleen gebruikt om informatie te laten zien. Dus echt als een virtuele tabel. Een complexe SELECT kan je dus ook opslaan in een VIEW en daar weer een SELECT op uitvoeren zoals je met elke andere tabel zou doen. Bijvoorbeeld SELECT * FROM ComplexeViewMetEigenSelectQuery WHERE haarkleur=”rood”.

Een trigger wordt alleen gebruikt als je perse wilt dat er een actie automatisch wordt ondernomen als er een actie plaats vindt op een tabel. Dus bijvoorbeeld nadat ik een student toevoeg aan een klas, dan moet er ook een agenda punt worden aangemaakt met dat de student moet worden geemailt bijvoorbeeld in de tabel WELKESTUDENTENMOETENWENOGEMAILEN.

Ik hoop dat ik het hier een daar iest duidelijker heb kunnen uitleggen. Zo niet, succes morgen!!! :D

Meer info:

  2 comments for “Database 1 en 2

  1. 17 april 2012 at 20:05

    Strakke herhaling :)

  2. sam
    23 juni 2014 at 12:03

    jo swa deze shit is tight! hiermee djoek ik die toetsoe

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

Zoals de meeste websites gebruiken we cookies om een meer persoonlijke en snelle service te bieden.

Wij gebruiken cookies zodat onze website meer efficiënt kan functioneren, om de prestaties te verbeteren en, eventueel, om op maat reclame van onze partners aan te bieden. Als u doorgaat gaan we ervan uit dat u akkoord gaat alle cookies te krijgen van onze website.

To accept cookies please Click To Continue