Case in MySQL: 11 praktische voorbeelden

Laatste update: Mei 25 2025
  • Met de CASE-functie in MySQL kunt u voorwaardelijke evaluaties uitvoeren en aangepaste resultaten retourneren.
  • Met de WHEN-clausule kunnen meerdere voorwaarden worden gebruikt en met ELSE kunnen null-waarden worden verwerkt.
  • CASE kan worden gecombineerd met aggregatiefuncties om query's te optimaliseren.
  • Het volgen van best practices bij het gebruik van CASE is essentieel om de prestaties en leesbaarheid van uw code te behouden.
Case in MySQL

De CASE-functie in MySQL is een krachtig hulpmiddel waarmee u voorwaardelijke bewerkingen binnen uw query's kunt uitvoeren. Met CASE kunt u verschillende voorwaarden evalueren en specifieke resultaten retourneren, afhankelijk van het feit of aan die voorwaarden is voldaan of niet. We gaan deze functie uitleggen aan de hand van praktische voorbeelden, zodat u het gebruik van CASE in MySQL onder de knie krijgt en uw vaardigheden op het gebied van databasebeheer verbetert.

Wat is de CASE-functie in MySQL?

De CASE-functie in MySQL is een voorwaardelijke expressie waarmee je verschillende voorwaarden kunt evalueren en specifieke resultaten kunt retourneren, afhankelijk van of aan die voorwaarden is voldaan. Het is een zeer handig hulpmiddel voor het uitvoeren van logische bewerkingen binnen je query's en het verkrijgen van aangepaste resultaten op basis van specifieke criteria.

CASE werkt op een vergelijkbare manier als een reeks IF-THEN-ELSE-instructies, waarbij u meerdere voorwaarden kunt opgeven en de waarden die moeten worden geretourneerd wanneer aan die voorwaarden wordt voldaan. Als aan geen van de voorwaarden wordt voldaan, kunt u een standaardwaarde definiëren met behulp van de ELSE-clausule.

Basis CASE-syntaxis in MySQL

De basis-syntaxis van de CASE-functie in MySQL is als volgt:

CASE
    WHEN condición1 THEN resultado1
    WHEN condición2 THEN resultado2
    ...
    WHEN condiciónN THEN resultadoN
    ELSE resultado_predeterminado
END

Hier volgt een uitleg van elk onderdeel van de syntaxis:

  • WHEN: Geeft de te evalueren voorwaarde aan.
  • THEN: Geeft het resultaat aan dat wordt geretourneerd als aan de overeenkomstige voorwaarde wordt voldaan.
  • ELSE: (Optioneel) Geeft aan welk resultaat moet worden geretourneerd als aan geen van de bovenstaande voorwaarden is voldaan.
  • END: Markeert het einde van de CASE-expressie.

Nu u de basis van de syntaxis kent, gaan we enkele praktische voorbeelden bekijken!

Voorbeeld 1: Classificeer studenten volgens hun gemiddelde

Stel dat u een tabel hebt met de naam “studenten” met de volgende kolommen: “id”, “naam” en “avg”. U wilt studenten rangschikken op basis van hun GPA met behulp van de CASE-functie. Je kunt het op deze manier doen:

SELECT nombre,
       CASE
           WHEN promedio >= 90 THEN 'Sobresaliente'
           WHEN promedio >= 80 THEN 'Notable'
           WHEN promedio >= 70 THEN 'Bien'
           WHEN promedio >= 60 THEN 'Suficiente'
           ELSE 'Insuficiente'
       END AS clasificacion
FROM estudiantes;

In dit voorbeeld gebruiken we CASE om het gemiddelde van elke student te evalueren en een bijbehorende rang toe te wijzen. Als het gemiddelde groter is dan of gelijk is aan 90, wordt het geclassificeerd als 'Uitstekend'. Als het tussen de 80 en 89 ligt, wordt het geclassificeerd als 'Opmerkelijk', enzovoort. Als het gemiddelde lager is dan 60, wordt het als 'onvoldoende' geclassificeerd.

Voorbeeld 2: Productcategorieën toewijzen

Stel je voor dat je een tabel hebt met de naam “producten” met de kolommen “id”, “naam” en “prijs”. U wilt aan elk product een categorie toewijzen op basis van de prijs met behulp van de functie CASE. Je kunt het op deze manier doen:

SELECT nombre,
       CASE
           WHEN precio > 1000 THEN 'Premium'
           WHEN precio > 500 THEN 'Gama alta'
           WHEN precio > 100 THEN 'Gama media'
           ELSE 'Económico'
       END AS categoria
