SELECT

Op deze pagina:

De SELECT opdracht wordt gebruikt om gegevens op te vragen uit een database. Het resultaat wordt opgeslagen in een result tabel, die result-set wordt genoemd.

Algemene vorm:


SELECT kolom1, kolom2, ...
FROM tabelnaam;

Hier zijn kolom1, kolom2, ... de veldnamen van de tabel waar je de gegevens van wil opvragen. Als je alle velden wil selecteren die in de tabel staan, dan kun je de "*" wildcard (sterretje) gebruiken:


SELECT * FROM tabelnaam; 

Deze SQL opdracht selecteert de "Klantnaam" en "Stad" kolommen van de "Klanten" tabel:


SELECT Klantnaam, Stad FROM Klanten;

Deze SQL opdracht selecteert alle kolommen van de "Klanten" tabel:


SELECT * FROM Klanten;

SELECT DISTINCT

De SELECT DISTINCT opdracht wordt gebruikt om alleen verschillende waarden terug te geven.

Een kolom in een tabel kan vaak dubbele waarden bevatten, maar soms wil je wil je elke voorkomende waarde slechts één keer zien.

Algemene vorm:


SELECT DISTINCT kolom1, kolom2, ...
FROM tabelnaam;

WHERE

Met WHERE kun je gegevens filteren die aan een bepaalde voorwaarde voldoen.

Algemene vorm:


SELECT kolom1, kolom2, ...
FROM tabelnaam
WHERE voorwaarde;

Voorbeeld:


--Alleen klanten uit Mexico

SELECT * FROM Klanten
WHERE Land='Mexico';

SQL vereist enkele aanhalingstekens rond tekst waarden (dubbele aanhalingstekens zijn vaak ook toegestaan).

Numerieke waarden moeten juist niet tussen aanhalingstekens staan:

Voorbeeld:


SELECT * FROM Klanten
WHERE KlantID=1;

Operators die met WHERE gebruikt kunnen worden:

De voor de hand liggende: =, >, <, >=, en <=.

Ongelijk aan is meestal <> en in sommige versies van SQL is dit !=.

Daarnaast zijn er nog:

BETWEEN
Een range opgeven
LIKE
Met een patroon zoeken
IN
Meerdere mogelijke waarden specificeren voor een kolom

Voorwaarden kunnen gecombineerd worden met AND, OR en NOT.

AND algemene vorm:


SELECT kolom1, kolom2, ...
FROM tabelnaam
WHERE voorwaarde1 AND voorwaarde2 AND voorwaarde3 ...;

AND voorbeeld:


SELECT * FROM Klanten
WHERE Land='Duitsland' AND Stad='Berlijn';

OR algemene vorm:


SELECT kolom1, kolom2, ...
FROM tabelnaam
WHERE voorwaarde1 OR voorwaarde2 OR voorwaarde3 ...;

OR voorbeeld:


SELECT * FROM Klanten
WHERE Stad='Berlin' OR Stad='Frankfurt';

NOT algemene vorm:


SELECT kolom1, kolom2, ...
FROM tabelnaam
WHERE NOT voorwaarde;

NOT voorbeeld:


SELECT * FROM Klanten
WHERE NOT Land='Duitsland';

AND, OR en NOT zijn ook te combineren.

Voorbeelden:


SELECT * FROM Klanten
WHERE Land='Duitsland' AND (Stad='Berlin' OR Stad='Frankfurt');

SELECT * FROM Klanten
WHERE NOT Land='Duitsland' AND NOT Land='USA';

ORDER BY

Met ORDER BY kan je het resultaat sorteren, dat kan zowel oplopend als aflopend gebeuren. Standaard wordt er van laag naar hoog gesorteerd, maar door toevoeging van DESC kan er ook andersom worden gesorteerd.

ORDER BY algemene vorm:


SELECT kolom1, kolom2, ...
FROM tabelnaam
ORDER BY kolom1, kolom2, ... ASC|DESC;

Voorbeelden:


-- sorteren van A naar Z
SELECT * FROM Klanten
ORDER BY Land;

-- sorteren van Z naar A
SELECT * FROM Klanten
ORDER BY Land DESC; 

-- sorteren op meerdere kolommen
SELECT * FROM Klanten
ORDER BY Land, Klantnaam;

-- sorteren Land oplopend, Klantnaam aflopend
SELECT * FROM Klanten
ORDER BY Land ASC, Klantnaam DESC; 

IS (NOT) NULL

NULL is geen nul, maar geen waarde, een lege record in een database. Er staat niets, ook geen nul of spaties.

Je kunt niet testen op NULL waarden met vergelijkingsoperatoren als =, < of <>, maar dit moet je doen met IS NULL en IS NOT NULL.

IS NULL algemene vorm:


SELECT kolomnamen
FROM tabelnaam
WHERE kolomnaam IS NULL;

