סדרת SQL בסיסי - פוסט 15 - משפט WHERE
פקודות select ו update יכולות להסתיים ב where כדי לדייק את השורות עליהן עובדים. ראינו בשיעורים קודמים איך להשתמש ב where כדי למצוא שורות עם ערך ששווה לערך קבוע מסוים או שורות עם ערכי NULL. בשיעור זה נראה עוד כמה אפשרויות לשימוש במשפטי where.
1. שונה, גדול מ, קטן מ
אחרי השווה כמובן שצריכים להמשיך לשונה גדול וקטן. בואו ניצור קצת נתונים:
CREATE TABLE paper_clips (
id INTEGER PRIMARY KEY,
type VARCHAR(50) NOT NULL,
size VARCHAR(20),
color VARCHAR(20),
quantity INTEGER
);
INSERT INTO paper_clips (type, size, color, quantity) VALUES
('standard', 'medium', 'silver', 100),
('binder', 'large', 'black', 50),
('mini', 'small', 'red', 200),
('jumbo', 'extra_large', 'blue', 30),
('colored', 'medium', 'green', 150);
ולשאילתות:
- נציג את כל השורות שצבען שונה מכסף:
SELECT * FROM paper_clips WHERE color != 'silver';
- נציג את כל השורות שהכמות שלהן גדולה מ 100:
SELECT * FROM paper_clips WHERE quantity > 100;
- כמות קטנה מ 100:
SELECT * FROM paper_clips WHERE quantity < 100;
- כמות גדולה או שווה 50:
SELECT * FROM paper_clips WHERE quantity >= 50;
- גודל גדול יותר מ hello:
SELECT * FROM paper_clips WHERE size > 'hello';
השאילתה האחרונה נשמעת מוזרה - מה זה אומר שהגודל גדול יותר מהמילה hello
? הרי גודל הוא מחרוזת? התשובה שב SQL אנחנו משווים מחרוזות לפי המיקום שלהן בסדר מילוני, לדוגמה מילה שמתחילה ב d תהיה גדולה יותר ממילה שמתחילה ב a.
2. בין
המילה between מאפשרת לבחור ערכים שנמצאים בטווח מסוים לדוגמה כל השורות בהן הכמות היא בין 20 ל 50:
SELECT * FROM paper_clips WHERE quantity between 20 and 50;
תנאי between כולל את שני הערכים שבקצה ולכן השאילתה תחזיר גם שורות בהן ה quantity היא 20, 50 וכל מה שביניהם.
3. אחד מ
המילה in מאפשרת לבחור שורות בהן הערך שאנחנו מחפשים הוא אחד מכמה ערכים קבועים. לדוגמה הצגת כל השורות בהן הגודל הוא large או small:
select * from paper_clips where size in ('large', 'small');
4. חיבור תנאים (או, וגם, לא)
ניתן לחבר מספר תנאים בפקודת WHERE באמצעות המילים AND, OR ו NOT. המילה OR תחזיר תנאי שיצליח אם אחד מהתנאים שמרכיבים אותו הוא אמיתי, המילה AND דורשת שכל התנאים שמרכיבים את התנאי הגדול יהיו אמיתיים והמילה NOT הופכת תנאי. כמה דוגמאות:
- נציג את כל השורות בהן הגודל הוא בינוני או גדול וגם הכמות מעל 100:
select * from paper_clips where size in ('large', 'small') AND quantity > 100;
- נציג את כל השורות בהן הכמות קטנה מ 50 או גדולה מ 150:
select * from paper_clips where quantity < 50 OR quantity > 150;
- הצגת כל השורות בהן הגודל הוא "קטן" או "בינוני" והכמות קטנה מ 50, או שהכמות גדולה מ 150:
select * from paper_clips where
(quantity < 50 AND size in ('small', 'medium'))
OR quantity > 150;
- הצגת כל השורות בהן הצבע אדום והכמות גדולה מ 100:
select * from paper_clips where color = 'red' AND quantity > 100;
- הצגת כל השורות מלבד אלה שהתאימו ל-4:
select * from paper_clips where NOT (color = 'red' AND quantity > 100);
שימו לב שאני משתמש בסוגריים כדי לחבר תנאים כשהחיבור מסובך כדי להבהיר לקורא ולמחשב מה סדר הפעולות לביצוע - בדוגמה האחרונה כדי להבהיר שה NOT מופעל על כל התנאי שאחריו, וה AND מופעל רק על שני התנאים שצמודים אליו.