מקרה ב-MySQL: 11 דוגמאות מעשיות

העדכון אחרון: מאי 25 של 2025
מחבר: TecnoDigital
  • הפונקציה CASE ב-MySQL מאפשרת לך לבצע הערכות מותנות ולהחזיר תוצאות מותאמות אישית.
  • ניתן להשתמש במספר תנאים עם פסוקית WHEN וניתן לטפל בערכי null עם פסוקית ELSE.
  • ניתן לשלב CASE עם פונקציות צבירה כדי לייעל שאילתות.
  • הקפדה על שיטות עבודה מומלצות בעת שימוש ב- CASE חיונית לשמירה על ביצועי וקריאות הקוד.
מקרה ב-Mysql

פונקציית CASE ב-MySQL היא כלי רב עוצמה המאפשר לך לבצע פעולות מותנות בתוך השאילתות שלך. עם CASE, אתה יכול להעריך תנאים שונים ולהחזיר תוצאות ספציפיות בהתאם לתנאים אלה מתקיימים או לא. אנו הולכים להסביר את הפונקציה הזו עם דוגמאות מעשיות שיעזרו לך לשלוט בשימוש ב-CASE ב-MySQL ולשפר את כישוריך בניהול מסדי נתונים.

מהי פונקציית CASE ב-MySQL?

פונקציית CASE ב-MySQL היא ביטוי מותנה המאפשר לך להעריך תנאים שונים ולהחזיר תוצאות ספציפיות בהתאם לעמידה בתנאים אלה. זהו כלי שימושי מאוד לביצוע פעולות לוגיות בתוך שאילתות ולקבלת תוצאות מותאמות אישית על סמך קריטריונים ספציפיים.

CASE פועל בדומה לסדרה של הצהרות IF-THEN-ELSE, שבהן ניתן לציין מספר תנאים ואת הערכים שיוחזרו כאשר התנאים הללו מתקיימים. אם אף אחד מהתנאים לא מתקיים, אתה יכול להגדיר ערך ברירת מחדל באמצעות סעיף ELSE.

תחביר CASE בסיסי ב-MySQL

התחביר הבסיסי של פונקציית CASE ב-MySQL הוא כדלקמן:

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

להלן הסבר על כל חלק בתחביר:

  • WHEN: מציין את התנאי שיש להעריך.
  • THEN: מציין את התוצאה שתוחזר אם התנאי המתאים יתקיים.
  • ELSE: (אופציונלי) מציין את התוצאה שיש להחזיר אם אף אחד מהתנאים לעיל לא מתקיים.
  • END: מסמן את סוף הביטוי CASE.

עכשיו כשאתה יודע את התחביר הבסיסי, בוא נחקור כמה דוגמאות מעשיות!

דוגמה 1: סיווג תלמידים לפי הממוצע שלהם

נניח שיש לך טבלה בשם "סטודנטים" עם העמודות הבאות: "מזהה", "שם" ו-"ממוצע". אתה רוצה לדרג את התלמידים לפי הממוצע שלהם באמצעות הפונקציה CASE. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים ב-CASE כדי להעריך את הממוצע של כל תלמיד ולהקצות דירוג מתאים. אם הממוצע גדול או שווה ל-90, הוא מסווג כ"יוצא מן הכלל". אם הוא בין 80 ל-89, הוא מסווג כ"מופלא" וכן הלאה. אם הממוצע נמוך מ-60, הוא מסווג כ"לא מספיק".

דוגמה 2: הקצאת קטגוריות מוצרים

תאר לעצמך שיש לך טבלה בשם "מוצרים" עם עמודות "מזהה", "שם" ו"מחיר". אתה רוצה להקצות קטגוריה לכל מוצר על סמך המחיר שלו באמצעות הפונקציה CASE. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים ב-CASE כדי להעריך את המחיר של כל מוצר ולהקצות קטגוריה מתאימה. אם המחיר גבוה מ-1000, הוא מסווג כ"פרימיום". אם הוא בין 500 ל-1000, הוא מסווג כ-"high-end", וכן הלאה. אם המחיר קטן או שווה ל-100, הוא מסווג כ"חסכוני".

דוגמה 3: חשב הנחות על סמך כמות שנרכשה

נניח שיש לך טבלה בשם "מכירות" עם עמודות "מזהה", "מוצר" ו"כמות". ברצונך לחשב את ההנחה המוחלת על כל מכירה בהתבסס על הכמות שנרכשה באמצעות הפונקציה CASE. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים ב-CASE כדי להעריך את הכמות הנרכשת של כל מוצר ולחשב את ההנחה המתאימה. אם הכמות גדולה או שווה ל-100, תחול הנחה של 20%. אם הוא בין 50 ל-99, חלה הנחה של 15% וכן הלאה. אם הכמות נמוכה מ-20, אין הנחה.