IS NULL voorbeeld:


SELECT Klantnaam, Contactnaam, Adres
FROM Klanten
WHERE Adres IS NULL;

IS NOT NULL algemene vorm:


SELECT kolomnamen
FROM tabelnaam
WHERE kolomnaam IS NOT NULL;

IS NOT NULL voorbeeld:


SELECT Klantnaam, Contactnaam, Adres
FROM Klanten
WHERE Adres IS NOT NULL;

SELECT TOP

SELECT TOP wordt gebruikt om het aantal records dat wordt teruggegeven aan te geven. Dit is nuttig als de resultaten heel veel records bevatten en je niet (meteen) alles terug wil hebben, bijvoorbeeld in verband met de performance. Niet alle database systemen gebruiken dit op dezelfde manier.

SQL Server / MS Access algemene vorm:


SELECT TOP number|percent kolomnaam(s)
FROM tabelnaam
WHERE voorwaarde;

voorbeeld:


SELECT TOP 3 * FROM Klanten;

-- met percentage:
SELECT TOP 50 PERCENT * FROM Klanten;

-- met WHERE:
SELECT TOP 3 * FROM Klanten
WHERE Land='Duitsland';

Sybase ASA algemene vorm:


SELECT TOP number kolomnaam(s)
FROM tabelnaam
WHERE voorwaarde;

Voorbeeld:


SELECT TOP 3 * FROM Klanten;

-- met WHERE:
SELECT TOP 3 * FROM Klanten
WHERE Land='Duitsland';

MySQL / PostgreSQL algemene vorm:


SELECT kolomnaam(s)
FROM tabelnaam
WHERE voorwaarde
LIMIT number;

Voorbeeld:


SELECT * FROM Klanten
LIMIT 3;

-- met WHERE:
SELECT * FROM Klanten
WHERE Land='Duitsland'
LIMIT 3; 

Oracle algemene vorm:


SELECT kolomnaam(s)
FROM tabelnaam
WHERE ROWNUM <= number;

Voorbeeld:


SELECT * FROM Klanten
WHERE ROWNUM <= 3;

-- met WHERE:
SELECT * FROM Klanten
WHERE Land='Duitsland' AND ROWNUM <= 3;

SELECT MIN()

De MIN() functie geeft de laagste waarde uit een kolom.

MIN() algemene vorm:


SELECT MIN(kolomnaam)
FROM tabelnaam
WHERE voorwaarde;

MIN() voorbeeld:


SELECT MIN(Prijs) AS LaagstePrijs
FROM Producten;

SELECT MAX()

De MAX() functie geeft de hoogste waarde uit een kolom.

MAX() algemene vorm:


SELECT MAX(kolomnaam)
FROM tabelnaam
WHERE voorwaarde;

MAX() voorbeeld:


SELECT MAX(Prijs) AS HoogstePrijs
FROM Producten; 

SELECT COUNT()

De COUNT() functie geeft het aantal rijen die voldoen aan de opgegeven criteria. NULL waarden worden niet meegeteld.

COUNT() algemene vorm:


SELECT COUNT(kolomnaam)
FROM tabelnaam
WHERE voorwaarde;

COUNT() voorbeeld:


SELECT COUNT(ProductID)
FROM Producten;

SELECT AVG()

De AVG() functie geeft het gemiddelde van de waarden uit een numerieke kolom. NULL waarden worden overgeslagen.

AVG() algemene vorm:


SELECT AVG(kolomnaam)
FROM tabelnaam
WHERE voorwaarde;

AVG() voorbeeld:


SELECT AVG(Prijs)
FROM Producten;

SELECT SUM()

De SUM() functie geeft het totaal van de optelling van de waarden uit een numerieke kolom. NULL waarden worden overgeslagen.

SUM() algemene vorm:


SELECT SUM(kolomnaam)
FROM tabelnaam
WHERE voorwaarde;

SUM() voorbeeld:


SELECT SUM(Hoeveelheid)
FROM OrderDetails; 

WHERE ... IN ...

Met IN kan je meerdere voorwaarden gebruiken in een WHERE.

IN algemene vorm:


SELECT kolomnaam1, kolomnaam2, ...
FROM tabelnaam
WHERE kolomnaam1 IN (waarde1, waarde2, ...); 
--of:
SELECT kolomnaam1, kolomnaam2, ...
FROM tabelnaam
WHERE kolomnaam1 IN (SELECT STATEMENT);

Voorbeelden:


--Klanten in "Duitsland", "Frankrijk" of "UK":
SELECT * FROM Klanten
WHERE Land IN ('Duitsland', 'Frankrijk', 'UK'); 

--Klanten niet in "Duitsland", "Frankrijk" of "UK":
SELECT * FROM Klanten
WHERE Land NOT IN ('Duitsland', 'Frankrijk', 'UK'); 

