Caz în MySQL: 11 exemple practice

Ultima actualizare: Mai 25 2025
  • Funcția CASE din MySQL vă permite să efectuați evaluări condiționate și să returnați rezultate personalizate.
  • Cu clauza WHEN se pot utiliza mai multe condiții, iar valorile nule pot fi gestionate cu ELSE.
  • CASE poate fi combinat cu funcții de agregare pentru a optimiza interogările.
  • Respectarea celor mai bune practici atunci când se utilizează CASE este esențială pentru menținerea performanței și a lizibilității codului.
Caz în Mysql

Funcția CASE din MySQL este un instrument puternic care vă permite să efectuați operații condiționate în cadrul interogărilor dvs. Cu CASE, puteți evalua diferite condiții și puteți returna rezultate specifice, în funcție de dacă acele condiții sunt îndeplinite sau nu. Vom explica această funcție cu exemple practice care vă vor ajuta să stăpâniți utilizarea CASE în MySQL și să vă îmbunătățiți abilitățile în gestionarea bazelor de date.

Ce este funcția CASE în MySQL?

Funcția CASE din MySQL este o expresie condițională ce permite evaluarea diferitelor condiții și returnarea unor rezultate specifice, în funcție de îndeplinirea acestor condiții. Este un instrument foarte util pentru efectuarea de operații logice în cadrul interogărilor și obținerea de rezultate personalizate pe baza unor criterii specifice.

CASE funcționează în mod similar cu o serie de instrucțiuni IF-THEN-ELSE, în care puteți specifica mai multe condiții și valorile de returnat atunci când acele condiții sunt îndeplinite. Dacă niciuna dintre condiții nu este îndeplinită, puteți defini o valoare implicită folosind clauza ELSE.

Sintaxa de bază CASE în MySQL

Sintaxa de bază a funcției CASE în MySQL este următoarea:

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

Iată o explicație a fiecărei părți a sintaxei:

  • WHEN: Specifică condiția care trebuie evaluată.
  • THEN: Indică rezultatul care va fi returnat dacă este îndeplinită condiția corespunzătoare.
  • ELSE: (Opțional) Specifică rezultatul de returnat dacă niciuna dintre condițiile de mai sus nu este îndeplinită.
  • END: marchează sfârșitul expresiei CASE.

Acum că știți sintaxa de bază, să explorăm câteva exemple practice!

Exemplul 1: Clasificați elevii în funcție de media lor

Să presupunem că aveți un tabel numit „studenti” cu următoarele coloane: „id”, „name” și „avg”. Doriți să clasați studenții după GPA folosind funcția CASE. O poți face astfel:

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;

În acest exemplu, folosim CASE pentru a evalua media fiecărui student și a atribui un rang corespunzător. Dacă media este mai mare sau egală cu 90, aceasta este clasificată drept „Remarcabilă”. Dacă este între 80 și 89, este clasificat ca „Remarcabil” și așa mai departe. Dacă media este mai mică de 60, este clasificată drept „Insuficient”.

Exemplul 2: Atribuirea categoriilor de produse

Imaginați-vă că aveți un tabel numit „produse” cu coloanele „id”, „nume” și „preț”. Doriți să atribuiți o categorie fiecărui produs în funcție de preț, folosind funcția CASE. O poți face astfel:

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;

În acest exemplu, folosim CASE pentru a evalua prețul fiecărui produs și a atribui o categorie corespunzătoare. Dacă prețul este mai mare de 1000, acesta este clasificat ca „Premium”. Dacă este între 500 și 1000, este clasificat ca „High-End” și așa mai departe. Dacă prețul este mai mic sau egal cu 100, acesta este clasificat ca „Economic”.

Exemplul 3: Calculați reducerile în funcție de cantitatea achiziționată

Să presupunem că aveți un tabel numit „vânzări” cu coloanele „id”, „produs” și „cantitate”. Doriți să calculați reducerea aplicată fiecărei vânzări pe baza cantității achiziționate folosind funcția CASE. O poți face astfel:

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;

În acest exemplu, folosim CASE pentru a evalua cantitatea achiziționată a fiecărui produs și pentru a calcula reducerea corespunzătoare. Dacă cantitatea este mai mare sau egală cu 100, se aplică o reducere de 20%. Dacă este între 50 și 99, se aplică o reducere de 15% și așa mai departe. Dacă cantitatea este mai mică de 20, nu se aplică nicio reducere.

