סינון התוצאות באמצעות 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 |
סינון בסיסי באמצעות 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)
במדריך הבא אסביר כיצד לקבוע את כיוון המיון של התוצאות, מהגבוה לנמוך והפוך.