תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

סינון התוצאות באמצעות WHERE

מחבר:
בתאריך:

סינון בסיסי באמצעות WHERE ואופרטורים

 

להורדת קובץ ה-sql, שמלווה את המדריך:

להורדה

 

WHERE משמש לסינון תוצאות שמגיעות מבסיס הנתונים. נראה את הדוגמה הבאה:

 

SELECT * 
FROM `workers` 
WHERE `workers_id` = 5

 

והתוצאה היא הצגת השורה שמספרה 5 בטבלת הנתונים.

workers_comment workers_date_added workers_city workers_phone2 workers_phone1 workers_name workers_id
NULL 2011-06-08 Jerusalem NULL 02-2000002 Asher 5

כדי לקבל את כל השורות שאינן 5, נשתמש בשאילה הבאה, עם האופרטור !=:

SELECT * 
FROM `workers` 
WHERE `workers_id` != 5

והתוצאה היא כל השורות בטבלה שה-workers_id שלהם אינו 5.

 

כדי לקבל את כל השורות שמספרן פחות מ-5 או שווה ל-5  , נשתמש בשאילה הבאה שמשתמש באופרטור <=:

SELECT *
FROM `workers`
WHERE `workers_id` <= 5

וזו התוצאה:

Workers_id Worker_name workers_phone1 workers_phone2 workers_city workers_date_added workers_comment
1 Moshe 09-9888887 NULL Hakrayot 2011-06-07 NULL
2 Yechezkel 04-4888887 NULL Ramat Hasharon 2011-06-07 NULL
3 Yirmiyahu 03-3333337 NULL Bat Yam 2011-06-07 NULL
4 Gershon 0544-444333 NULL Beer-sheva 2011-06-08 NULL
5 Asher 02-2000002 NULL Jerusalem 2011-06-08 NULL

 

שימוש באופרטורים כמו = ו->  ישמש אותנו לסינון התוצאות. הטבלה הבאה מסכמת את הנושא:

האופרטור הסבר
id = 5 שורה שמספרה 5
id != 5 כל התוצאות שאינן 5
id < 5 התוצאות הקטנות מ-5 (1 עד 4)
id <= 5 התוצאות הקטנות והשוות ל-5 (1 עד 5)
id > 5 התוצאות הגדולות מ-5
id >= 5 התוצאות הגדולות או השוות ל-5

 

כפי שניתן לסנן תוצאות מספריות, ניתן לסנן תוצאות לפי מחרוזות. לדוגמה:

SELECT *
FROM `workers`
WHERE `workers_name` = ' Yechezkel '

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

workers_comment workers_date_added workers_city workers_phone2 workers_phone1 workers_name workers_id
NULL 2011-06-07 Ramat Hasharon NULL 04-4888887 Yechezkel 2

 

סינון תאים ריקים

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

כדי לסנן תאים שערכם NULL נשתמש בתנאי IS NULL. לדוגמה:

SELECT * 
FROM workers 
WHERE workers_phone2 IS NULL;

וליהפך, כדי לסנן תאים שאינם NULL נשתמש בתנאי IS NOT NULL. לדוגמה:

SELECT * 
FROM workers 
WHERE workers_phone2 IS NOT NULL;

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

SELECT * 
FROM workers 
WHERE workers_phone2 = "";

להיפך, כדי לסנן תאים שאינם ריקים:

SELECT * 
FROM workers 
WHERE workers_phone2 != "";

העובדה שניתן לסמן ערכים ריקים באמצעות מחרוזת ריקה או NULL מציבה לנו בעיה באיזה אפשרות להשתמש כדי להיות בטוחים שהצלחנו בבחירת תא ריק. השימוש באופרטור > פותרת את הבעיה:

SELECT * 
FROM workers 
WHERE workers_phone2 > "";

 

סינון בסיסי באמצעות WHERE, OR  ו-AND

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

