الانتقال إلى المحتوى الرئيسي
الوحدة 4 · الدرس 1 من 413/57 في الدورة~8 min
دروس الوحدة (1/4)

القوائم والنطاقات: في وبين

في الوحدات السابقة قمت بالتصفية باستخدام WHERE باستخدام المعادلات و المقارنات: salary > 30000، department_id = 1، hired_on >= '2020-01-01'. ولكن عندما يصبح الشرط "يجب أن تكون القيمة إحدى هذه الخمس"، تتراكم ORs بالسلاسل:

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 (...) قائمة بالقيم ويعيد 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). الترتيب أبجديًا حسب الاسم الأخير.

جارٍ تحميل المحرر…
إظهار التلميح

حيث يعتبر Department_id IN (1، 2، 4) هو الإصدار المضغوط لثلاثة ORs.

الحل متاح بعد 3 من المحاولات