في 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
** مفيد لما مش مهم البيانات نفسها، لكن المهم إنها موجودة. - الأداء ممكن يتأثر حسب حجم البيانات والاستعلام، فاختار الأنسب لحالتك.