SQL Academy · Lektion

Sökta kontra enkla CASE

Två sätt att skriva CASE.

Lektion 2 av 413 steg

Sökta kontra enkla CASE är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för SQL Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i SQL Academy innehåller totalt 4 lektioner.

Två sätt att skriva CASE

SQL erbjuder två varianter av CASE-uttrycket: Simple CASE och Searched CASE. Båda returnerar ett värde baserat på villkor, men de skiljer sig åt i hur villkoren skrivs.

När lektionen är slut vet du när du ska välja respektive form och hur du undviker vanliga misstag när du blandar ihop dem.

Simple CASE – idén

Ett Simple CASE jämför ett uttryck med en lista av värden. Tänk på det som en uppslagstabell: du väljer en kolumn eller ett värde till vänster och listar sedan vad det värdet är lika med i varje WHEN-gren.

Syntax: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END

SELECT
  product_name,
  category_id,
  CASE category_id
    WHEN 1 THEN 'Electronics'
    WHEN 2 THEN 'Clothing'
    WHEN 3 THEN 'Books'
    ELSE 'Other'
  END AS category_name
FROM products;

Simple CASE i praktiken

Här står CASE-uttrycket direkt efter nyckelordet och kolumnen status jämförs med varje WHEN-värde med likhetsoperatorn. Observera att du inte skriver status = i WHEN-grenarna – jämförelsen är underförstådd.

SELECT
  order_id,
  status,
  CASE status
    WHEN 'pending'   THEN 'Awaiting payment'
    WHEN 'paid'      THEN 'Payment received'
    WHEN 'shipped'   THEN 'On its way'
    WHEN 'delivered' THEN 'Completed'
    ELSE 'Unknown status'
  END AS status_label
FROM orders;

Searched CASE – idén

Ett Searched CASE har inget uttryck direkt efter nyckelordet CASE. I stället innehåller varje WHEN-gren ett fullständigt booleskt villkor. Det gör formen mycket mer flexibel: du kan blanda olika kolumner, använda intervallkontroller eller anropa funktioner i varje WHEN.

Syntax: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END

SELECT
  employee_name,
  salary,
  CASE
    WHEN salary < 30000  THEN 'Entry Level'
    WHEN salary < 60000  THEN 'Mid Level'
    WHEN salary < 100000 THEN 'Senior'
    ELSE 'Executive'
  END AS salary_band
FROM employees;

Searched CASE i praktiken

Eftersom varje WHEN kan ta emot vilket booleskt uttryck som helst kan du kombinera flera kolumner i samma gren. Databasen utvärderar WHEN-satserna uppifrån och ned och returnerar resultatet från den första grenen som är TRUE.

SELECT
  product_name,
  stock,
  price,
  CASE
    WHEN stock = 0              THEN 'Out of stock'
    WHEN stock < 10 AND price > 100 THEN 'Low stock — premium item'
    WHEN stock < 10             THEN 'Low stock'
    ELSE 'In stock'
  END AS availability
FROM products;

Viktig strukturell skillnad

Tabellen nedan sammanfattar kärnskillnaden:

Simple CASE — ett uttryck efter CASE, där varje WHEN kontrollerar likhet med det uttrycket.
Searched CASE — inget uttryck efter CASE, där varje WHEN är ett fristående booleskt villkor.

Eftersom Simple CASE endast utför likhetskontroller kan det inte hantera intervall, NULL-värden eller villkor som omfattar flera kolumner. För allt som går utöver en direkt värdematchning använder du Searched CASE.

-- Simple CASE: equality only
SELECT CASE day_number
         WHEN 1 THEN 'Monday'
         WHEN 2 THEN 'Tuesday'
         ELSE 'Other'
       END AS day_name
FROM schedule;

-- Searched CASE: any condition
SELECT CASE
         WHEN day_number BETWEEN 1 AND 5 THEN 'Weekday'
         WHEN day_number IN (6, 7)        THEN 'Weekend'
       END AS day_type
FROM schedule;

Hantering av NULL – varför Searched CASE är bättre

Simple CASE använder = internt, och NULL = NULL blir aldrig TRUE i SQL. Därför kan Simple CASE inte matcha en NULL-kolumn. Med Searched CASE kan du skriva WHEN column IS NULL THEN ..., vilket fungerar korrekt.

