Ga naar hoofdinhoud

SQL OFFSET gebruiken

Beheers de SQL OFFSET-clausule. Ontdek hoe je met ORDER BY en LIMIT waarden op basis van positie ophaalt, met praktische voorbeelden, waaronder datapaginering voor webapplicaties.
· 10 min lezen

Verken met AI

SQL OFFSET is een krachtige clausule om een opgegeven aantal rijen in een queryresultaat over te slaan. Het wordt vaak gecombineerd met de LIMIT-clausule voor datapaginering.

In deze tutorial bekijken we hoe OFFSET werkt, de praktische toepassingen en best practices om je SQL-queries te optimaliseren. Wil je eerst je SQL-kennis opfrissen? Bekijk dan snel onze SQL Basics Cheat Sheet.

Het korte antwoord: zo gebruik je SQL OFFSET

De OFFSET-clausule in SQL wordt gebruikt om een specifiek aantal rijen over te slaan voordat de rijen in de resultaatset worden geretourneerd. Het wordt vaak gebruikt in combinatie met de LIMIT-clausule om resultaten te pagineren.

SELECT column_names
FROM table_name
ORDER BY column_name
LIMIT number_of_rows OFFSET offset_value;

In de bovenstaande SQL-query geeft number_of_rows het specifieke aantal rijen aan dat moet worden geretourneerd, terwijl offset_value het aantal rijen aangeeft dat de query moet overslaan voordat ze worden geretourneerd. 

Hoe OFFSET werkt

De OFFSET-clausule slaat het opgegeven aantal rijen in de resultaatset over. In combinatie met ORDER BY krijg je consistente resultaten doordat rijen in een gedefinieerde volgorde worden overgeslagen, meestal bepaald door een kolomnaam. Standaard retourneert ORDER BY de opgegeven kolom in oplopende volgorde.

Stel dat je uit een employees-tabel de volgende kolommen wilt ophalen: employee_id, first_name, last_name, phone_number en salary. Je wilt ook de eerste 9 rijen uitsluiten van je resultaten. Gebruik dan de SQL-query hieronder.

-- Select all columns for employees, starting from the 10th row
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9 ROWS;

Het is belangrijk om te onthouden dat je, vanwege niet-unieke sorteerkolommen, voorzichtig moet zijn om dubbele records te voorkomen.

LIMIT en OFFSET combineren

OFFSET wordt meestal gebruikt met LIMIT om te bepalen hoeveel rijen er worden geretourneerd en vanaf waar het teruggeven van rijen begint. 

In het onderstaande voorbeeld retourneert de LIMIT-clausule alleen de volgende 10 rijen nadat de eerste 9 rijen zijn overgeslagen.

-- Select all columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9
-- Fetch the next 10 rows
LIMIT 10;

Praktische toepassingen van OFFSET

SQL OFFSET wordt veel gebruikt voor paginering in webapplicaties. Datapaginering is, om precies te zijn, een techniek om grote hoeveelheden data op te delen in kleinere blokken, zodat gebruikers grote datasets efficiënter kunnen doorzoeken. 

Ik vind datapaginering een van de beste voorbeelden van het gebruik van OFFSET en LIMIT. In deze techniek zorgen de OFFSET- en LIMIT-clausules er samen voor dat de data in behapbare delen wordt opgesplitst die over meerdere pagina’s worden weergegeven.  

Dit verbetert de gebruikerservaring, omdat niemand in één keer wordt overspoeld met een enorme lijst. 

Andere toepassingen van OFFSET zijn:

  1. Opgegeven records overslaan bij data-analyse.
  2. Data voorbereiden om in delen te exporteren (in combinatie met LIMIT).
  3. Eenvoudig focussen op data binnen een bepaald bereik, wanneer je weet waar je naar zoekt. 

Database-specifieke ondersteuning en alternatieven

Verschillende databases ondersteunen OFFSET- en LIMIT-clausules, waaronder MySQL, PostgreSQL en SQLite. Alternatieve methoden, zoals FETCH, kunnen worden gebruikt voor databases die OFFSET en LIMIT niet ondersteunen, zoals SQL Server.

De onderstaande query (met LIMIT) retourneert bijvoorbeeld waarden in MySQL-, SQLite- en PostgreSQL-databases, maar niet in SQL Server.

-- Select all columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id
-- Skip the first 9 rows
OFFSET 9
-- Fetch the next 10 rows
LIMIT 10;

Gebruik daarom FETCH in SQL Server om vergelijkbare resultaten te krijgen met de onderstaande query;

