web2 logo

Artikel Links Notities

SELECT

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 kan 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 kan 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: SELECT * FROM Orders WHERE OrderDatum BETWEEN '2020-07-01' AND '2020-07-31';

SQL Aliassen

Kolommen en tabellen kan 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);

naar boven

term zoeken

Notitieruimte