Exemplul 4: Conversia valorilor numerice în intervale

Imaginați-vă că aveți un tabel numit „angajați” cu coloanele „id”, „nume” și „vârstă”. Doriți să convertiți vârstele angajaților în intervale folosind funcția CASE. O poți face astfel:

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;

În acest exemplu, folosim CASE pentru a evalua vârsta fiecărui angajat și a atribui un interval corespunzător. Dacă vârsta este mai mare sau egală cu 60 de ani, aceasta este clasificată drept „Senior”. Dacă aveți între 40 și 59 de ani, sunteți clasificat ca „de vârstă mijlocie” și așa mai departe. Dacă vârsta este mai mică de 20 de ani, este clasificată drept „Minor”.

  Unde în MySQL cu exemple: Interogări condiționale principale

Exemplul 5: Atribuirea etichetelor pe baza mai multor condiții

Să presupunem că aveți un tabel numit „comenzi” cu coloanele „id”, „client”, „total” și „stare”. Doriți să atribuiți etichete fiecărei comenzi în funcție de totalul și starea acesteia, folosind funcția CASE cu mai multe condiții. O poți face astfel:

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;

În acest exemplu, folosim CASE cu mai multe condiții pentru a evalua atât totalul, cât și starea fiecărei comenzi și pentru a atribui o etichetă adecvată. Dacă totalul este mai mare de 1000 și starea este „Livrat”, este etichetat ca „VIP”. Dacă totalul este mai mare de 500 și starea este „Livrat”, este etichetat ca „Prioritate”. Dacă starea este „În așteptare”, este etichetată ca „În procesare”. În caz contrar, este etichetat ca „Obișnuit”.

Exemplul 6: Gestionarea valorilor nule cu CASE

Imaginați-vă că aveți un tabel numit „clienți” cu coloanele „id”, „nume” și „e-mail”. Este posibil ca unii clienți să nu aibă un e-mail în dosar, ceea ce ar duce la valori nule în coloana „e-mail”. Puteți utiliza funcția CASE pentru a gestiona aceste valori nule în mod corespunzător. De exemplu:

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

În acest exemplu, folosim CASE pentru a evalua dacă coloana „e-mail” este nulă. Dacă nul, este afișat textul „Fără e-mail”. În caz contrar, este afișată valoarea reală a coloanei „e-mail”. Acest lucru ne permite să gestionăm cu grație cazurile în care informațiile de contact lipsesc.

Exemplul 7: Combinarea CASE cu funcții agregate

Funcția CASE poate fi combinată și cu funcții agregate, cum ar fi SUM, AVG, COUNT etc. Să presupunem că aveți un tabel numit „vânzări” cu coloanele „id”, „produs”, „cantitate” și „preț”. Doriți să calculați vânzările totale pe categorii de produse folosind CASE și SUM. O poți face astfel:

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;

În acest exemplu, folosim CASE în cadrul funcției SUM pentru a calcula vânzările totale pe categorii de produse. Dacă prețul este mai mare de 1000, suma este adăugată la „premium_sales”. Dacă prețul este mai mic sau egal cu 1000, suma se adaugă la „vânzări_regulate”. Acest lucru ne permite să obținem subtotaluri pe baza unor condiții specifice.

Exemplul 8: Utilizarea CASE în clauzele WHERE

Funcția CASE poate fi folosită și în clauza WHERE pentru a filtra înregistrările pe baza unor condiții specifice. Să presupunem că aveți un tabel numit „angajați” cu coloanele „id”, „nume”, „departament” și „salariu”. Doriți să vizați angajații al căror salariu este peste media departamentului lor. O poți face astfel:

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
);

În acest exemplu, folosim CASE în subinterogare pentru a calcula salariul mediu pe departament. Subinterogarea compară departamentul fiecărui angajat cu departamentul curent și ia în considerare doar salariile angajaților din același departament pentru a calcula media. Apoi, în interogarea principală, eliminăm angajații al căror salariu este mai mare decât media calculată pentru departamentul lor.

Exemplul 9: Generarea coloanelor calculate cu CASE