דוגמה 4: המרת ערכים מספריים לטווחים

תאר לעצמך שיש לך טבלה בשם "עובדים" עם עמודות "מזהה", "שם" ו"גיל". ברצונך להמיר את גילאי העובדים לטווחים באמצעות הפונקציה CASE. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים ב-CASE כדי להעריך את הגיל של כל עובד ולהקצות טווח מתאים. אם הגיל גדול מ-60 או שווה לו, הוא מסווג כ"בכיר". אם אתה בין 40 ל-59, אתה מסווג כ"גיל הביניים" וכן הלאה. אם הגיל נמוך מ-20, הוא מסווג כ"קטין".

  דפדפן DB עבור SQLite: מדריך מלא לניהול מסדי נתונים

דוגמה 5: הקצאת תוויות על סמך מספר תנאים

נניח שיש לך טבלה בשם "הזמנות" עם עמודות "מזהה", "לקוח", "סה"כ" ו"סטטוס". ברצונך להקצות תוויות לכל הזמנה בהתבסס על הסכום והסטטוס שלה באמצעות הפונקציה CASE עם מספר תנאים. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים ב-CASE עם מספר תנאים כדי להעריך הן את הסכום והסטטוס של כל הזמנה ולהקצות תווית מתאימה. אם הסכום הכולל גדול מ-1000 והסטטוס הוא "נמסר", הוא מסומן כ-"VIP". אם הסכום הכולל גדול מ-500 והסטטוס הוא "נמסר", הוא מתויג כ"עדיפות". אם הסטטוס הוא "בהמתנה", הוא מסומן כ"בעיבוד". אחרת, הוא מסומן כ"רגיל".

דוגמה 6: טיפול בערכי null עם CASE

תאר לעצמך שיש לך טבלה בשם "לקוחות" עם עמודות "מזהה", "שם" ו"אימייל". ייתכן שלחלק מהלקוחות אין דוא"ל בקובץ, מה שיביא לערכי אפס בעמודת "אימייל". אתה יכול להשתמש בפונקציית CASE כדי לטפל בערכי האפס האלה בצורה מתאימה. לְדוּגמָה:

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

בדוגמה זו, אנו משתמשים ב-CASE כדי להעריך אם העמודה "אימייל" היא ריק. אם ריק, הטקסט "אין אימייל" מוצג. אחרת, הערך האמיתי של העמודה "אימייל" מוצג. זה מאפשר לנו לטפל בחן במקרים שבהם פרטי התקשרות חסרים.

דוגמה 7: שילוב של CASE עם פונקציות מצטברות

ניתן לשלב את פונקציית CASE גם עם פונקציות מצטברות כגון SUM, AVG, COUNT וכו'. נניח שיש לך טבלה בשם "מכירות" עם עמודות "מזהה", "מוצר", "כמות" ו"מחיר". ברצונך לחשב את סך המכירות לפי קטגוריית מוצרים באמצעות CASE ו-SUM. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים ב-CASE בתוך הפונקציה SUM כדי לחשב את סך המכירות לפי קטגוריית מוצרים. אם המחיר גדול מ-1000, הסכום מתווסף ל"פרימיום_sales". אם המחיר קטן או שווה ל-1000, הסכום מתווסף ל-"רגיל_sales". זה מאפשר לנו לקבל סיכומי ביניים בהתבסס על תנאים ספציפיים.

דוגמה 8: שימוש ב-CASE בסעיפים WHERE

ניתן להשתמש בפונקציית CASE גם במשפט WHERE כדי לסנן רשומות על סמך תנאים ספציפיים. נניח שיש לך טבלה בשם "עובדים" עם עמודות "מזהה", "שם", "מחלקה" ו"שכר". אתה רוצה למקד עובדים שהשכר שלהם גבוה מהממוצע של המחלקה שלהם. אתה יכול לעשות זאת כך:

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

בדוגמה זו, אנו משתמשים ב-CASE בשאילתת המשנה כדי לחשב את השכר הממוצע לפי מחלקה. שאילתת המשנה משווה את המחלקה של כל עובד למחלקה הנוכחית ולוקחת בחשבון רק את שכרם של העובדים באותה מחלקה לחישוב הממוצע. לאחר מכן, בשאילתה הראשית, אנו מסננים עובדים ששכרם גבוה מהממוצע המחושב למחלקה שלהם.

דוגמה 9: יצירת עמודות מחושבות עם CASE

