פקודת WHERE בשפת ה SQL מאפשרת לנו לסנן שורות באמצעות תנאים מסויימים. במדריך SQL זה נלמד את צורות הסינון הפשוטות (תנאי השוואה פשוטים) ונראה כיצד ניתן להשוות עמודה למחרוזת, מספר ותאריך.
סינון נתונים – משפט WHERE
SELECT -> מה אנחנו רוצים להציג FROM -> מאיזו טבלה WHERE -> על פי איזה תנאי
משפט WHERE מאפשר לנו לבצע סינונים על המידע שהתקבל. בפוסט הקודם למדנו כיצד ניתן לשלוף את שמות כל העובדים מהטבלה עתה נוכל לשלוף רק את אלו ששכרם גבוה מ- 5000 או רק את אלו שעובדים במחלקת כח אדם וכדומה.
! סדר פקודות ה- SQL מובנה, משפט WHERE חייב להכתב לאחר משפט FROM (אשר חייב להכתב לאחר פקודת SELECT).
! להבדיל מפקודת SELECT ופקודת FROM אשר בגדר חובה על מנת ליצור משפט SQL תקין, משפט WHERE הינו בגדר רשות, פקודת SQL יכולה לעבוד בצורה תקינה איתו ובלעדיו.
מבנה פקודת WHERE
WHERE שם_עמודה תנאי_להשוואה ערך
לדוגמא:
SELECT * FROM employees WHERE salary = 3000
v שם_העמודה – שם העמודה עליה אנו רוצים לבצע את ההתניה, בדוגמא זו אנו רוצים להציג את כל אלו אשר שכרם שווה ל- 3000 אז בחרנו את עמודת salary, אם היינו רוצים לבחור את כל אלו שעיר מגורם שווה ל tel-aviv היינו בוחרים בעמודת city.
v תנאי להשוואה – קיימים שני סוגים של תנאי השוואה:
o תנאי פשוט – מיוצג ע"י אופרטורים פשוטים כגון: = , < , > , => , =<, <>
o תנאי מורכב – מיוצג ע"י אופרטורים מורכבים כגון: IN, BETWEEN, LIKE.
v ערך להשוואה – אנו יכולים לבצע התניה מול:
o מספר – לדוגמא, שכר שווה למספר מסוים.
o תאריך – לדוגמא, תאריך העסקה גדול מתאריך מסויים.
o מחרוזת – למשל, שם משפחה שווה לשם משפחה מסויים.
! סוג הערך חייב לתאום לסוג העמודה (לא הגיוני לנסות להציג את העובדים ששמם הפרטי גבוה מ 4503).
! במידה וההשוואה שביקשנו לא תואמת את ערכי הטבלה (לדוגמא, השכר הגבוה ביותר בטבלה הוא 12,000 ואנו רוצים להציג את העובדים שמרוויחים יותר מ 20,000) לא תחזור אלינו אף תוצאה אך גם לא תתקבל שגיאה (ביקשנו מהטבלה ערכים שמבחינתה לא קיימים).
תנאי השוואה פשוטים מול סוגי ערכים שונים
ראשית נעסוק בתנאי השוואה פשוטים (כאמור = , < , > , => , =<, <>) ביחס לערכים שונים: מספריים, מחרוזתיים ותארכיים.
השוואה מול מספרים
כדי להשוות מול ערך מספרי נכתוב את ערכו יחד עם סימן ההשוואה המתאים:
WHERE salary > 500
חל איסור לכתוב את הערך המספרי יחד עם תווים מיוחדים:
WHERE salary = $50000 (שגיאה) WHERE salary = 50,000 (שגיאה) WHERE salary = 50000 (תקין)
השוואה מול מחרוזות
כדי להשוות מול מחרוזות:
1. חובה לכתוב את הערך המחרוזתי בתוך גרשיים ('ערך מחרוזתי')
WHERE last_name = Levi (שגיאה) WHERE last_name = ‘Levi’ (תקין)
2. מבחינת גודל האותיות (LEVI מול Levi) חייבת להיות תאימות מלאה בין הערך בתוך העמודה לבין הערך שאותו כתבנו.
לדוגמא, קיימים עובדים בתוך הטבלה אשר שם משפחתם הוא Levi, אנו רוצים לכתוב שאילתה אשר תציג את שמם הפרטי של כל אותם עובדים.
הרצת השאילתה הבאה לא תחזיר אף תוצאה:
SELECT first_name FROM employees WHERE last_name = ‘LEvi’
הרצת השאילתה הבאה תחזיר תוצאות:
SELECT first_name FROM employees WHERE last_name = ‘Levi’
! כאשר נכתוב את המחרוזת לא בצורה בה היא כתובה בטבלה (מבחינת גודל האותיות) לא תתקבל אף תוצאה אך גם לא תתקבל שגיאה, דרשנו נתונים שמבחינת הטבלה לא קיימים.
השוואה מול תאריכים
כדי להשוות מול תאריכים חובה לכתוב את הערך התאריכי בתוך גרשיים ('ערך תאריכי') ובפורמט התקין:
WHERE hire_date = 11/03/2009 (שגיאה - פורמט לא תקין וחסרים גרשיים) WHERE hire_date > ' 11/03/2003' (שגיאה - פורמט לא תקין) WHERE hire_date amp;lt; ' 11-JAN-2001' (תקין)
! באופן דיפולטיבי אורקל יודע לזהות תאריך כאשר הוא מופיע באחת מהצורות הבאות:
DD-MON-RR , DD-MON-YYYY, כדי להמנע משגיאות מומלץ לכתוב את השנה
בארבע ספרות. כל הדוגמאות בספר יציגו תאריכים בפורמט DD-MON-YYYY ויתייחסו אליו כאל הפורמט התאריכי הסטנדרטי.
מגבלת תנאי ההשוואה הפשוטים
תנאי השוואה פשוטים מוגבלים לעבודה מול ערך בודד. לדוגמא, אם נרצה לדעת את שמות העובדים אשר שכרם שווה ל- 5000, 6000, 8500, ו- 10,000 לא נוכל לכתוב:
WHERE salary = 5000 , 6000 , 8500 , 10,000 (שגיאה)
התאמות ל SQL Server
v באופן דיפולטיבי ב SQL Server אין רגישות לגודל אות כאשר נעשית השוואה מול מחרוזת
v את התאריכים ב SQL Server מקובל לכתוב בפורמט הבא ‘yyyy-mm-dd’
במדריך SQL הבא נלמד עבודה מול אופרטורים מורכבים.
לפוסט הבא בנושא – WHERE Clause – Complex Operators