Wat is SQL?
SQL, voluit Structured Query Language, is een krachtige tool om grote hoeveelheden data in databases te doorzoeken en specifieke informatie voor analyse terug te geven. SQL leren is basiskennis voor iedereen die met data aan de slag wil, of het nu gaat om business-analisten, data-analisten, data scientists of data engineers.
In deze tutorial leer je 25 van de meest voorkomende SQL-commando’s kennen—genoeg voor het merendeel van je databasetaken.
SQL-commando’s met voorbeelden
Voorbeeldtabel
In deze tutorial gebruiken we de tabellen films en soundtracks.
|
films |
|||||
|
movie_name |
director |
revenue |
date |
genre |
language |
|
Avengers: Age of Ultron |
J. Whedon |
1400000000 |
2015 |
Action |
English |
|
Amelie |
Jean-Pierre Jeunet |
174000000 |
2002 |
Drama |
French |
|
soundtracks |
||
|
soundtrack |
composer |
date |
|
Inception: Music from the Motion Picture |
Hans Zimmer |
2010 |
|
Le Fabuleux Destin D’Amelie Poulain |
Yann Tiersen |
2001 |
1. SELECT
De SELECT-instructie gebruik je om aan te geven welke kolommen van een databasetabel in het resultaat moeten komen.
Dit voorbeeld selecteert alleen de kolommen movie_name en director; andere kolommen worden niet teruggegeven.
SELECT movie_name, director
FROM films;
Om alle kolommen uit een tabel te selecteren, kun je SELECT * (uitgesproken als “ster”) gebruiken. Dit voorbeeld selecteert alle kolommen uit de tabel films.
SELECT *
FROM films;
2. LIMIT
Het beperken van het aantal rijen dat uit een tabel wordt teruggegeven is handig om querytijd te versnellen. Gebruik hiervoor het commando LIMIT. Dit voorbeeld selecteert alle kolommen uit de tabel films en beperkt de resultaten vervolgens tot de eerste tien rijen.
SELECT *
FROM films
LIMIT 10;
3. AS
Om een kolom of tabel in de resultaten te hernoemen, kun je AS gebruiken om een alias in te stellen. Dit voorbeeld selecteert de kolom movie_name en geeft deze de alias movie_title.
SELECT movie_name AS movie_title
FROM films;
4. SELECT DISTINCT
Datasets bevatten vaak dubbele rijen of waarden in een kolom. SELECT combineren met DISTINCT verwijdert duplicaten. Dit voorbeeld geeft de unieke waarden in de kolom director terug.
SELECT DISTINCT director
FROM films;
5. COUNT
COUNT() geeft het aantal rijen in de tabel of groep terug. Dit voorbeeld geeft het aantal rijen in de tabel films terug en hernoemt het resultaat naar number_of_films.
SELECT COUNT(*) AS number_of_films
FROM films;Begin gratis met SQL leren
Data Manipulation in SQL
6. MIN
MIN() geeft de minimumwaarde in een numerieke kolom terug. Voor tekstkolommen geeft MIN() de eerste waarde in alfabetische volgorde terug. Dit voorbeeld geeft de film met de laagste opbrengst terug.
SELECT MIN(revenue) AS minimum_revenue,
FROM films;
7. MAX
MAX() geeft de maximumwaarde in een numerieke kolom terug. Voor tekstkolommen geeft MAX() de laatste waarde in alfabetische volgorde terug. Dit voorbeeld geeft de film met de hoogste opbrengst terug.
SELECT MAX(revenue) AS maximum_revenue,
FROM films;
8. SUM
SUM() geeft de som van numerieke waarden terug. Dit voorbeeld geeft de totale opbrengst van alle films in de tabel films terug.
SELECT SUM(revenue) AS total_revenue
FROM films;
9. AVERAGE
AVERAGE berekent het rekenkundig gemiddelde van een kolom. Dit voorbeeld geeft de gemiddelde opbrengst van alle films in de tabel films terug.
SELECT AVERAGE(revenue) AS average_earned
FROM films;
10. WHERE
De WHERE-clausule filtert rijen die aan een bepaalde voorwaarde voldoen. In het onderstaande voorbeeld filteren we films die meer dan 500 miljoen dollar hebben opgebracht.
SELECT revenue
FROM films
WHERE revenue > 500000000;
Andere voorwaardelijke operatoren die je kunt gebruiken voor filtering zijn <, >, =>, <=, == (gelijk aan), != (niet gelijk aan).
11. HAVING
De HAVING-clausule lijkt op WHERE, maar kan alleen met aggregatiefuncties worden gebruikt; WHERE niet. In de onderstaande query kiezen we bijvoorbeeld alle filmgenres met minstens 50 films in hun categorie:
SELECT movie_name, director, date, COUNT(genre)
FROM films
GROUP BY genre
HAVING COUNT(genre) >= 50;
Hier is nog een voorbeeld dat films groepeert op leeftijdsclassificatie en alleen de classificaties kiest met een gemiddelde opbrengst van meer dan 100 miljoen:
SELECT movie_name, director, date, revenue
FROM films
GROUP BY age_rating
HAVING AVERAGE(genre) >= 100;
12. AND
De operator AND gebruik je om rijen te filteren die aan meer dan één voorwaarde voldoen. In het onderstaande voorbeeld filteren we op Engelstalige films die meer dan 500 miljoen dollar hebben opgebracht.
SELECT *
FROM films
WHERE revenue > 500000000 AND
language == "English";
13. OR
OR is een andere voorwaardelijke operator die rijen selecteert als een van de door OR gescheiden voorwaarden waar is. Dit voorbeeld geeft Engelstalige films terug die minder dan 100 miljoen dollar hebben opgebracht, of Franstalige films die meer dan 500 miljoen dollar hebben opgebracht.
SELECT *
FROM films
WHERE (revenue < 100000000 AND language == "English") OR
(revenue > 500000000 AND language == “French”);
14. BETWEEN
BETWEEN laat je rijen binnen een bepaald bereik selecteren, wat WHERE-clausules eenvoudiger en leesbaarder maakt. In het bovenstaande voorbeeld kiezen we alle films die tussen 2020 en 2022 zijn uitgebracht.
SELECT *
FROM films
WHERE date BETWEEN 2020 AND 2022;
15. IN
De operator IN is een afkorting voor meerdere OR-uitspraken. Dit voorbeeld geeft alle films terug die in een van deze jaren zijn uitgebracht—1998, 1966, 2001 en 2012.
SELECT movie_name, date, revenue
FROM films
WHERE date IN (1998, 1966, 2001, 2012);
16. LIKE
Met de operator LIKE kun je patronen zoeken in een tekstkolom met behulp van speciale tekenreeksen, zogenaamde wildcards. Wildcards helpen je tekst te vinden die in een bepaald patroon past. Bijvoorbeeld: met de wildcard “A% W%” op de kolom director vind je alle regisseurs met een voornaam die met A begint en een achternaam die met W begint.
SELECT *
FROM films
WHERE director LIKE "A% W%";
17. GROUP BY
GROUP BY groepeert rijen op basis van kolomwaarden. GROUP BY wordt meestal gebruikt met aggregatiefuncties zoals COUNT, MIN, MAX, AVERAGE en meer. In het onderstaande voorbeeld zoeken we de gemiddelde opbrengst per filmgenre.
SELECT AVERAGE(revenue), movie_name, director, date
FROM films
GROUP BY genre;
We hadden ook MIN, MAX of COUNT(revenue) kunnen gebruiken om respectievelijk de laagste opbrengst, de hoogste opbrengst of het aantal films per genre te vinden. Let op: de GROUP BY-instructie heeft in de praktijk geen effect op de query als deze niet met een aggregatiefunctie wordt gebruikt.
18. ORDER BY
Met ORDER BY kun je rijen sorteren op basis van een kolomwaarde. Je kunt oplopend (standaard) of aflopend sorteren door ASC of DESC toe te voegen. Dit voorbeeld sorteert de opbrengst in oplopende volgorde.
SELECT *
FROM films
ORDER BY revenue ASC;
19. UPDATE
UPDATE gebruik je om de waarden van individuele cellen in een bestaande tabel te wijzigen. Het wordt gebruikt met het sleutelwoord SET. Dit voorbeeld werkt de regisseur “J. Whedon” bij naar “Joss Whedon”.
UPDATE films
SET director = "Joss Whedon"
WHERE director = "J. Whedon"
De WHERE-clausule is cruciaal bij UPDATE-statements. Zonder deze clausule zou de bovenstaande query alle films als geregisseerd door Joss Whedon hebben aangemerkt.
20. ALTER TABLE
Je kunt de instructie ALTER TABLE gebruiken om de eigenschappen van de tabel en zijn kolommen te wijzigen (niet de daadwerkelijke celwaarden). Denk aan kolomnamen wijzigen, nieuwe kolommen toevoegen, ze verwijderen of hun datatype aanpassen. De onderstaande voorbeelden laten zien hoe je de kolom date verwijdert en de kolom age_rating toevoegt.
ALTER TABLE films
DROP COLUMN date;
ALTER TABLE films
ADD COLUMN age_rating;
21. CREATE TABLE
CREATE TABLE maakt een nieuwe tabel in een database. Hieronder maken we een tabel “libraries” met vier kolommen—een integerkolom id, een tekenreeks-kolom name, een tekenreeks-kolom version en een integerkolom num_downloads.
CREATE TABLE libraries (
lib_id int,
name varchar(100),
version varchar(100),
num_downloads int
)
22. INSERT INTO
Met INSERT INTO kun je nieuwe rijen aan een tabel toevoegen. In dit voorbeeld voegen we de film “Doctor Strange” toe aan de tabel films.
INSERT INTO films (movie_name, director, revenue, date, genre, language)
VALUES ("Doctor Strange 2", “Sam Raimi”, 409000000, 2022, “Action”, “English”)
23. INNER JOIN
Het commando INNER JOIN selecteert rijen met overeenkomende waarden in beide tabellen. In de onderstaande query koppelen we bijvoorbeeld de tabellen films en soundtracks op de gemeenschappelijke kolom date, wat films en soundtracks teruggeeft die in dezelfde jaren zijn uitgebracht.
SELECT *
FROM films
INNER JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
24. LEFT JOIN
Een LEFT JOIN behoudt alle oorspronkelijke records in de linkertabel en geeft ontbrekende waarden terug voor kolommen uit de rechtertabel waarvoor geen match is gevonden op het koppelingsveld.
SELECT *
FROM films
LEFT JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
25. RIGHT JOIN
Een RIGHT JOIN behoudt alle oorspronkelijke records in de rechtertabel en geeft ontbrekende waarden terug voor kolommen uit de linkertabel waarvoor geen match is gevonden op het koppelingsveld.
SELECT *
FROM films
LEFT JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
SQL-commando’s cheatsheet
Wil je meer leren over SQL? Bekijk dan de volgende resources: