في SQL، IN، ANY، ALL، و EXISTS هي أدوات مهمة بتساعد في كتابة شروط مرنة وتصفية البيانات بناءً على قوائم أو استعلامات فرعية. كل واحدة ليها استخدام محدد وأداء مختلف حسب الحالة.


1. IN

الاسم: Membership Operator

  • بتستخدم عشان تتحقق إذا كانت قيمة معينة موجودة في قائمة أو نتيجة استعلام فرعي.
  • تعتبر بديل أسهل للكتابة بدل استخدام شروط متعددة بـ OR.

الصيغة:

column_name IN (value1, value2, value3, ...)

مثال:

SELECT * FROM Employees
WHERE DepartmentID IN (1, 2, 3);
  • الوظيفة: بيجيب الموظفين اللي أقسامهم هي 1 أو 2 أو 3.

باستخدام استعلام فرعي:

SELECT * FROM Employees
WHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE Location = 'Cairo');
  • الوظيفة: بيجيب الموظفين اللي شغالين في أقسام موجودة في “Cairo”.

2. ANY

الاسم: Comparison Operator

  • بتتحقق إذا كانت قيمة معينة تحقق الشرط مع أي قيمة في قائمة أو نتيجة استعلام فرعي.
  • بتستخدم مع شروط المقارنة (\=, >, <, إلخ).

الصيغة:

expression operator ANY (subquery)

مثال:

SELECT * FROM Products
WHERE Price > ANY (SELECT Price FROM Products WHERE CategoryID = 1);
  • الوظيفة: بيجيب المنتجات اللي سعرها أعلى من أي منتج في الفئة 1 (يعني أعلى من الأقل سعرًا).

3. ALL

الاسم: Comparison Operator

  • بتتحقق إذا كانت قيمة معينة تحقق الشرط مع كل القيم في قائمة أو نتيجة استعلام فرعي.
  • عكس ANY لأنه بيتطلب تحقق الشرط مع كل القيم.

الصيغة:

expression operator ALL (subquery)

مثال:

SELECT * FROM Products
WHERE Price > ALL (SELECT Price FROM Products WHERE CategoryID = 1);
  • الوظيفة: بيجيب المنتجات اللي سعرها أعلى من كل المنتجات في الفئة 1 (يعني الأعلى سعرًا).

4. EXISTS

الاسم: Existence Operator

  • بتتحقق إذا كان الاستعلام الفرعي بيرجع أي صفوف (بمعنى إذا كانت البيانات موجودة).
  • بيرجع TRUE أو FALSE بناءً على وجود بيانات.

الصيغة:

EXISTS (subquery)

مثال:

SELECT * FROM Employees E
WHERE EXISTS (
    SELECT 1 FROM Departments D
    WHERE E.DepartmentID = D.DepartmentID AND D.Location = 'Cairo'
);
  • الوظيفة: بيجيب الموظفين اللي أقسامهم موجودة في “Cairo”.

مقارنة بينهم:

الاسمالوظيفةمثال عملي
INالتحقق إذا كانت القيمة موجودة في قائمة أو استعلام فرعيأقسام محددة
ANYالتحقق من شرط مع أي قيمة في القائمة أو الاستعلام الفرعيأقل من أي سعر
ALLالتحقق من شرط مع كل القيم في القائمة أو الاستعلام الفرعيأعلى من الكل
EXISTSالتحقق من وجود صفوف في استعلام فرعيتحقق من وجود

ملاحظات:

  1. الـ**IN** بسيط وسهل للاستخدام مع قوائم قصيرة.
  2. الـ**ANY** و ALL بيعتمدوا على شروط مقارنة مع قوائم أو استعلامات.
  3. الـ**EXISTS** مفيد لما مش مهم البيانات نفسها، لكن المهم إنها موجودة.
  4. الأداء ممكن يتأثر حسب حجم البيانات والاستعلام، فاختار الأنسب لحالتك.