SQL (Structured Query Language) wordt beschouwd als een niet-procedurele taal omdat het zich richt op *welke* gegevens moeten worden opgehaald, en niet op *hoe* deze moeten worden opgehaald. Procedurele talen specificeren daarentegen de exacte stappen die de computer moet nemen om een resultaat te bereiken.
Dit is wat SQL niet-procedureel maakt:
* Declaratieve aard: U beschrijft het gewenste resultaat (bijvoorbeeld 'selecteer alle klanten uit de tabel 'Klanten' waarbij het land 'VS' is'), en de SQL-engine bepaalt de meest efficiënte manier om de query uit te voeren. U dicteert niet de specifieke algoritmen of stappen.
* Optimalisatie door het databasesysteem: Het databasemanagementsysteem (DBMS) is verantwoordelijk voor het creëren van een uitvoeringsplan – een reeks handelingen – om het gewenste resultaat te bereiken. Dit plan kan indexering, joins, sortering en andere technieken omvatten die transparant zijn voor de gebruiker. De gebruiker geeft niet op hoe deze bewerkingen worden uitgevoerd.
* Setgeoriënteerde bewerkingen: SQL werkt op sets gegevens (tabellen) in plaats van op individuele records. Eén enkele SQL-instructie kan duizenden of miljoenen rijen tegelijk manipuleren. Dit staat in contrast met proceduretalen, die gegevens doorgaans record voor record verwerken.
Een procedurele taal (zoals C of Python) zou daarentegen vereisen dat je code schrijft die expliciet:
1. Opent de databaseverbinding.
2. Doorloopt elke record in de tabel 'Klanten'.
3. Controleert het land van elke record.
4. Als het land 'VS' is, wordt de record toegevoegd aan een resultatenset.
5. Sluit de databaseverbinding.
SQL maakt al deze stappen overbodig, waardoor het veel eenvoudiger en efficiënter wordt voor gegevensmanipulatietaken, vooral als het om grote datasets gaat. Het ‘hoe’ wordt overgelaten aan de optimalisatie van het databasesysteem. |