סדרת SQL בסיסי - פוסט 15 - משפט WHERE

24/08/2024

פקודות 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);

ולשאילתות:

  1. נציג את כל השורות שצבען שונה מכסף:
SELECT * FROM paper_clips WHERE color != 'silver';
  1. נציג את כל השורות שהכמות שלהן גדולה מ 100:
SELECT * FROM paper_clips WHERE quantity > 100;
  1. כמות קטנה מ 100:
SELECT * FROM paper_clips WHERE quantity < 100;
  1. כמות גדולה או שווה 50:
SELECT * FROM paper_clips WHERE quantity >= 50;
  1. גודל גדול יותר מ 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 הופכת תנאי. כמה דוגמאות:

  1. נציג את כל השורות בהן הגודל הוא בינוני או גדול וגם הכמות מעל 100:
select * from paper_clips where size in ('large', 'small') AND quantity > 100;
  1. נציג את כל השורות בהן הכמות קטנה מ 50 או גדולה מ 150:
select * from paper_clips where quantity < 50 OR quantity > 150;
  1. הצגת כל השורות בהן הגודל הוא "קטן" או "בינוני" והכמות קטנה מ 50, או שהכמות גדולה מ 150:
select * from paper_clips where
  (quantity < 50 AND size in ('small', 'medium'))
  OR quantity > 150;
  1. הצגת כל השורות בהן הצבע אדום והכמות גדולה מ 100:
select * from paper_clips where color = 'red' AND quantity > 100;
  1. הצגת כל השורות מלבד אלה שהתאימו ל-4:
select * from paper_clips where NOT (color = 'red' AND quantity > 100);

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