--Klanten die hetzelfde Land hebben als de Leveranciers:
SELECT * FROM Klanten
WHERE Land IN (SELECT Land FROM Leveranciers);

WHERE ... BETWEEN ... AND ...

Met BETWEEN kan je een selctie maken die tussen bepaalde waarden ligt. Deze waarden kunnen getallen, tekst of datums zijn. BETWEEN is inclusief: de begin en eindwaarden worden meegenomen.

BETWEEN algemene vorm:


SELECT kolomnaam1, kolomnaam2, ...
FROM tabelnaam
WHERE kolomnaam1 BETWEEN waarde1 AND waarde2;

BETWEEN voorbeeld:


--Producten met een prijs tussen 10 en 20:
SELECT * FROM Producten
WHERE Prijs BETWEEN 10 AND 20;

NOT BETWEEN voorbeeld:


--Producten die een Prijs hebben die niet tussen 10 en 20 ligt:
SELECT * FROM Producten
WHERE Prijs NOT BETWEEN 10 AND 20;

BETWEEN IN voorbeeld:


--Producten met een Prijs tussen 10 en 20, maar die geen CategorieID hebben van 1, 2 of 3:
SELECT * FROM Producten
WHERE Prijs BETWEEN 10 AND 20
AND CategorieID NOT IN (1,2,3);

BETWEEN Tekstwaarden voorbeeld:


--Producten met een Productnaam tussen 
--'iPad' en 'Smartwatch' gesorteerd op Productnaam:
SELECT * FROM Producten
WHERE Productnaam BETWEEN 'iPad' AND 'Smartwatch'
ORDER BY Productnaam; 

NOT BETWEEN Tekstwaarden voorbeeld:


--Producten met een Productenaam niet tussen
--'iPad' en 'Smartwatch' gesorteerd op Productnaam:
SELECT * FROM Producten
WHERE Productnaam NOT BETWEEN 'iPad' AND 'Smartwatch'
ORDER BY Productnaam;

BETWEEN Dates voorbeeld:


--Orders met een OrderDatum tussen 1 juli 2020' en 31 juli 2020:
<?php /*SELECT * FROM Orders
WHERE OrderDatum BETWEEN #01/07/2020# AND #31/07/2020#; 
--Of:*/?>
SELECT * FROM Orders
WHERE OrderDatum BETWEEN '2020-07-01' AND '2020-07-31';

SQL Aliassen

Kolommen en tabellen kun je een tijdelijke naam geven voor de duur van de query. Zo'n naam heet een alias.

Aliassen maken query's leesbaarder.

Alias kolom algemene vorm:


SELECT kolomnaam AS aliasnaam
FROM tabelnaam;

Alias kolom voorbeelden:


SELECT 
KlantID AS ID, 
Klantnaam AS Klant
FROM Klanten;

--Gebruik vierkante haken of dubbele 
--aanhalingtekens als de alias spaties bevat:
SELECT 
Klantnaam AS Klant, 
Contactnaam AS [Persoonlijk Contact]
FROM Klanten;

--Velden combineren:
SELECT
Klantnaam, 
Adres + ', ' + Postcode + ' ' + Stad + ', ' + Land AS Adres
FROM Klanten; 
--In MySQL en PostgreSQL moet dit zijn:
SELECT
Klantnaam, 
CONCAT(Adres,', ',Postcode,', ',Stad,', ',Land) AS Adres
FROM Klanten;

Alias tabel algemene vorm:


SELECT kolomnaam1, kolomnaam2, ...
FROM tabelnaam AS aliasnaam;

Alias tabel voorbeeld:


SELECT
o.OrderID, 
o.OrderDatum, 
k.Klantnaam
FROM
Klanten AS k, 
Orders AS o
WHERE k.Klantnaam='Albert de Vries' 
AND k.KlantID=o.KlantID;

--hetzelfde, maar nu zonder aliassen:

SELECT
Orders.OrderID, 
Orders.OrderDatum, 
Klanten.Klantnaam
FROM
Klanten, 
Orders
WHERE Klanten.Klantnaam='Albert de Vries' 
AND Klanten.KlantID=Orders.KlantID; 

GROUP BY

Met Group By worden rijen met gelijke waarden gegroepeerd in verzamelrijen, zoals "het aantal klanten per land". GROUP BY wordt vaak samen gebruikt met opsommingsfuncties (COUNT, MAX, MIN, SUM, AVG) om het resultaat te groeperen in één of meer kolommen.

GROUP BY algemene vorm:


SELECT kolomnamen
FROM tabelnaam
WHERE voorwaarde
GROUP BY kolomnamen
ORDER BY kolomnamen; 

SQL GROUP BY voorbeelden:


--Het aantal klanten per land:
SELECT COUNT(KlantID), Land
FROM Klanten
GROUP BY Land;

