arrow

פרק 2 - שליפה ותמרון נתונים

And, Or , Not

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

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

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

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

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

תאר לך את המקרה הבא, שבו נרצה לקבל מטבלת המכירות (SALES) שורות, שבהן המוכר היה מוכר, שמספרו "101" והמחיר היה גדול מ- 100$.

SELECT P_NUM, S_AMOUNT, E_NUM
FROM SALES
WHERE E_NUM = 101 AND S_AMOUNT > 100;
	  

תשובת מסד הנתונים תהיה:

P_NUM	S_AMOUNT	E_NUM
------------------------------
002	865.99		101
------------------------------
		

קיבלנו תשובה זו משום שסכום הקניה ( S_AMOUNT ) היה גדול מ- 100 ומספר המוכר (E_NUM) היה שווה ל-"101".

אותה שאילתא עם OR:

SELECT P_NUM, S_AMOUNT, E_NUM
FROM SALES
WHERE E_NUM = 101 OR S_AMOUNT > 100;
		

נקבל את התשובה הבאה:

P_NUM		S_AMOUNT	E_NUM
-------------------------------------
001		 99.99		101
001		199.98		102
003		865.99		101
-------------------------------------
		

השורה הראשונה עמדה בתנאי מפני שמספר המוכר (E_NUM )היה שווה ל- "101", למרות שמחיר הקניה (S_AMOUNT ) היה קטן מ-100. באותה צורה השורה השניה נבחרה משום שסכום הקניה היה גדול מ-100 למרות שמספר המוכר היה שונה מ -       "101".

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

לכן,

SEX = ‘M’ AND (WEIGHT > 150 OR AGE < 35)

שונה מלומר

(SEX = 'M' AND WEIGHT > 150) OR AGE < 35

במקרה הראשון לא יכלנו לקבל אוביקט ממין נקבה בתשובה, ואילו במקרה השני יכלנו לקבל נקבה אם גילה היה קטן מ-35.

האופרטור NOT מציין תנאי הפוך.

אם נרצה לקבל את רשימת כל העובדים מלבד לים סינג ין (Lim Sing Yuen) אזי נשתמש בקטע הבא:

SELECT EMP_NUM, EMP_NAME
FROM EMPLOYEES
WHERE NOT (EMP_NAME = 'Lim Sing Yuen');

מסד הנתונים ישיב:

EMP_NUM		EMP_NAME
-----------------------------
001		Lim Li Chuen
003		Loo Soon Keat
-----------------------------


arrow Where
תוכן עניינים
Between arrow


פרק 1 -> פרק 2 -> פרק 3 -> פרק 4 -> פרק 5 ->