دروس الوحدة (1/4)
القوائم والنطاقات: في وبين
في الوحدات السابقة قمت بالتصفية باستخدام WHERE باستخدام المعادلات و
المقارنات: salary > 30000، department_id = 1، hired_on >= '2020-01-01'.
ولكن عندما يصبح الشرط "يجب أن تكون القيمة إحدى هذه الخمس"،
تتراكم ORs بالسلاسل:
-- 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 إذا كان
العمود يساوي أي منها:
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);إنها متطابقة لغويًا مع ORs أعلاه، ولكنها أكثر قابلية للقراءة: فهي
يُقرأ بشكل طبيعي كـ "حيث يوجد department_id في (1، 2، 3)". كما أنه يعمل
مع السلاسل والتواريخ:
SELECT name
FROM departments
WHERE city IN ('Milano', 'Roma');هناك أيضًا NOT IN (...)، والذي يفعل العكس:
-- 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:
-- 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 شامل في كلا نقطتي النهاية. يعمل بشكل جيد للغاية مع
التواريخ أيضا:
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM employees
WHERE hired_on BETWEEN '2020-01-01' AND '2020-12-31';جربه
إظهار الاسم الأول (الاسم الأول) والاسم الأخير (الاسم الأخير) والراتب (الراتب) للموظفين الذين تتراوح رواتبهم بين 30000 و50000 شاملاً. ثلاثة أعمدة.
إظهار التلميح
استخدم ما بين 30000 و50000 — أكثر إحكاما وقابلية للقراءة من مقارنتين متصلتين بـ AND.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
قم بإدراج الاسم الأول (الاسم الأول) والاسم الأخير (اسم العائلة) للموظفين العاملين في الأقسام 1 أو 2 أو 4 (استخدم IN). الترتيب أبجديًا حسب الاسم الأخير.
إظهار التلميح
حيث يعتبر Department_id IN (1، 2، 4) هو الإصدار المضغوط لثلاثة ORs.
الحل متاح بعد 3 من المحاولات