SELECT *
FROM `workers`
WHERE `workers_name` = 'Moshe' OR `workers_name` = 'Yechezkel'
workers_comment workers_date_added workers_city workers_phone2 workers_phone1 workers_name workers_id
NULL 2011-06-07 Hakrayot NULL 09-9888887 Moshe 1
NULL 2011-06-07 Ramat Hasharon NULL 04-4888887 Yechezkel 2

 

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

SELECT *
FROM `workers`
WHERE `workers_name` = 'Yirmiyahu' AND `workers_city` = 'Bat Yam'

והתוצאה היא:

workers_comment workers_date_added workers_city workers_phone2 workers_phone1 workers_name workers_id
NULL 2011-06-07 Bat Yam NULL 03-3333337 Yirmiyahu 3

 

 

שילוב של BETWEEN ו-AND מאפשר לנו לסנן טווח של תוצאות. לדוגמה, השאילתה הבאה שולפת את התוצאות שבשורות 2 עד 4.

SELECT *
FROM `workers`
WHERE `workers_id` BETWEEN 2 AND 4

והתוצאה בהתאם היא הבאה:

Workers_id Worker_name workers_phone1 workers_phone2 workers_city workers_date_added workers_comment
2 Yechezkel 04-4888887 NULL Ramat Hasharon 2011-06-07 NULL
3 Yirmiyahu 03-3333337 NULL Bat Yam 2011-06-07 NULL
4 Gershon 0544-444333 NULL Beer-sheva 2011-06-08 NULL

 

שימוש ב-BETWEEN  נותן את אותה תוצאה כמו LIMIT , כפי שלמדנו במדריך קודם.

 

סינון מתקדם באמצעות WHERE, OR  ו-AND

כדי ליצור תנאים מורכבים נשתמש בסוגריים. בשאילתה הבאה, נבקש את כל השדות מטבלת workers שמקיימים את התנאים הבאים: מספר העובד (id) הוא בין 1 ל-10, ושם העובד הוא גרשון או אליעזר. זה נכתב בדיוק כמו שאומרים את זה:

SELECT *
FROM `workers`
WHERE (`workers_id` BETWEEN 1 AND 10)
AND (`workers_name` = 'Gershon' OR `workers_name` = 'Eliezer')

ומביא את התוצאות הרצויות:

Workers_id Worker_name workers_phone1 workers_phone2 workers_city workers_date_added workers_comment
4 Gershon 0544-444333 NULL Beer-sheva 2011-06-08 NULL
9 Eliezer 03-7333335 NULL Bat Yam 2011-06-09 NULL

 

סינון מתקדם באמצעות IN()  ו-NOT IN()

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

SELECT *
FROM `workers`
WHERE `workers_city` = 'Bat Yam'
OR `workers_city` = 'Beer-sheva'
OR `workers_city` = 'Ramat Hasharon'

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

SELECT *
FROM `workers`
WHERE `workers_city`
IN ('Bat Yam', 'Beer-sheva', 'Ramat Hasharon')

אחרי IN, ציינו בסוגריים, את הסט שמתוכו צריך לשלוף את התוצאות.

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

SELECT *
FROM `workers`
WHERE `workers_city`
NOT IN ('Bat Yam', 'Beer-sheva', 'Ramat Hasharon')

 

סינון באמצעות IN כשהסדר חשוב

כשרוצים לבחור את סדר שליפת התוצאות ממסד הנתונים, צריך להשתמש גם ב- ORDER BY FIELD כדי לשמור על הסדר שבו הנתונים נשלפים ממסד הנתונים.
לדוגמה:

SELECT *
FROM `workers`
WHERE `workers_id`
IN (5,3,7,4)
ORDER BY FIELD(`workers_id`,5,3,7,4)

 

במדריך הבא אסביר כיצד לקבוע את כיוון המיון של התוצאות, מהגבוה לנמוך והפוך.

לכל מדריכי ה- mySQL

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

מתי הוקמה המדינה?

 

תמונת המגיב

שגיב בתאריך: 25.09.2015

שלום, קודם כל אלו מדריכים מעולים. תודה רבה :)
רציתי לדעת בבקשה לגבי ההבדל בין הLIMIT ל BETWEEN . מתי להשתמש בכל אחד מהן?
שבת שלום.