Hvad er SQL
SQL står for Structured Query Language og er det mest udbredte sprog til at kommunikere med databaser. Det bruges til at hente, indsætte, opdatere og slette data - kort sagt til alt, der handler om at styre og analysere information i en database.
Uanset om du arbejder i MySQL, PostgreSQL, SQL Server eller Oracle, fungerer SQL som et fælles sprog, der gør det muligt at strukturere data og stille præcise spørgsmål til dem.
Et simpelt SQL-statement kan fx finde alle kunder, der har handlet den seneste måned - eller summere salget pr. produkt på få sekunder.
Hvorfor bruge SQL?
Grunden til, at SQL stadig er uundværligt i 2025, er enkel: Det gør data brugbare.
Uanset om du arbejder med webudvikling, analyse, rapportering eller kunstig intelligens, er SQL værktøjet, der forbinder dig direkte til de data, du har brug for.
Med SQL kan du:
-
Forstå dine data - og finde mønstre, fejl og muligheder.
-
Kombinere information fra flere tabeller eller systemer.
-
Optimere performance og få hurtigere svar gennem smarte indekser og forespørgsler.
-
Automatisere processer som rapportering eller datavalidering.
Smarte funktioner i SQL
Når du først har styr på de grundlæggende SQL kommandoer som CREATE, SELECT og INSERT handler det næste skridt om at skrive hurtigere, smartere og mere effektive forespørgsler.
Her er nogle af de mest smarte funktioner i SQL, som kan forbedre både performance og læsbarhed i dine scripts.
Brug INDEX for hurtigere forespørgsler
Indekser er et af de mest effektfulde værktøjer, når du vil optimere søgninger og forbedre ydeevnen i SQL Server. Det er et spændende område, men det kan også være svært at gennemskue, hvad der egentlig er best practice, når man arbejder med indeksstrategier.
Grundlæggende findes der to typer indeks: Rowstore indeks og Columnstore indeks. Mange starter naturligt med rowstore, men opdager hurtigt, at det ikke altid er tilstrækkeligt - især når man arbejder med store tabeller på hundredvis af millioner rækker. Her kommer Columnstore indeks virkelig til sin ret.
Et eksempel på brugen af index
I eksemplet nedenfor har jeg oprettet et Row index som er Non Clustered Index, baseret på kolonnen City, på en tabel med 8281 (det er få rækker). Derefter har jeg forespurgt på disse rækker:

Til min overraskelse kan jeg i eksekveringsplanen se, at indekset slet ikke bliver brugt. SQL Server har vurderet, at det ikke kan betale sig at anvende indekset i forhold til omkostningen ved at slå det op.
Optimizeren foreslår i stedet at oprette et mere passende indeks, der inkluderer ekstra kolonner - og markerer det i toppen af planen med den velkendte grønne tekst.

Før jeg tester forslaget, noterer jeg mig den oprindelige Sub Tree Cost: 0,21165.

Jeg opretter det foreslåede indeks og kører forespørgslen igen. BAAM - så kan du virkelig se forskellen. Sub Tree Cost falder markant til 0,00568, hvilket viser, hvor meget planen forbedres med det rette indeks.

I praksis svarer det her til en optimering på omkring en faktor 35. Og dette er endda på en lille tabel - på store tabeller er effekten typisk langt større.
Pas på: Du kan også risikere at ’overindeksere’ tabeller.
Brug CTE’er for at gøre komplekse SQL forespørgsler mere læsbare.
Når dine SQL forespørgsler bliver lange og svære at overskue, er CTE’er (Common Table Expressions) en elegant måde at skabe struktur og klarhed. En CTE fungerer som en midlertidig, navngivet del forespørgsel, som du kan genbruge i resten af dit query - lidt som et lille “mini-view”, der gør koden langt mere læsbar.
Man kan med fordel tænke på en CTE som en opskrift: Først definerer du ingredienserne (typisk tabeller eller delresultater), og derefter beskriver du, hvordan de skal kombineres ved hjælp af fx JOIN, APPLY, UNION m.m.
Det giver et query, der er nemmere at forstå, teste og vedligeholde, især når du arbejder med komplekse beregninger eller logik i flere trin.
CTE’er er ikke kun smarte til at rydde op i koden; de bruges også til rekursive forespørgsler, hvor resultatet bygger videre på sig selv.
Et eksempel på brugen af CTE'er
I eksemplet ses en CTE, der danner en kalendertabel. Undervejs i CTE'en er der brugt rekursion


Brug APPLY operatoren til fleksible og dynamiske SQL forespørgsler
De fleste kender JOIN operatoren, som bruges til at kombinere rækker fra to tabeller ved hjælp af en fælles nøgle. Her arbejder man typisk med en LEFT- og en RIGHT tabel. JOIN fungerer godt i mange situationer, men kan også have udfordringer - især når tabellerne er store.
JOIN blander nemlig alle relevante rækker fra begge tabeller, og det kan hurtigt blive en tung operation, hvis datamængden er høj.
Men hvad nu hvis vi kunne begrænse eller filtrere rækkerne i RIGHT tabellen, før de kombineres med venstretabellen?
Det er netop her, APPLY operatoren kommer til sin ret.
Et eksempel på brugen af APPLY
I eksemplet ønsker vi at returnere kunder og hver kundes 3 seneste ordrer. Det viser sig at være en ret krævende opgave, medmindre vi forsøger os med APPLY:


Man kan sige at: Højreside tabellen (fakturaer) bliver instrueret i, kun at levere 3 rækker tilbage for hver række i venstreside tabellen (kunder).
APPLY operatoren kan også være interessant at undersøge ifm. Pivotopgaver.
Tag dine SQL evner til næste niveau
Har du fået lyst til at lære mere om SQL og arbejde endnu mere effektivt med data?
Et SQL kursus giver dig den praktiske erfaring, der kan løfte dine færdigheder fra grundlæggende forespørgsler til avanceret databasedesign og optimering.

