Lezing databases en sql



Dovnload 146.79 Kb.
Pagina7/8
Datum20.08.2016
Grootte146.79 Kb.
1   2   3   4   5   6   7   8

2.8.2 Gegevens filteren


Binnen de instructie SELECT worden gegevens gefilterd door met WHERE specifieke zoekcriteria op te geven. De component komt meteen na de tabelnaam.


SELECT *

FROM Klant

WHERE Naam = "Tiemens";


(SelectQuery4 in Boekenwinkel.mdb)
Het resultaat van deze instructie bevat alle kolommen uit de tabel Klant. Niet alle rijen worden opgevraagd, maar alleen de rijen waarvan de inhoud van het veld Naam gelijk is aan “Tiemens”.


SELECT *

FROM Klant

WHERE Naam = "Tiemens" AND Plaats = "Zevenaar";


(SelectQuery5 in Boekenwinkel.mdb)
Deze instructie is gelijk aan de vorige, maar is uitgebreid met de operator AND.

Het DBMS zal nu alleen de rijen tonen die aan beide voorwaarden voldoen.


Onderstaand zijn alle operatoren weergegeven die bij component WHERE gebruikt kunnen worden:


Operator

Beschrijving

=

Gelijk aan

<>

Ongelijk aan

!=

Ongelijk aan

<

Kleiner dan

<=

Kleiner dan of gelijk aan

!<

Niet kleiner dan

>

Groter dan

>=

Groter dan of gelijk aan

!>

Niet groter dan

BETWEEN

Tussen twee opgegeven waarden

IS NULL*

Heeft de waarde NULL







AND




OR




IN




NOT




LIKE



*Let op: NULL betekent geen waarde hebben. Dat is dus iets anders als een veld die de waarde 0 heeft!



2.8.3 Gegevens uit meerdere tabellen selecteren


Een van de meest krachtige kenmerken van SQL is het vermogen om tabellen samen te voegen terwijl er gegevens worden opgevraagd. Het samenvoegen van tabellen wordt ook wel een join genoemd.
Het is heel eenvoudig om een join te creëren. U moet alle te gebruiken tabellen opsommen en opgeven hoe ze met elkaar in verband staan.

SELECT Naam, Adres, Postcode, Plaats, BoekID, Datum_bestelling, Datum_geleverd

FROM Klant, Bestelling

WHERE Klant.KlantID = Bestelling.KlantID;


(QueryTabellenKoppelen1 in Boekenwinkel.mdb)
De SELECT-instructie begint op dezelfde manier als de instructies die u tot dusver gewend was, namelijk met een opsomming van de kolommen die moeten worden opgehaald. Het verschil is dat de opgevraagde kolommen nu uit twee verschillende tabellen komen, te weten Klant en Bestelling. Achter de FROM-component zijn de tabellen weergegeven, gescheiden door een komma.

De twee tabellen worden samengevoegd door middel van de WHERE-component, waarin de KlantID uit de tabel Klant wordt vergeleken met de KlantID uit de tabel Bestelling. De gebruikte kolomnamen zijn hier Klant.KlantID en Bestelling.KlantID. U moet hier de volledige kolomnaam gebruiken, omdat het DBMS anders niet weet naar welke kolom KlantId verwijst.


Het lijkt vreemd dat er een WHERE-component nodig is om de tabellen samen te voegen, maar dit heeft een goede reden. Tabellen worden tijdens de uitvoering van een SELECT-instructie samengevoegd. Er staat niets in de definities van de databasetabellen waardoor het DBMS kan weten hoe het tabellen moet samenvoegen. U moet dit zelf doen. Als u twee tabellen samenvoegt, vergelijkt u eigenlijk elke rij in de eerste tabel met elke rij in de tweede tabel. De WHERE-component fungeert als filter om alleen die rijen op te halen die aan een bepaalde voorwaarde voldoen, in dit geval de joinvoorwaarde.
Het resultaat van een join tussen twee tabellen waarbij geen voorwaarde is gesteld, levert een zogenaamd cartesisch product op. Het aantal opgehaalde rijen is het aantal rijen in de eerste tabel vermenigvuldigd met het aantal rijen in de tweede tabel.


SELECT Naam, Adres, Postcode, Plaats, BoekID, Datum_bestelling, Datum_geleverd

FROM Klant, Bestelling;



(QueryCartesischProduct in Boekenwinkel.mdb)
Het soort join dat een cartesisch product oplevert, wordt ook wel een cross-join genoemd.
De join die u hiervoor hebt gezien, wordt een EQUI-JOIN genoemd, een join die gebaseerd is op een vergelijking tussen twee tabellen. Deze join wordt ook wel INNER-JOIN genoemd. In sommige DBMS’en, waaronder MS Access, ziet de syntaxis voor dit soort joins er iets anders uit. Zie het volgende voorbeeld:


SELECT Naam, Adres, Postcode, BoekID, Datum_bestelling, Datum_geleverd

FROM Klant INNER JOIN Bestelling

ON Klant.KlantId = Bestelling.KlantID;


(QueryInnerJoinCorrect in Boekenwinkel.mdb)
Deze SELECT-instructie ziet er hetzelfde uit als de vorige, maar de FROM-component is anders. De relatie tussen de twee tabellen wordt in deze component aangeduid met het sleutelwoord INNER JOIN. Met deze syntaxis wordt de joinvoorwaarde gegeven met behulp van de speciale component ON. De voorwaarde die aan ON wordt doorgegeven is dezelfde als anders aan WHERE zou worden doorgegeven.
Uiteraard kunt u ook meerdere tabellen koppelen en daar bovendien extra voorwaarden aan verbinden. Een voorbeeld.


SELECT Naam, Adres, Postcode, Titel, Schrijver, Datum_bestelling, Datum_geleverd

FROM Klant, Bestelling, Boek

WHERE Klant.KlantId = Bestelling.KlantID

AND Bestelling.BoekID = Boek.BoekID AND Postcode = "6901NJ";



(QueryTabellenKoppelen2 in Boekenwinkel.mdb)




1   2   3   4   5   6   7   8


De database wordt beschermd door het auteursrecht ©opleid.info 2019
stuur bericht

    Hoofdpagina