logo

ההבדל בין WHERE ל-HAVING

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

WHERE לעומת HAVING

סעיף איפה

פסקת WHERE ב-MySQL משמשת עם SELECT, לְהַכנִיס , עדכון , ו לִמְחוֹק שאילתות לסינון נתונים מהטבלה או מהקשר. הוא מתאר מצב ספציפי בעת אחזור רשומות מטבלה בודדת או טבלאות מרובות באמצעות סעיף JOIN. אם התנאי שצוין מתקיים, הוא מחזיר את הערך המסוים מהטבלה. משפט WHERE מציבה תנאים בעמודות שנבחרו.

גם סעיף WHERE ב-MySQL יכול ליישם את החיבורים הלוגיים AND , OR , ו- NOT. הם ידועים בתור המצב הבוליאני שחייב להיות נָכוֹן כדי לאחזר את הנתונים. ביטויי החיבורים הלוגיים משתמשים באופרטורים של ההשוואה כפי שהאופרנדים שלהם אוהבים<, ,>=, =, ו. אופרטורי ההשוואה משמשים בדרך כלל להשוואת מחרוזות וביטויים אריתמטיים.

התחביר הבא ממחיש את השימוש בסעיף WHERE:

בעוד לולאה java
 SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists; 

הבה ניקח דוגמה כדי להבין את הסעיף הזה. נניח שיש לנו טבלה בשם עובדים המכילים את הנתונים הבאים:

WHERE לעומת HAVING

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

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9; 

נקבל את הפלט שלהלן שבו נוכל לראות פרטים של עובדים ששעות העבודה שלו גדולות מ-9:

WHERE לעומת HAVING

אם נשתמש בשאילתה לעיל עם ה GROUP BY סעיף , נקבל את התוצאה השונה:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9 GROUP BY name; 

הנה הפלט:

WHERE לעומת HAVING

סעיף HAVING

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

סעיף זה מציב תנאים לקבוצות שנוצרו על ידי הסעיף GROUP BY. הוא מתנהג כמו משפט WHERE כאשר משפט SQL אינו משתמש במילת המפתח GROUP BY. אנו יכולים להשתמש בפונקציות המצטברות (קבוצתיות) כגון SUM , MIN, MAX, AVG ו לספור רק עם שני סעיפים: SELECT ו-HAVING.

התחביר הבא ממחיש את השימוש במשפט HAVING:

 SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition; 

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

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

 mysql&gt; SELECT name, SUM(working_hour) AS &apos;Total working hours&apos; FROM employees GROUP BY name HAVING SUM(working_hour) &gt; 6; 

נקבל את הפלט שלהלן שבו נוכל לראות את שעות העבודה הכוללות של כל עובד:

בנאי פיתון
WHERE לעומת HAVING

הבדלים עיקריים בין סעיף WHERE ל-HAVING

הנקודות הבאות מסבירות את ההבדלים העיקריים בין מסד נתונים לסכימה:

  • משפט WHERE מסנן שורות בודדות, בעוד שמשפט HAVING מסנן קבוצות במקום שורה אחת בכל פעם.
  • איננו יכולים להשתמש במשפט WHERE עם פונקציות מצטברות מכיוון שהוא פועל לסינון שורות בודדות. לעומת זאת, HAVING יכול לעבוד עם פונקציות מצטברות מכיוון שהוא משמש לסינון קבוצות.
  • פעולות שורה מטופלות על ידי פסקת WHERE, בעוד שסעיף HAVING מטפל בפעולות עמודות לשורות או קבוצות מסוכמות.
  • WHERE בא לפני GROUP BY, כלומר WHERE מסנן שורות לפני ביצוע חישובים מצטברים. HAVING בא אחרי GROUP BY, כלומר משפט HAVING מסנן שורות לאחר ביצוע חישובים מצטברים. כתוצאה מכך, HAVING איטי יותר מ-WHERE מבחינת יעילות ויש להימנע ממנו בכל מקום אפשרי.
  • אנחנו יכולים לשלב את הסעיף WHERE ו-HAVING יחד בשאילתת SELECT. במקרה זה, פסקת WHERE משמשת תחילה לסינון שורות בודדות. לאחר מכן השורות מקובצות, מבצעות חישובים מצטברים, ולבסוף, משפט HAVING משמש לסינון הקבוצות.
  • פסקת WHERE מאחזרת את הנתונים הרצויים בהתבסס על התנאי שצוין. מצד שני, פסקת HAVING תחילה מביאה נתונים שלמים, ולאחר מכן מתבצעת ההפרדה על סמך התנאי שצוין.
  • ללא משפט SELECT, לא נוכל להשתמש במשפט HAVING. לעומת זאת, אנו יכולים להשתמש ב-WHERE עם הצהרות SELECT, UPDATE ו-DELETE.
  • משפט WHERE הוא מסנן מראש, ואילו משפט HAVING הוא מסנן שלאחר.

תרשים השוואה של WHERE לעומת HAVING

טבלת ההשוואה הבאה מסבירה את ההבדלים העיקריים ביניהם בצורה מהירה:

בסיס השוואה סעיף איפה סעיף HAVING
הַגדָרָה הוא משמש לביצוע סינון בשורות בודדות. הוא משמש לביצוע סינון על קבוצות.
בסיסי זה מיושם בפעולות שורה. זה מיושם בפעולות עמודות.
איסוף נתונים משפט WHERE מביא את הנתונים הספציפיים משורות מסוימות בהתבסס על התנאי שצוין פסקת HAVING תחילה מביאה את הנתונים המלאים. לאחר מכן הוא מפריד ביניהם בהתאם לתנאי הנתון.
פונקציות מצטברות פסקת WHERE לא מאפשרת לעבוד עם פונקציות מצטברות. משפט HAVING יכול לעבוד עם פונקציות מצטברות.
להתנהג כמו סעיף WHERE פועל כמסנן מראש. סעיף HAVING פועל כפוסט-פילטר.
בשימוש עם אנו יכולים להשתמש במשפט WHERE עם הצהרות SELECT, UPDATE ו-DELETE. ניתן להשתמש במשפט HAVING רק עם המשפט SELECT.
GROUP BY משפט GROUP BY בא אחרי משפט WHERE. פסקת GROUP BY באה לפני משפט HAVING.

סיכום

במאמר זה, ערכנו השוואה בין סעיף WHERE ל-HAVING. כאן, אנו מסיקים ששני הסעיפים פועלים באותו אופן בסינון הנתונים, למעט תכונה נוספת הופכת את פסקת HAVING לפופולרית יותר. אנו יכולים לעבוד ביעילות עם פונקציות צבירה בסעיף HAVING בעוד WHERE אינו מאפשר פונקציות צבירה.