-- Select specific columns for employees, starting from the 10th row and fetching the next 10 rows
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Order by employee_id to ensure consistent ordering
ORDER BY employee_id 
-- Skip the first 9 rows (starting from the 10th row)
OFFSET 9 ROWS 
 -- Fetch the next 10 rows
FETCH NEXT 10 ROWS ONLY;

Geavanceerde technieken: OFFSET en FETCH

De FETCH-clausule, gebruikt in de SQL-standaard, kan een geavanceerd alternatief zijn voor LIMIT. Terwijl OFFSET het aantal over te slaan rijen aangeeft, bepaalt FETCH het aantal rijen dat de query moet retourneren.

-- Selecting columns from employees table
SELECT employee_id, first_name, last_name, phone_number, salary
FROM employees
-- Ordering the result set by employee_id for consistent pagination
ORDER BY employee_id
-- Skipping the first 20 rows in the result set
OFFSET 20 ROWS
-- Fetching the next 10 rows only after the offset
FETCH NEXT 10 ROWS ONLY;

Andere geavanceerde SQL-technieken vind je in onze cursus Associate Data Analyst in SQL.

Prestatie-overwegingen en andere best practices 

OFFSET effectief gebruiken vraagt om inzicht in de impact op de queryprestaties. 

OFFSET kan de prestaties beïnvloeden, vooral bij grote datasets. SQL Server handelt querycaching en -uitvoering efficiënt af, maar het gebruik van OFFSET met grote datasets kan extra optimalisaties vereisen, zoals Common Table Expressions (CTE’s) of tijdelijke tabellen. Houd daarom de prestaties van je queries in de gaten om problemen te signaleren en knelpunten op te lossen die de uitvoering belemmeren. DataCamp’s cursus Intermediate SQL Server bevat een hoofdstuk over common table expressions en andere geavanceerde onderwerpen. 

Hier zijn nog enkele best practices die ik in de praktijk heb ontdekt.

  • Gebruik altijd een passende ORDER BY-clausule. Zo worden records consistent gesorteerd.
  • Denk aan indexering en query-optimalisaties. Dit zorgt voor betere prestaties, zeker bij grote databases.

Conclusie en verder leren

Het beheersen van de OFFSET-clausule, in combinatie met LIMIT, is cruciaal voor efficiënt databeheer. Experimenteer met deze clausules in je SQL-queries om prestaties te verbeteren en de gebruikerservaring te versterken. Je kunt meer leren over de OFFSET-clausule in SQL via DataCamp’s cursussen Intermediate SQL en SQL fundamentals.

Je kunt ook meer leren over data-analyse met SQL in onze cursus Reporting in SQL. Wil je je praktische vaardigheden met SQL-projecten aantonen? Dan raad ik de SQL Associate Certification aan, zodat je opvalt tijdens sollicitatiegesprekken.

Allan Ouko

Auteur

Allan Ouko

\n
\n
\n
\n
Technical writer voor data science met praktische ervaring in data-analyse, business intelligence en data science. Ik schrijf praktische, op de industrie gerichte content over SQL, Python, Power BI, Databricks en data engineering, gebaseerd op analytisch werk in de echte wereld. Mijn schrijfwerk slaat een brug tussen technische diepgang en zakelijke impact, en helpt professionals om data om te zetten in onderbouwde beslissingen.
\n
\n
\n
\n

Veelgestelde vragen

Wat is de OFFSET-clausule in SQL?

De OFFSET-clausule wordt gebruikt om rijen over te slaan voordat de resultaten van een query worden geretourneerd.

Waarom gebruiken we ORDER BY met OFFSET?

Hoewel onze query zonder de ORDER BY-clausule draait, is de uitvoer mogelijk niet consistent of zoals verwacht. OFFSET gebruiken zonder ORDER BY betekent dat de database-engine geen opgegeven volgorde heeft om te volgen, wat tot onvoorspelbare resultaten kan leiden. Daarom gebruiken we ORDER BY om verrassingen te voorkomen.

Waarom geeft de LIMIT-clausule een fout in SQL Server?

De LIMIT-clausule wordt ondersteund in MySQL, PostgreSQL en SQLite. Gebruik FETCH voor SQL Server.

Wat is het verschil tussen OFFSET en LIMIT?

De OFFSET-clausule slaat opgegeven rijen over voordat de records worden geretourneerd, terwijl de LIMIT-clausule het aantal te retourneren records beperkt.

Wat als mijn OFFSET-query lang duurt om uit te voeren?

Je kunt de query optimaliseren met Common Table Expressions (CTE’s) of tijdelijke tabellen.

Onderwerpen

Gerelateerd