-- Simple CASE: NULL branch never matches
SELECT CASE manager_id
         WHEN NULL THEN 'No manager'   -- this will NEVER fire
         ELSE 'Has manager'
       END
FROM employees;

-- Searched CASE: correct NULL check
SELECT CASE
         WHEN manager_id IS NULL THEN 'No manager'
         ELSE 'Has manager'
       END AS manager_status
FROM employees;

Kombinera kolumner i Searched CASE

En stor styrka hos Searched CASE är att varje WHEN-gren kan referera till helt olika kolumner eller anropa funktioner. Det gör att du kan uttrycka komplexa affärsregler som Simple CASE inte kan hantera alls.

SELECT
  customer_name,
  total_orders,
  total_spent,
  CASE
    WHEN total_spent > 10000 AND total_orders > 20 THEN 'VIP'
    WHEN total_spent > 5000                        THEN 'Gold'
    WHEN total_orders > 10                         THEN 'Silver'
    ELSE 'Standard'
  END AS tier
FROM customers;

Använda CASE i ORDER BY

Båda CASE-formerna kan användas i ORDER BY för att skapa en anpassad sorteringsordning som inte finns i datan. Här mappar ett Simple CASE prioritetsnamn till tal, så att raderna sorteras efter affärsprioritet i stället för alfabetiskt.

SELECT ticket_id, subject, priority
FROM support_tickets
ORDER BY
  CASE priority
    WHEN 'critical' THEN 1
    WHEN 'high'     THEN 2
    WHEN 'medium'   THEN 3
    WHEN 'low'      THEN 4
    ELSE 5
  END ASC;

CASE i aggregeringsfunktioner

Att kapsla in ett Searched CASE i SUM eller COUNT är ett klassiskt mönster för villkorad aggregering – ibland kallat en pivot. Det gör att du kan skapa flera kategorisummor i en enda genomläsning i stället för att köra flera frågor.

SELECT
  department,
  COUNT(*) AS total_employees,
  SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count,
  SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,
  SUM(CASE WHEN salary > 70000 THEN salary ELSE 0 END) AS high_earner_payroll
FROM employees
GROUP BY department;

Välja rätt form

En praktisk tumregel:

Använd Simple CASE när du mappar en enda kolumn till en fast uppsättning kända värden – det är kortare och lättare att läsa.
Använd Searched CASE för allt annat: intervall, NULL-kontroller, logik med flera kolumner eller funktionsanrop i villkoren.

När du är osäker fungerar Searched CASE alltid. Du kan till och med skriva om vilket Simple CASE som helst som ett Searched CASE – men inte tvärtom.

-- These two queries return identical results

-- Simple CASE (concise for equality)
SELECT CASE region_code
         WHEN 'US' THEN 'United States'
         WHEN 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

-- Equivalent Searched CASE
SELECT CASE
         WHEN region_code = 'US' THEN 'United States'
         WHEN region_code = 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

Snabbtest

Testa dina kunskaper om Simple CASE och Searched CASE.

Repetition av lektionen

Det här lärde du dig i lektionen:

Simple CASE — placera ett uttryck efter CASE; varje WHEN kontrollerar om uttrycket är lika med ett specifikt värde. Det passar bäst när en enda kolumn ska mappas till en fast lista med etiketter.

Searched CASE — inget uttryck efter CASE; varje WHEN innehåller ett fullständigt booleskt villkor. Formen stöder intervall, NULL-kontroller, logik med flera kolumner och funktionsanrop.

Båda formerna utvärderar grenarna uppifrån och ned och returnerar resultatet från den första TRUE-grenen. När ingen gren matchar och ELSE saknas blir resultatet NULL. För maximal flexibilitet är Searched CASE alltid det säkra valet – det kan göra allt som Simple CASE kan och mer därtill.

Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
46
Lektioner
183

Vanliga frågor

Är lektionen ”Sökta kontra enkla CASE” gratis?

Ja – hela texten till ”Sökta kontra enkla CASE” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i SQL Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i SQL Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Sökta kontra enkla CASE”?

Två sätt att skriva CASE. Ni övar på SQL Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig SQL Academy?

Du behöver inga förkunskaper. Utbildningen i SQL Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Sökta kontra enkla CASE”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här SQL Academy-lektionen?

Ja. Varje SQL Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. CASE-uttrycket
  2. Sökta kontra enkla CASE
  3. Gruppera och etikettera data
  4. CASE i ORDER BY och aggregat
← Tillbaka till SQL Academy