Je kent inmiddels alle voordelen van SQL en bent een ervaren data-analist, data-engineer of data scientist. Je weet van de verschillende SQL-dialecten, je bent bedreven in het importeren van SQL-gegevens en je schrijft vlot basis-SQL-query’s. Maar wil je je skills naar het volgende niveau tillen? Zo pak je dat aan.
Gevorderde SQL-concepten
Ken de SQL-sublanguages
Er zijn vier primaire sublanguages in SQL—ze verwijzen naar verschillende taken, maar zijn allemaal onderdeel van de SQL-taal:
1. DDL (Data Definition Language)
Deze statements worden gebruikt om tabellen en databases te maken en veld- of tabeleigenschappen te definiëren. Voorbeelden van commando’s in deze categorie zijn CREATE, ALTER en DROP.
2. DML (Data Manipulation Language)
De statements in deze categorie worden gebruikt om gegevens bij te werken of toe te voegen/verwijderen uit tabellen. Commando’s in deze categorie zijn UPDATE, DELETE en INSERT.
3. DCL (Data Control Language)
Deze SQL-statements worden gebruikt om te bepalen wie toegang heeft tot de data. De commando’s in deze categorie zijn GRANT en REVOKE.
4. TCL (Transaction Control Language)
Deze taal wordt gebruikt om data te bevestigen en terug te draaien. COMMIT en ROLLBACK vallen onder deze categorie.
5. DQL (Data Query Language)
Dit is om data op te halen van de SQL-server. Het SELECT-statement valt in deze categorie.
Dit oogt misschien intimiderend, maar geen zorgen! SQL is een elegante, rechttoe-rechtaanaan taal om te leren, juist omdat je met SQL geen datavisualisaties maakt—het draait om tabellen maken, data organiseren en opschonen, en leren de juiste vragen te stellen.
Unions en joins
Vaak staat de data die je nodig hebt niet in één grote tabel, maar is deze verspreid over meerdere tabellen. Met SQL kun je die tabellen samenvoegen zodat alle benodigde gegevens op één plek staan. Omdat UNION en JOIN met tabellen werken, zet je ze in het FROM-statement.
Een UNION stapelt in feite twee tabellen met identieke kolommen op elkaar. Dit is handig voor verkooptransacties die per maand, kwartaal of jaar in verschillende tabellen zijn opgesplitst.
Er zijn meerdere veelgebruikte JOINS—Inner, Outer, Left en Exception. Simpel gezegd leveren die verschillende combinaties van rijen op uit de tabellen die je samenvoegt.
Extra bronnen:
Gevorderde SQL-syntaxis
Je kent nu de basis van de SQL-syntaxis, inclusief de functies SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY en LIMIT. Je bent vaardig in Databaseontwerp en je begrijpt ook de SQL-volgorde van uitvoering—dat query’s anders worden geschreven dan ze verwerkt worden.
Nu is het tijd om meer geavanceerde syntaxis te leren.
Aggregaties: SELECT, GROUP BY en HAVING
Net als in Excel kun je in SQL je data aggregeren met som, gemiddelde, maximum, minimum en count. Aggregaties zijn handig bij het verkennen van je data, bij analyse, of wanneer je resultaten presenteert. Je kunt dit in het SELECT-statement doen om een eenvoudige aggregatie te krijgen, of een GROUP BY-statement gebruiken om een soort Excel-“draaipunt” van je data te maken.
Aggregaties in het SELECT-statement leveren slechts een simpele berekening op; als je bijvoorbeeld SUM(column_name) gebruikt, retourneert je query één waarde die alle waardes in die kolom opgeteld representeert.
Je kunt ook aggregeren op basis van categorische data. Als je bijvoorbeeld een tabel met fruitverkoopgegevens door het hele land hebt, kun je de som van alle verkopen groeperen per producttype, of de gemiddelde prijs per staat. Dit vereist een GROUP BY-statement, dat na het WHERE-statement komt. Je moet de categorische kolom opgeven waarop je aggregaties “gegroepeerd” moeten worden en die kolommen ook in je SELECT-statement opnemen.
Nadat je data netjes is gegroepeerd, met een aggregatie gekoppeld aan een categorische variabele, kun je vervolgens op die aggregaties filteren met een HAVING-statement, dat na GROUP BY komt. Dit is handig als je je query verder wilt verfijnen, bijvoorbeeld als je alleen die fruitwinkels wilt selecteren met een gemiddelde omzet van meer dan $100.000.
Extra bronnen:
- SQL | String Functions | GeeksforGeeks
- SQL Aggregate Functions | Mode
- SQL GROUP BY | W3 Schools
- SQL HAVING | TutorialsPoint
CASE-statements
Een SQL CASE-statement lijkt op de IF()-functie in Excel—als de data in een kolom aan een bepaald criterium voldoet, retourneer dan “dit”. Dit is handig bij het herindelen van kwantitatieve data als categorisch, bijvoorbeeld wanneer je een reeks waardes opsplitst in “Hoog”, “Middel” of “Laag”. CASE-statements zet je in het SELECT-statement.
Zie ook:
Subquery’s
Subquery’s kun je op verschillende manieren gebruiken, maar ze staan meestal in het FROM- of het WHERE-statement. Ze maken een kleine, tijdelijke tabel van je data die je vervolgens als nieuwe tabel op een andere manier kunt bevragen.
Zie ook:
Datums en tijden
Zoals bij veel andere datatalen kan werken met datums en tijden lastig zijn. Soms gedragen datums zich als “strings”, of stukjes informatie. Soms kun je ze behandelen als echte datums, met SQL-syntaxis die de data kan opdelen in eenheden zoals maanden of jaren. Omdat er veel manieren zijn om dit te doen, worden deze functies als meer geavanceerde SQL-syntaxis beschouwd.
Zie ook:
Versterk je SQL-denken
SQL-richtlijnen om te volgen
In de praktijk vertalen zakelijke vragen zich zelden netjes naar SQL-query’s. Daarom moet je goed inschatten wat er nodig is voordat je ook maar één regel code schrijft. Dit zijn goede richtlijnen om te volgen als je SQL oefent.
Herschrijf je businessvraag eerst als commentaar
Gebruik codecommentaar om je query eerst te “brainenstormen”—wat is de vraag die je wilt beantwoorden? Op welke stukken en elementen moet je focussen? Dit stuurt je SQL-query.
Er zijn twee soorten commentaar: inline en multi-line.
--Inline is gewoon twee koppeltekens en staat op één regel code—handig voor korte, snelle notities
/*Multi-line commentaar ziet er zo uit.
Het is handig voor banners die het doel van een query, auteur, enz. uitleggen*/
Maak een schets van je query
Voordat je begint te typen, bedenk je welke onderdelen je nodig hebt voor je query. Je hebt altijd een SELECT- en een FROM-statement nodig—maar wat nog meer? Moet je de data filteren met een WHERE-statement? Heb je aggregatiefuncties nodig?
Begrijp de verschillende manieren om je doel te bereiken
Probeer, waar mogelijk, meerdere manieren te hebben om hetzelfde te doen. Zo kun je jezelf controleren en valideren of je tot dezelfde resultaten komt. Je kunt bijvoorbeeld de hoogste waarde in een kolom vinden door de MAX()-functie in het STATEMENT te gebruiken, of door ORDER BY te gebruiken om de data te sorteren en vervolgens LIMIT om te beperken zodat slechts één rij wordt geretourneerd.
Test je query
Bouw je query regel voor regel op en voer hem vaak uit om te controleren of hij werkt. Onderdelen één voor één toevoegen helpt ook voorkomen dat je je code regel voor regel moet nalopen als het niet werkt.
Maak een profiel van je tabel
Om query’s te kunnen uitvoeren, moet je eerst de data-elementen erin begrijpen. Begin met het bekijken van de volledige database; daarna een paar kolommen tegelijk. Zoek de bereik van waardes, zowel categorisch als kwantitatief, om een idee te krijgen van welke informatie in de tabel staat.
Houd een lijst met aannames bij
Bij het schrijven van elke vorm van datacode moet je altijd een lijst met aannames maken om je beperkingen en afhankelijkheden eenvoudig bij te houden.
Houd een datadictionary bij
Stel een centrale bron samen voor de data-elementen die je gebruikt, met beschrijvingen van de verschillende tabellen en velden die in de analyse worden gebruikt. Dit kan de verschillende datatypes in elke kolom bevatten (character, integer, money, date, enz.) en een korte beschrijving van de kolom zelf.
Plan altijd tijd in voor datakwaliteitscontroles
De analyse eindigt niet wanneer je klaar bent met het schrijven van je query. Je moet je resultaten nog begrijpen en kwaliteitscontroles uitvoeren om te zorgen dat je analyse klopt. Probeer verschillende manieren om hetzelfde resultaat te bereiken om te zien of je iets anders krijgt—dit is opnieuw een moment waarop inline commentaar goed van pas komt!
Oefen in een sandbox
Een van de beste manieren om een programmeertaal te leren is een “sandbox” te vinden om in te spelen. Je kunt je code testen, kijken of die draait, aanpassen, opnieuw draaien, keer op keer totdat je je prettig voelt bij de programmeerprincipes en syntaxis. Als je begint, wil je misschien wat meer houvast—zoek een project met duidelijke instructies en voorbeeldoplossingen om je werk te controleren.
Hier zijn een paar goede oefenbronnen:
Dat was het voor nu. Hopelijk had je hier wat aan—blijf oefenen en leren!
