Sökta kontra enkla CASE
Två sätt att skriva CASE.
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.
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
- CASE-uttrycket
- Sökta kontra enkla CASE
- Gruppera och etikettera data
- CASE i ORDER BY och aggregat