Funcția CASE poate fi folosită și pentru a genera coloane calculate pe baza unor condiții specifice. Să presupunem că aveți un tabel numit „comenzi” cu coloanele „id”, „client”, „total” și „data”. Doriți să creați o coloană suplimentară numită „reducere” care să aplice diferite procente de reducere în funcție de totalul comenzii. O poți face astfel:

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;

În acest exemplu, folosim CASE pentru a genera coloana „reducere” calculată. Dacă comanda totală este mai mare de 1000, se aplică o reducere de 10%. Dacă totalul este mai mare de 500, se aplică o reducere de 5%. În orice alt caz, nu se aplică nicio reducere. Această coloană calculată poate fi utilizată pentru analize suplimentare sau pentru a afișa informații suplimentare în rezultatele interogării.

  Baze de date Excel: strategii eficiente pentru îmbunătățirea managementului datelor

Exemplul 10: Implementarea logicii complexe cu instrucțiuni CASE imbricate

În unele cazuri, poate fi necesar să implementați o logică condiționată mai complexă folosind instrucțiuni CASE imbricate. Să presupunem că aveți un tabel numit „studenti” cu coloanele „id”, „name”, „math_grade” și „language_grade”. Doriți să atribuiți o categorie fiecărui elev în funcție de notele lor la matematică și limbă. O poți face astfel:

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;

În acest exemplu, folosim instrucțiuni CASE imbricate pentru a implementa o logică condiționată mai complexă. În primul rând, evaluăm dacă atât notele la matematică, cât și la limbă sunt mai mari sau egale cu 90. Dacă da, se atribuie categoria „Excelent”. Apoi, evaluăm dacă ambele note sunt mai mari sau egale cu 80. Dacă da, se atribuie categoria „Notabil”. Dacă niciuna dintre condițiile de mai sus nu este îndeplinită, trecem la următorul nivel de CASE imbricat. Aici evaluăm dacă cel puțin una dintre note (matematică sau limbă) este mai mare sau egală cu 70. Dacă da, se atribuie categoria „Regular”. Dacă niciuna dintre condiții nu este îndeplinită, se atribuie categoria „Necesită îmbunătățire”.

Exemplul 11: Optimizarea interogărilor cu CASE

Funcția CASE poate fi folosită și pentru a optimiza interogările și pentru a evita mai multe interogări separate. Să presupunem că aveți un tabel numit „vânzări” cu coloanele „id”, „produs”, „cantitate” și „data”. Doriți să obțineți vânzările totale pe lună și vânzările totale pe an într-o singură interogare. O poți face astfel:

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;

În acest exemplu, folosim CASE în cadrul funcției SUM pentru a calcula totalul vânzărilor pe lună și pe an într-o singură interogare. Pentru fiecare lună, evaluăm dacă luna datei vânzării se potrivește cu luna specifică și adăugăm suma corespunzătoare. În mod similar, pentru fiecare an, evaluăm dacă anul datei vânzării se potrivește cu anul specific și adăugăm suma corespunzătoare. Acest lucru ne permite să obținem toate totalurile într-o singură interogare eficientă.

Cele mai bune practici atunci când utilizați CASE în MySQL

  • Folosiți CASE numai atunci când este necesar și evitați utilizarea excesivă, deoarece poate afecta performanța interogării dacă este utilizat în mod excesiv.
  • Încercați să păstrați expresiile CASE cât mai simple și lizibile posibil. Dacă logica devine prea complexă, luați în considerare împărțirea ei în mai multe expresii CASE sau utilizarea subinterogărilor.
  • Utilizați CASE în combinație cu alte clauze și funcții MySQL pentru a profita din plin de potențialul lor, cum ar fi în WHERE, ORDER BY, A SE GRUPA CU și funcții de agregare.
  • Fiți atenți când imbricați mai multe expresii CASE, deoarece poate face codul dificil de citit și de întreținut. Dacă este necesar, adăugați comentarii explicative.