ניתן להשתמש בפונקציית CASE גם ליצירת עמודות מחושבות על סמך תנאים ספציפיים. נניח שיש לך טבלה בשם "הזמנות" עם עמודות "מזהה", "לקוח", "סה"כ" ו"תאריך". ברצונך ליצור עמודה נוספת בשם "הנחה" שמחילה אחוזי הנחה שונים בהתאם לסך ההזמנה. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים ב-CASE כדי ליצור את עמודת "הנחה" המחושבת. אם סך ההזמנה גדול מ-1000, תחול הנחה של 10%. אם הסכום הכולל גדול מ-500, תחול הנחה של 5%. בכל מקרה אחר, לא חלה הנחה. ניתן להשתמש בעמודה מחושבת זו לניתוח נוסף או להצגת מידע נוסף בתוצאות השאילתה.

  הדוגמאות הטובות ביותר למסד נתונים למפתחים ומנהלים

דוגמה 10: הטמעת לוגיקה מורכבת עם הצהרות CASE מקוננות

במקרים מסוימים, ייתכן שיהיה עליך ליישם לוגיקה מותנית מורכבת יותר באמצעות הצהרות CASE מקוננות. נניח שיש לך טבלה בשם "תלמידים" עם עמודות "מזהה", "שם", "כיתה_מתמטית" ו-"כיתה_שפה". אתה רוצה להקצות קטגוריה לכל תלמיד על סמך הציונים שלו במתמטיקה ובשפה. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים בהצהרות CASE מקוננות כדי ליישם לוגיקה מותנית מורכבת יותר. ראשית, אנו מעריכים האם הן הציונים במתמטיקה והן בשפה גדולים מ-90 או שווה ל-80. אם כן, הקטגוריה "מצוין" מוקצית. לאחר מכן, אנו מעריכים אם שני הציונים גדולים מ-70 או שווים ל-XNUMX. אם כן, הקטגוריה "ראוי לציון" מוקצית. אם אף אחד מהתנאים לעיל לא מתקיים, נעבור לרמה הבאה של CASE מקונן. כאן, אנו מעריכים אם לפחות אחד מהציונים (מתמטיקה או שפה) גדול או שווה ל-XNUMX. אם כן, הקטגוריה "רגיל" מוקצית. אם אף אחד מהתנאים לא מתקיים, הקטגוריה "צריך שיפור" מוקצית.

דוגמה 11: אופטימיזציה של שאילתות עם CASE

ניתן להשתמש בפונקציית CASE גם כדי לייעל שאילתות ולהימנע ממספר שאילתות נפרדות. נניח שיש לך טבלה בשם "מכירות" עם העמודות "מזהה", "מוצר", "כמות" ו"תאריך". אתה רוצה לקבל את סך המכירות לחודש ואת סך המכירות לשנה בשאילתה אחת. אתה יכול לעשות זאת כך:

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;

בדוגמה זו, אנו משתמשים ב-CASE בתוך הפונקציה SUM כדי לחשב סכומי מכירות לפי חודש ולפי שנה בשאילתה בודדת. עבור כל חודש, אנו מעריכים אם החודש של תאריך המכירה תואם לחודש הספציפי ומוסיפים את הסכום המתאים. באופן דומה, עבור כל שנה, אנו מעריכים אם שנת תאריך המכירה תואמת את השנה הספציפית ומוסיפים את הסכום המתאים. זה מאפשר לנו לקבל את כל הסכומים בשאילתה יעילה אחת.

שיטות עבודה מומלצות בעת שימוש ב-CASE ב-MySQL

  • השתמש ב-CASE רק כשצריך והימנע משימוש מוגזם בו, מכיוון שהוא עלול להשפיע על ביצועי השאילתות אם נעשה בו שימוש מוגזם.
  • נסו לשמור על ביטויי CASE פשוטים וקריאים ככל האפשר. אם ההיגיון הופך מורכב מדי, שקול לפצל אותו למספר ביטויי CASE או להשתמש בשאילתות משנה.
  • השתמש ב-CASE בשילוב עם סעיפים ופונקציות אחרות של MySQL כדי לנצל את מלוא הפוטנציאל שלהם, כגון ב-WHERE, ORDER BY, קבוצתי קבוצתי ופונקציות צבירה.
  • היזהר בעת קינון של ביטויי CASE מרובים, מכיוון שהוא יכול להקשות על הקריאה והתחזוקה של הקוד שלך. במידת הצורך, הוסף הערות הסבר.

טעויות נפוצות בעת שימוש ב-CASE וכיצד להימנע מהן

  • שכח את סעיף ה-ELSE: הקפד לכלול את סעיף ELSE לטיפול במקרים שבהם אף אחד מהתנאים לא מתקיים. אם לא צוין, NULL יוקצה כברירת מחדל.
  • אל תסיים את ביטוי CASE עם END: זכור תמיד לסיים את ביטוי CASE במילת המפתח END. אחרת תקבל שגיאת תחביר.
  • שימוש בסוגי נתונים לא תואמים: ודא שהתוצאות המוחזרות על ידי כל תנאי WHEN הן מאותו סוג נתונים. אם אתה מערבב סוגי נתונים, אתה עלול לקבל תוצאות או שגיאות בלתי צפויות.
  • לא לוקח בחשבון את סדר התנאים: התנאים ב-CASE מוערכים לפי סדר הופעתם. הקפד להציב את התנאים הספציפיים יותר לפני הכלליים יותר כדי לקבל את התוצאות הרצויות.
  פונקציות מנהל מסד נתונים: מדריך מלא