FROM productos;

In dit voorbeeld gebruiken we CASE om de prijs van elk product te evalueren en een bijbehorende categorie toe te wijzen. Als de prijs hoger is dan 1000, wordt deze geclassificeerd als "Premium". Als het tussen de 500 en 1000 ligt, wordt het geclassificeerd als 'High-End', enzovoort. Als de prijs lager is dan of gelijk is aan 100, wordt deze geclassificeerd als "economisch".

Voorbeeld 3: Bereken kortingen op basis van de gekochte hoeveelheid

Stel dat u een tabel hebt met de naam “verkoop” met de kolommen “id”, “product” en “hoeveelheid”. U wilt de korting berekenen die bij elke verkoop wordt toegepast op basis van de gekochte hoeveelheid met behulp van de functie CASE. Je kunt het op deze manier doen:

SELECT producto,
       CASE
           WHEN cantidad >= 100 THEN 0.20
           WHEN cantidad >= 50 THEN 0.15
           WHEN cantidad >= 20 THEN 0.10
           ELSE 0
       END AS descuento
FROM ventas;

In dit voorbeeld gebruiken we CASE om de gekochte hoeveelheid van elk product te evalueren en de bijbehorende korting te berekenen. Indien de hoeveelheid groter of gelijk is aan 100, wordt een korting van 20% toegepast. Als het bedrag tussen de 50 en 99 ligt, wordt er een korting van 15% toegepast, enzovoort. Indien de hoeveelheid minder dan 20 bedraagt, is er geen korting van toepassing.

Voorbeeld 4: Numerieke waarden omzetten naar bereiken

Stel je voor dat je een tabel hebt met de naam “werknemers” met de kolommen “id”, “naam” en “leeftijd”. U wilt de leeftijden van werknemers omzetten naar leeftijdscategorieën met behulp van de CASE-functie. Je kunt het op deze manier doen:

SELECT nombre,
       CASE
           WHEN edad >= 60 THEN 'Senior'
           WHEN edad >= 40 THEN 'Mediana edad'
           WHEN edad >= 20 THEN 'Joven'
           ELSE 'Menor de edad'
       END AS rango_edad
FROM empleados;

In dit voorbeeld gebruiken we CASE om de leeftijd van elke werknemer te evalueren en een bijbehorend bereik toe te wijzen. Als de leeftijd 60 jaar of ouder is, wordt deze geclassificeerd als 'Senior'. Als u tussen de 40 en 59 jaar oud bent, wordt u geclassificeerd als ‘middelbare leeftijd’, enzovoort. Als de leeftijd onder de 20 jaar ligt, wordt het aangemerkt als 'minderjarig'.

  Voordelen van het gebruik van databases in een bedrijf

Voorbeeld 5: Labels toewijzen op basis van meerdere voorwaarden

Stel dat u een tabel hebt met de naam “orders” met de kolommen “id”, “klant”, “totaal” en “status”. U wilt labels toewijzen aan elke bestelling op basis van het totaalbedrag en de status met behulp van de CASE-functie met meerdere voorwaarden. Je kunt het op deze manier doen:

SELECT cliente,
       CASE
           WHEN total > 1000 AND estado = 'Entregado' THEN 'VIP'
           WHEN total > 500 AND estado = 'Entregado' THEN 'Prioritario'
           WHEN estado = 'Pendiente' THEN 'En proceso'
           ELSE 'Regular'
       END AS etiqueta
FROM pedidos;

In dit voorbeeld gebruiken we CASE met meerdere voorwaarden om zowel het totaal als de status van elke bestelling te evalueren en een passend label toe te wijzen. Als het totaal groter is dan 1000 en de status is “Geleverd”, wordt dit gemarkeerd als “VIP”. Als het totaal groter is dan 500 en de status is “Geleverd”, dan wordt dit getagd als “Prioriteit”. Als de status “In behandeling” is, wordt deze gemarkeerd als “In behandeling”. Anders wordt het gemarkeerd als 'Normaal'.

Voorbeeld 6: Null-waarden verwerken met CASE

Stel je voor dat je een tabel hebt met de naam “klanten” met de kolommen “id”, “naam” en “e-mail”. Sommige klanten hebben mogelijk geen e-mailadres in hun bestand, wat resulteert in null-waarden in de kolom 'e-mail'. U kunt de CASE-functie gebruiken om deze null-waarden op de juiste manier te verwerken. Bijvoorbeeld:

SELECT nombre,
       CASE
           WHEN email IS NULL THEN 'Sin correo electrónico'
           ELSE email
       END AS informacion_contacto
FROM clientes;

In dit voorbeeld gebruiken we CASE om te evalueren of de kolom 'e-mail' null is. Als dit veld nul is, wordt de tekst 'Geen e-mail' weergegeven. Anders wordt de werkelijke waarde van de kolom 'e-mail' weergegeven. Hierdoor kunnen wij zaken waarbij contactgegevens ontbreken, op een soepele manier afhandelen.

Voorbeeld 7: CASE combineren met geaggregeerde functies

De CASE-functie kan ook worden gecombineerd met geaggregeerde functies zoals SUM, AVG, COUNT, enz. Stel dat u een tabel hebt met de naam “verkoop” met de kolommen “id”, “product”, “hoeveelheid” en “prijs”. U wilt de totale omzet per productcategorie berekenen met behulp van CASE en SUM. Je kunt het op deze manier doen:

SELECT
    SUM(CASE WHEN precio > 1000 THEN cantidad ELSE 0 END) AS ventas_premium,
    SUM(CASE WHEN precio <= 1000 THEN cantidad ELSE 0 END) AS ventas_regulares
FROM ventas;

In dit voorbeeld gebruiken we CASE binnen de SUM-functie om de totale omzet per productcategorie te berekenen. Als de prijs hoger is dan 1000, wordt het bedrag toegevoegd aan “premium_sales”. Als de prijs lager is dan of gelijk is aan 1000, wordt het bedrag toegevoegd aan “regular_sales”. Hiermee kunnen we subtotalen verkrijgen op basis van specifieke omstandigheden.

Voorbeeld 8: CASE gebruiken in WHERE-clausules

De CASE-functie kan ook in de WHERE-component worden gebruikt om records te filteren op basis van specifieke voorwaarden. Stel dat u een tabel hebt met de naam “werknemers” met de kolommen “id”, “naam”, “afdeling” en “salaris”. U wilt zich richten op werknemers die boven het gemiddelde salaris van hun afdeling liggen. Je kunt het op deze manier doen:

SELECT nombre, departamento, salario
FROM empleados
WHERE salario > (
    SELECT AVG(CASE WHEN e.departamento = empleados.departamento THEN e.salario ELSE NULL END)
    FROM empleados e
);

In dit voorbeeld gebruiken we CASE in de subquery om het gemiddelde salaris per afdeling te berekenen. De subquery vergelijkt de afdeling van elke werknemer met de huidige afdeling en houdt alleen rekening met de salarissen van werknemers in dezelfde afdeling om het gemiddelde te berekenen. Vervolgens filteren we in de hoofdquery de medewerkers eruit waarvan het salaris hoger is dan het gemiddelde dat voor hun afdeling is berekend.

Voorbeeld 9: Berekende kolommen genereren met CASE

De CASE-functie kan ook worden gebruikt om berekende kolommen te genereren op basis van specifieke voorwaarden. Stel dat u een tabel hebt met de naam “orders” met de kolommen “id”, “klant”, “totaal” en “datum”. U wilt een extra kolom met de naam 'korting' maken waarin verschillende kortingspercentages worden toegepast, afhankelijk van het totaalbedrag van de bestelling. Je kunt het op deze manier doen:

SELECT id, cliente, total,
       CASE
           WHEN total > 1000 THEN total * 0.10
           WHEN total > 500 THEN total * 0.05
           ELSE 0
       END AS descuento,
       fecha
FROM pedidos;

In dit voorbeeld gebruiken we CASE om de berekende kolom ‘korting’ te genereren. Indien de totale bestelling groter is dan 1000, wordt er een korting van 10% toegepast. Indien het totaalbedrag groter is dan 500, wordt er een korting van 5% toegepast. In alle andere gevallen is er geen korting van toepassing. Deze berekende kolom kan worden gebruikt voor verdere analyse of om aanvullende informatie in de queryresultaten weer te geven.

  Voorbeelden van MySQL multi-tabel query's

Voorbeeld 10: Complexe logica implementeren met geneste CASE-instructies

In sommige gevallen moet u complexere voorwaardelijke logica implementeren met behulp van geneste CASE-instructies. Stel dat u een tabel hebt met de naam “studenten” met de kolommen “id”, “naam”, “wiskundecijfer” en “taalcijfer”. U wilt elke leerling een categorie toewijzen op basis van zijn of haar cijfers voor wiskunde en taal. Je kunt het op deze manier doen:

SELECT nombre,
       CASE
           WHEN nota_matematicas >= 90 AND nota_lenguaje >= 90 THEN 'Excelente'
           WHEN nota_matematicas >= 80 AND nota_lenguaje >= 80 THEN 'Notable'
           ELSE
               CASE
                   WHEN nota_matematicas >= 70 OR nota_lenguaje >= 70 THEN 'Regular'
                   ELSE 'Necesita mejorar'
               END
       END AS categoria
FROM estudiantes;

In dit voorbeeld gebruiken we geneste CASE-instructies om complexere voorwaardelijke logica te implementeren. Eerst evalueren we of zowel de cijfers voor wiskunde als voor taal hoger zijn dan of gelijk zijn aan 90. Als dat het geval is, wordt de categorie 'Uitstekend' toegekend. Vervolgens evalueren we of beide cijfers hoger of gelijk zijn aan 80. Als dat het geval is, wordt de categorie 'Opmerkelijk' toegekend. Als aan geen van de bovenstaande voorwaarden is voldaan, gaan we naar het volgende niveau van geneste CASE. Hierbij evalueren we of minstens één van de cijfers (wiskunde of taal) hoger of gelijk is aan 70. Indien dit het geval is, wordt de categorie “Regulier” toegewezen. Als aan geen van de voorwaarden is voldaan, wordt de categorie ‘Verbetering nodig’ toegewezen.

Voorbeeld 11: Query's optimaliseren met CASE

De CASE-functie kan ook worden gebruikt om query's te optimaliseren en meerdere afzonderlijke query's te voorkomen. Stel dat u een tabel hebt met de naam “verkoop” met de kolommen “id”, “product”, “hoeveelheid” en “datum”. U wilt de totale omzet per maand en de totale omzet per jaar in één query weergeven. Je kunt het op deze manier doen:

SELECT
    SUM(CASE WHEN MONTH(fecha) = 1 THEN cantidad ELSE 0 END) AS ventas_enero,
    SUM(CASE WHEN MONTH(fecha) = 2 THEN cantidad ELSE 0 END) AS ventas_febrero,
    -- ... (continúa para los demás meses)
    SUM(CASE WHEN YEAR(fecha) = 2022 THEN cantidad ELSE 0 END) AS ventas_2022,
    SUM(CASE WHEN YEAR(fecha) = 2023 THEN cantidad ELSE 0 END) AS ventas_2023
FROM ventas;

In dit voorbeeld gebruiken we CASE binnen de SUM-functie om in één query de verkooptotalen per maand en per jaar te berekenen. Voor elke maand beoordelen we of de maand van de verkoopdatum overeenkomt met de specifieke maand en tellen het bijbehorende bedrag op. Op dezelfde manier beoordelen we voor elk jaar of het jaar van de verkoopdatum overeenkomt met het specifieke jaar en tellen we het bijbehorende bedrag erbij op. Hierdoor kunnen we alle totalen in één efficiënte query verkrijgen.

Aanbevolen procedures bij het gebruik van CASE in MySQL

  • Gebruik CASE alleen als het nodig is en vermijd overmatig gebruik, omdat overmatig gebruik de queryprestaties kan beïnvloeden.
  • Probeer CASE-expressies zo eenvoudig en leesbaar mogelijk te houden. Als de logica te complex wordt, kunt u overwegen deze op te splitsen in meerdere CASE-expressies of subquery's te gebruiken.
  • Gebruik CASE in combinatie met andere MySQL-clausules en -functies om hun potentieel volledig te benutten, zoals in WHERE, ORDER BY, GROEP DOOR en aggregatiefuncties.
  • Wees voorzichtig bij het nesten van meerdere CASE-expressies, omdat het uw code lastiger leesbaar en onderhoudbaar kan maken. Voeg indien nodig toelichtende opmerkingen toe.

Veelvoorkomende fouten bij het gebruik van CASE en hoe u deze kunt vermijden

  • Vergeet de ELSE-clausule: Zorg ervoor dat u de ELSE-clausule opneemt voor gevallen waarin aan geen van de voorwaarden is voldaan. Als dit niet wordt opgegeven, wordt standaard NULL toegewezen.
  • Sluit de CASE-expressie niet af met END: Vergeet niet om de CASE-expressie altijd te beëindigen met het trefwoord END. Anders krijgt u een syntaxisfout.
  • Incompatibele gegevenstypen gebruiken: Zorg ervoor dat de resultaten die door elke WHEN-voorwaarde worden geretourneerd, van hetzelfde gegevenstype zijn. Als u gegevenstypen combineert, kunnen er onverwachte resultaten of fouten optreden.
  • Zonder rekening te houden met de volgorde van de omstandigheden: Voorwaarden in CASE worden geëvalueerd in de volgorde waarin ze voorkomen. Zorg ervoor dat u de meer specifieke voorwaarden voor de meer algemene voorwaarden stelt om de gewenste resultaten te krijgen.
  Veelvoorkomende fouten in een database: oorzaken, fouten en oplossingen