--Het aantal klanten per land, 
--gesorteerd van hoog naar laag:
SELECT COUNT(KlantID), Land
FROM Klanten
GROUP BY Land
ORDER BY COUNT(KlantID) DESC; 

GROUP BY met JOIN voorbeeld:


--Het aantal orders per transporteur:
SELECT 
Transporteurs.TransporteurNaam, 
COUNT(Orders.OrderID) AS AantalOrders 
FROM Orders
LEFT JOIN Transporteurs ON Orders.TransporteurID = Transporteurs.TransporteurID
GROUP BY TransporteurNaam;

HAVING

HAVING is toegevoegd aan SQL omdat WHERE niet gebruikt kan worden met opsommingsfuncties.

HAVING algemene vorm:


SELECT kolomnamen
FROM tabelnaam
WHERE voorwaarde
GROUP BY kolomnamen
HAVING voorwaarde
ORDER BY kolomnamen; 

HAVING voorbeelden:


--Het aantal klanten per land, 
--alleen landen met meer als 5 klanten:
SELECT COUNT(KlantID), Land
FROM Klanten
GROUP BY Land
HAVING COUNT(KlantID) > 5; 

--het aantal klanten per land, 
--gesorteerd van hoog naar laag, 
--alleen landen met meer als 5 klanten:
SELECT COUNT(KlantID), Land
FROM Klanten
GROUP BY Land
HAVING COUNT(KlantID) > 5
ORDER BY COUNT(KlantID) DESC; 

--Medewerkers met meer als 10 orders:
SELECT 
Medewerkers.Achternaam, 
COUNT(Orders.OrderID) AS AantalOrders
FROM (Orders
INNER JOIN Medewerkers ON Orders.MedewerkerID = Medewerkers.MedewerkerID)
GROUP BY Achternaam
HAVING COUNT(Orders.OrderID) > 10; 

--Medewerkers "Jansen" en "Smit" indien 
--ze meer als 25 orders hebben:
SELECT 
Medewerkers.Achternaam, 
COUNT(Orders.OrderID) AS AantalOrders
FROM Orders
INNER JOIN Medewerkers ON Orders.MedewerkerID = Medewerkers.MedewerkerID
WHERE Achternaam = 'Jansen' OR Achternaam = 'Smit'
GROUP BY Achternaam
HAVING COUNT(Orders.OrderID) > 25;

WHERE EXISTS

Met EXISTS kan getest worden of iets bestaat. Het resultaat is "true" of "false". Er wordt "true" teruggegeven indien er tenminste één record wordt gevonden.

EXISTS algemene vorm:


SELECT kolomnamen
FROM tabelnaam
WHERE EXISTS
(SELECT kolomnaam FROM tabelnaam WHERE voorwaarde); 

SQL EXISTS voorbeelden:


--Leveranciers indien zij producten 
--hebben met een prijs lager als 20:
SELECT Leveranciernaam
FROM Leveranciers
WHERE EXISTS (SELECT Productnaam FROM Producten WHERE Producten.LeverancierID = Leveranciers.LeverancierID AND Prijs < 20);

--Leveranciers die producten 
--hebben met een prijs die 20 is:
SELECT Leveranciernaam
FROM Leveranciers
WHERE EXISTS (SELECT Productnaam FROM Producten WHERE Producten.LeverancierID = Leveranciers.LeverancierID AND Prijs = 20);

ANY / ALL

ANY en ALL kan je gebruiken met WHERE of HAVING.ANY geeft "true" als tenminste één van de resultaten van de subquery aan de voorwaarde voldoet.ALL geeft "true" als elk resultaat van de subquery aan de voorwaarde voldoet.

ANY algemene vorm:


SELECT kolomnamen
FROM tabelnaam
WHERE kolomnaam <operator> ANY
(SELECT kolomnaam FROM tabelnaam WHERE voorwaarde);

--operator kan zijn: =, <>, !=, >, >=, < of <=

SQL ANY voorbeelden:


--Productnamen indien er tenminste één 
--product is waarvan de hoeveelheid 10 is:
SELECT Productnaam
FROM Producten
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Hoeveelheid = 10);

--Productnamen indien er tenminste één
--product is met een hoeveelheid groter als 99
SELECT Productnaam
FROM Producten
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Hoeveelheid > 99); 

ALL algemene vorm:


SELECT kolomnamen
FROM tabelnaam
WHERE kolomnaam <operator> ALL
(SELECT kolomnaam FROM tabelnaam WHERE voorwaarde);

--operator kan zijn: =, <>, !=, >, >=, < of <=

SQL ALL voorbeeld:


--Productennamen indien alle 
--producten een hoeveelheid van 
--10 hebben, anders niets
SELECT Productnaam
FROM Producten
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Hoeveelheid = 10);

 

Verwante artikelen