חלופות ל-CASE ב-MySQL

למרות ש-CASE היא פונקציה רבת עוצמה, יש כמה חלופות שאתה עשוי לשקול במקרים מסוימים:

  • ביטויי IF: פונקציית IF ב-MySQL מאפשר לך להעריך תנאי ולהחזיר ערך אם התנאי אמת וערך אחר אם הוא שקר. זוהי חלופה פשוטה יותר למקרים של תנאים ייחודיים.
  • טבלאות חיפוש: במקרים מסוימים, תוכל להשתמש בטבלאות חיפוש נפרדות כדי לאחסן את התנאים והתוצאות המתאימות. לאחר מכן תוכל להצטרף לטבלאות אלו עם הטבלה הראשית כדי לקבל את התוצאות הרצויות.
  • תצוגות או פונקציות מאוחסנות: אם יש לך שאילתות מורכבות המשתמשות ב-CASE על בסיס חוזר, תוכל לשקול ליצור תצוגות או פונקציות מאוחסנות להקיף את ההיגיון הזה ולפשט שאילתות עוקבות.

שאלות נפוצות לגבי CASE ב-MySQL

1. האם אני יכול להשתמש ב-CASE בשילוב עם פונקציות אחרות של MySQL?

כן, אתה יכול להשתמש ב-CASE בשילוב עם פונקציות אחרות של MySQL, כמו פונקציות מצטברות (SUM, AVG, COUNT וכו'), פונקציות תאריך ושעה (YEAR, MONTH, DAY וכו'), פונקציות מחרוזות (CONCAT, SUBSTRING, LENGTH וכו') ועוד.

2. האם יש הגבלה למספר התנאים של WHEN שאני יכול להשתמש בביטוי CASE?

אין הגבלה ספציפית על מספר תנאי ה-WHEN שבהם אתה יכול להשתמש בביטוי CASE. עם זאת, זכור שמספר רב של תנאים יכולים להשפיע על קריאת הקוד וביצועי השאילתות. אם יש לך תנאים רבים, שקול לפשט את ההיגיון או לחלק אותו למספר ביטויי CASE.

3. האם אני יכול להשתמש בשאילתות משנה בתוך ביטוי CASE?

כן, אתה יכול להשתמש בשאילתות משנה בתוך ביטוי CASE, הן בתנאי WHEN והן בתוצאות THEN. זה מאפשר לך לבצע חישובים מורכבים יותר או השוואות על סמך תוצאות של שאילתות אחרות.

4. כיצד אוכל להתמודד עם ערכי null בביטוי CASE?

אתה יכול לטפל בערכי null בביטוי CASE באמצעות התנאי IS NULL או IS NOT NULL. לדוגמה, אתה יכול להשתמש בעמודה CASE WHEN IS NULL THEN 'Null value' ELSE עמודה END כדי להקצות ערך ספציפי כאשר העמודה היא null ולהחזיר את הערך בפועל כאשר הוא לא.

מסקנות מקרה ב-Mysql

פונקציית CASE ב-MySQL היא כלי רב עוצמה ורב-תכליתי המאפשר לך לבצע פעולות מותנות בתוך השאילתות שלך. עם CASE, אתה יכול להעריך תנאים שונים ולהחזיר תוצאות ספציפיות בהתאם לתנאים אלה מתקיימים או לא. הדוגמאות המוצגות במאמר זה נותנות לך בסיס איתן להתחיל להשתמש ב-CASE בשאילתות שלך ולהתאים אותו לצרכים הספציפיים שלך.

זכרו לפעול לפי שיטות עבודה מומלצות בעת שימוש ב-CASE, כגון שמירה על ביטויים פשוטים וקריאות, שימוש ב-CASE בשילוב עם פסקאות ופונקציות אחרות ב-MySQL , ושקילת חלופות במידת הצורך. בעזרת תרגול וניסויים, תוכלו לנצל את מלוא היתרונות של CASE ב-MySQL ולשפר את היעילות והקריאות של השאילתות שלכם.

אם יש לך שאלות נוספות או שאתה זקוק לדוגמאות נוספות, אל תהסס לחפש משאבים נוספים או לעיין בתיעוד הרשמי של MySQL. המשך לחקור ולמנף את הכוח של CASE בפרויקטים של מסד הנתונים שלך!

משאבים נוספים: