في 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 | التحقق من وجود صفوف في استعلام فرعي | تحقق من وجود |
ملاحظات:
- الـ**
IN** بسيط وسهل للاستخدام مع قوائم قصيرة. - الـ**
ANY** وALLبيعتمدوا على شروط مقارنة مع قوائم أو استعلامات. - الـ**
EXISTS** مفيد لما مش مهم البيانات نفسها، لكن المهم إنها موجودة. - الأداء ممكن يتأثر حسب حجم البيانات والاستعلام، فاختار الأنسب لحالتك.