Illustration til: Claude til SQL og databaser: skriv og optimer forespørgsler med AI

Claude til SQL og databaser: skriv og optimer forespørgsler med AI

SQL er et af de områder, hvor Claude virkelig brillerer som assistent. Uanset om du er nybegynder der aldrig har skrevet en forespørgsel, eller en erfaren udvikler med komplekse joins og subqueries — Claude kan hjælpe dig skrive, forstå og optimere SQL.

Hvad Claude kan med SQL

Claude behersker alle standarddialekter af SQL og kan hjælpe med:

  • Skrive SQL fra naturligt sprog — beskriv hvad du vil have, og Claude skriver forespørgslen
  • Forklare eksisterende forespørgsler — hvad gør denne query egentlig?
  • Optimere langsomme forespørgsler — identificere flaskehalse og foreslå forbedringer
  • Konvertere mellem dialekter — PostgreSQL → MySQL, SQLite → MSSQL osv.
  • Designe skemaer — tabeller, relationer, normalformer

Skriv SQL fra naturligt sprog

Det enkleste use case: beskriv hvad du vil have, og Claude skriver forespørgslen for dig.

Prompt: "Hent alle brugere der har købt mere end tre gange
de sidste 30 dage, sorteret efter seneste køb."

Claude returnerer:
SELECT u.id, u.email, u.name,
       COUNT(o.id) AS order_count,
       MAX(o.created_at) AS last_order
FROM users u
JOIN orders o ON o.user_id = u.id
WHERE o.created_at >= NOW() - INTERVAL '30 days'
GROUP BY u.id, u.email, u.name
HAVING COUNT(o.id) > 3
ORDER BY last_order DESC;

JOIN-forklaringer

Joins er notorisk forvirrende for mange. Claude kan forklare dem med konkrete eksempler:

Prompt: "Forklar forskellen på INNER JOIN, LEFT JOIN
og FULL OUTER JOIN med et eksempel fra en webshop."

Claude vil give dig præcise definitioner med eksempler på hvornår hver type JOIN er den rigtige at bruge.

Aggregering og gruppering

Claude håndterer kompleks aggregering med GROUP BY, HAVING, vinduesfunktioner og ROLLUP. Beskriv din analyseopgave på dansk, og Claude skriver den korrekte SQL.

Prompt: "Beregn månedlig omsætning per produktkategori
for Q1 2026, med en total-række for hver kategori."

-- Claude foreslår brug af ROLLUP:
SELECT
  EXTRACT(MONTH FROM o.created_at) AS month,
  c.name AS category,
  SUM(oi.quantity * oi.unit_price) AS revenue
FROM order_items oi
JOIN products p ON p.id = oi.product_id
JOIN categories c ON c.id = p.category_id
JOIN orders o ON o.id = oi.order_id
WHERE o.created_at BETWEEN '2026-01-01' AND '2026-03-31'
GROUP BY ROLLUP(month, category)
ORDER BY month, category;

Optimering af langsomme forespørgsler

Giv Claude din EXPLAIN ANALYZE-output og bed den forklare flaskehalse:

Prompt: "Her er output fra EXPLAIN ANALYZE på en query der tager 3 sekunder.
Hvad er problemet og hvordan løser jeg det?"
[indsæt EXPLAIN output]

Claude vil identificere sequential scans, manglende indekser og foreslå konkrete CREATE INDEX-kommandoer.

Subqueries og CTEs

Common Table Expressions (WITH-klausuler) gør komplekse forespørgsler læsbare. Claude er særligt god til at omskrive indviklede nestede subqueries til elegante CTEs:

Prompt: "Omskriv denne nestede subquery til en CTE,
og forklar hvad hver del gør."

Vigtige advarsler

Claude genererer SQL baseret på de tabel- og kolonnenavne du angiver. Den kender ikke din faktiske data, og dens forespørgsler kan returnere tomme resultater eller fejl, hvis navne ikke stemmer. Verificer altid:

  • At tabel- og kolonnenavne er korrekte i dit skema
  • At joins er korrekte og ikke skaber utilsigtet duplikering af rækker
  • At WHERE-betingelser filtrerer som forventet

Kør altid komplekse queries på testdata, inden de rammer produktion.


Udgivet

i

af

Kommentarer

Skriv et svar