Greșeli frecvente când utilizați CASE și cum să le evitați

  • Uitați de clauza ELSE: Asigurați-vă că includeți clauza ELSE pentru a gestiona cazurile în care niciuna dintre condiții nu este îndeplinită. Dacă nu este specificat, NULL va fi atribuit implicit.
  • Nu terminați expresia CASE cu END: Nu uitați să terminați întotdeauna expresia CASE cu cuvântul cheie END. În caz contrar, veți obține o eroare de sintaxă.
  • Folosind tipuri de date incompatibile: Asigurați-vă că rezultatele returnate de fiecare condiție WHEN sunt de același tip de date. Dacă amestecați tipuri de date, este posibil să obțineți rezultate sau erori neașteptate.
  • Fără a ține cont de ordinea condițiilor: Condițiile din CASE sunt evaluate în ordinea în care apar. Asigurați-vă că plasați condițiile mai specifice înaintea celor mai generale pentru a obține rezultatele dorite.
  Introducere în MongoDB: Ce este și de ce ar trebui să-l utilizați?

Alternative la CASE în MySQL

Deși CASE este o funcție puternică, există câteva alternative pe care le-ați putea lua în considerare în anumite cazuri:

  • Expresii IF: a Funcția IF în MySQL vă permite să evaluați o condiție și să returnați o valoare dacă condiția este adevărată și o altă valoare dacă este falsă. Este o alternativă mai simplă pentru cazurile de afecțiuni unice.
  • Tabele de căutare: În unele cazuri, puteți utiliza tabele de căutare separate pentru a stoca condițiile și rezultatele corespunzătoare. Puteți apoi să uniți aceste tabele cu tabelul principal pentru a obține rezultatele dorite.
  • Vizualizări sau funcții stocate: Dacă aveți interogări complexe care folosesc CASE în mod recurent, vă recomandăm să creați vizualizări sau funcții stocate pentru a încapsula acea logică și a simplifica interogările ulterioare.

Întrebări frecvente despre CASE în MySQL

1. Pot folosi CASE în combinație cu alte funcții MySQL?

Da, puteți utiliza CASE în combinație cu alte funcții MySQL, cum ar fi funcții agregate (SUM, AVG, COUNT etc.), funcții de dată și oră (YEAR, MONTH, DAY etc.), funcții șir (CONCAT, SUBSTRING, LENGTH etc.) și multe altele.

2. Există o limită a numărului de condiții WHEN pe care le pot folosi într-o expresie CASE?

Nu există o limită specifică a numărului de condiții WHEN pe care le puteți utiliza într-o expresie CASE. Cu toate acestea, rețineți că un număr mare de condiții pot afecta lizibilitatea codului și performanța interogărilor. Dacă aveți multe condiții, luați în considerare simplificarea logicii sau împărțirea acesteia în mai multe expresii CASE.

3. Pot folosi subinterogări în interiorul unei expresii CASE?

Da, puteți utiliza subinterogări în cadrul unei expresii CASE, atât în ​​condițiile WHEN, cât și în rezultatele THEN. Acest lucru vă permite să efectuați calcule sau comparații mai complexe pe baza rezultatelor altor interogări.

4. Cum pot gestiona valorile nule într-o expresie CASE?

Puteți gestiona valorile nule într-o expresie CASE folosind condiția IS NULL sau IS NOT NULL. De exemplu, puteți utiliza coloana CASE WHEN IS NULL THEN „Valoare nulă” ELSE coloana END pentru a atribui o anumită valoare atunci când coloana este nulă și pentru a returna valoarea reală atunci când nu este.

Concluziile cazului în Mysql

Funcția CASE din MySQL este un instrument puternic și versatil care vă permite să efectuați operații condiționate în cadrul interogărilor dvs. Cu CASE, puteți evalua diferite condiții și puteți returna rezultate specifice, în funcție de dacă acele condiții sunt îndeplinite sau nu. Exemplele prezentate în acest articol vă oferă o bază solidă pentru a începe să utilizați CASE în propriile interogări și pentru a o adapta nevoilor dumneavoastră specifice.

Nu uitați să urmați cele mai bune practici atunci când utilizați CASE, cum ar fi păstrarea expresiilor simple și lizibile, utilizarea CASE în combinație cu alte clauze și funcții MySQL și luarea în considerare a alternativelor atunci când este cazul. Cu practică și experimentare, veți putea profita din plin de CASE în MySQL și veți îmbunătăți eficiența și lizibilitatea interogărilor dvs.

Dacă aveți întrebări suplimentare sau aveți nevoie de mai multe exemple, nu ezitați să căutați resurse suplimentare sau să consultați documentația oficială MySQL. Continuați să explorați și să profitați de puterea CASE în proiectele dvs. de baze de date!

Resurse aditionale: