דילוג לתוכן המרכזי
מודול 4 · שיעור 1 מתוך 413/57 בקורס~8 min
שיעורי מודול (1/4)

רשימות וטווחים: IN ו-BETWEEN

במודולים הקודמים סיננת עם WHERE באמצעות שוויון ו השוואות: salary > 30000, department_id = 1, hired_on >= '2020-01-01'. אבל כשהתנאי הופך ל-"הערך חייב להיות אחד מחמשת אלה", OR משורשרות נערמות:

SQL
-- Heavy and fragile: adding a department means touching the query
SELECT first_name, last_name
FROM   employees
WHERE  department_id = 1
   OR  department_id = 2
   OR  department_id = 3;

SQL מציע שני קיצורי דרך כדי להפוך את זה לקריאה.

IN — "אחד מאלה"

האופרטור IN (...) לוקח רשימה של ערכים ומחזיר את true אם עמודה שווה ל-כל מהם:

SQL
SELECT first_name, last_name, department_id
FROM   employees
WHERE  department_id IN (1, 2, 3);

זהה מבחינה סמנטית ל-ORs לעיל, אבל הרבה יותר קריא: זה נקרא באופן טבעי בתור "במקום שבו department_id נמצא (1, 2, 3)". זה גם עובד עם מחרוזות ותאריכים:

SQL
SELECT name
FROM   departments
WHERE  city IN ('Milano', 'Roma');

יש גם NOT IN (...), שעושה את ההיפך:

SQL
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM   employees
WHERE  department_id NOT IN (1, 2);

BETWEEN — "בין A ל-B, שניהם כולל"

כאשר התנאי הוא טווח רציף (מספרים, תאריכים), במקום כתיבת column >= A AND column <= B יש לך BETWEEN A AND B:

SQL
-- Employees with a salary between 30000 and 50000 (both inclusive):
SELECT first_name, last_name, salary
FROM   employees
WHERE  salary BETWEEN 30000 AND 50000;

BETWEEN הוא כולל בשתי נקודות הקצה. זה עובד מאוד יפה עם גם תאריכים:

SQL
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM   employees
WHERE  hired_on BETWEEN '2020-01-01' AND '2020-12-31';

נסה את זה

פעילות גופנית#sql.m4.l1.e1
ניסיונות: 0טוען...

הצג שם פרטי (שם_שם), שם משפחה (שם_משפחה) ומשכורת (שכר) של עובדים עם שכר בין 30000 ל-50000 כולל. שלושה עמודים.

טוען עורך...
הצג רמז

השתמש בין 30000 ל-50000 - יותר קומפקטי וקריא משתי השוואות שאליהן מצטרפת AND.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#sql.m4.l1.e2
ניסיונות: 0טוען...

רשום שם פרטי (שם_שם) ושם משפחה (שם_משפחה) של עובדים העובדים במחלקות 1, 2 או 4 (השתמש ב-IN). סדר בסדר אלפביתי לפי שם משפחה.

טוען עורך...
הצג רמז

WHERE department_id IN (1, 2, 4) היא הגרסה הקומפקטית של שלושה מערכות OR.

הפתרון זמין לאחר 3 ניסיונות