Alternatieven voor CASE in MySQL

Hoewel CASE een krachtige functie is, zijn er in bepaalde gevallen een aantal alternatieven die u wellicht wilt overwegen:

  • ALS-expressiesDe ALS-functie in MySQL Hiermee kunt u een voorwaarde evalueren en een waarde retourneren als de voorwaarde waar is en een andere waarde als deze onwaar is. Het is een eenvoudiger alternatief voor gevallen van unieke aandoeningen.
  • Opzoektabellen:In sommige gevallen kunt u aparte opzoektabellen gebruiken om de voorwaarden en de bijbehorende resultaten op te slaan. Vervolgens kunt u deze tabellen aan de hoofdtabel koppelen om de gewenste resultaten te verkrijgen.
  • Opgeslagen weergaven of functies: Als u complexe query's hebt waarbij CASE regelmatig wordt gebruikt, kunt u overwegen om weergaven of opgeslagen functies om die logica te verduidelijken en daaropvolgende query's te vereenvoudigen.

Veelgestelde vragen over CASE in MySQL

1. Kan ik CASE gebruiken in combinatie met andere MySQL-functies?

Ja, u kunt CASE gebruiken in combinatie met andere MySQL-functies, zoals aggregatiefuncties (SUM, AVG, COUNT, enz.), datum- en tijdfuncties (YEAR, MONTH, DAY, enz.), tekenreeksfuncties (CONCAT, SUBSTRING, LENGTH, enz.) en meer.

2. Is er een limiet aan het aantal WHEN-voorwaarden dat ik in een CASE-expressie kan gebruiken?

Er is geen specifieke limiet aan het aantal WHEN-voorwaarden dat u in een CASE-expressie kunt gebruiken. Houd er echter rekening mee dat een groot aantal voorwaarden de leesbaarheid van de code en de queryprestaties kunnen beïnvloeden. Als u veel voorwaarden hebt, kunt u overwegen de logica te vereenvoudigen of deze op te splitsen in meerdere CASE-expressies.

3. Kan ik subquery's gebruiken binnen een CASE-expressie?

Ja, u kunt subquery's gebruiken binnen een CASE-expressie, zowel in WHEN-voorwaarden als in THEN-resultaten. Hiermee kunt u complexere berekeningen of vergelijkingen uitvoeren op basis van de resultaten van andere query's.

4. Hoe kan ik null-waarden verwerken in een CASE-expressie?

U kunt null-waarden in een CASE-expressie verwerken met behulp van de voorwaarde IS NULL of IS NOT NULL. U kunt bijvoorbeeld CASE WHEN kolom IS NULL THEN 'Null value' ELSE kolom END gebruiken om een ​​specifieke waarde toe te wijzen wanneer de kolom null is en de werkelijke waarde te retourneren wanneer dit niet het geval is.

Caseconclusies in MySQL

De CASE-functie in MySQL is een krachtig en veelzijdig hulpmiddel waarmee u voorwaardelijke bewerkingen binnen uw query's kunt uitvoeren. Met CASE kunt u verschillende voorwaarden evalueren en specifieke resultaten retourneren, afhankelijk van het feit of aan die voorwaarden is voldaan of niet. De voorbeelden in dit artikel geven u een solide basis om CASE in uw eigen query's te gebruiken en aan te passen aan uw specifieke behoeften.

Houd bij het gebruik van CASE rekening met de beste werkwijzen, zoals het eenvoudig en leesbaar houden van expressies, het combineren van CASE met andere MySQL-clausules en -functies , en het overwegen van alternatieven waar nodig. Met oefening en experimenteren zult u CASE in MySQL optimaal kunnen benutten en de efficiëntie en leesbaarheid van uw query's verbeteren.

Als u nog vragen hebt of meer voorbeelden nodig hebt, kunt u gerust naar aanvullende bronnen zoeken of de officiële MySQL-documentatie raadplegen. Blijf de kracht van CASE ontdekken en benutten in uw databaseprojecten!

Aanvullende aanvullende informatie: