8.7 SQL - ANY, ALL
مشغّلات SQL: ANY و ALL
تسمح لك المشغّلات ANY و ALL بإجراء مقارنة بين قيمة واحدة في عمود ومجموعة من القيم التي يُرجعها استعلام فرعي (Subquery).
🔹 مشغّل SQL: ANY
- يُرجع TRUE إذا تحقّق الشرط على أي قيمة واحدة على الأقل من نتائج الاستعلام الفرعي.
- الشرط يكون صحيحًا إذا تحقق على قيمة واحدة فقط على الأقل في المجموعة.
✅ الصيغة:
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY (
SELECT column_name
FROM table_name
WHERE condition
);
ملاحظة: operator يمكن أن يكون: =, <>, !=, >, >=, <, <=
🔹 مشغّل SQL: ALL
- يُرجع TRUE فقط إذا كل القيم تحقق الشرط.
- الشرط لازم يكون صحيحًا على جميع القيم المُسترجعة.
✅ الصيغة:
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL (
SELECT column_name
FROM table_name
WHERE condition
);
ملاحظة: يمكن استخدامه مع: =, <>, !=, >, >=, <, <=
🗃 قاعدة البيانات التجريبية
جدول Products
- ProductID, ProductName, Price, وغيرها.
جدول OrderDetails
- OrderDetailID, ProductID, Quantity
✅ أمثلة على ANY:
1. منتجات لها طلب بكميّة = 10:
SELECT ProductName
FROM Products
WHERE ProductID = ANY (
SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10
);
2. منتجات لها طلب بكميّة > 99:
SELECT ProductName
FROM Products
WHERE ProductID = ANY (
SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99
);
3. منتجات لها طلب بكميّة > 1000 (لن يُرجع نتائج):
SELECT ProductName
FROM Products
WHERE ProductID = ANY (
SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000
);
✅ أمثلة على ALL:
1. عرض كل المنتجات (مثال عام):
SELECT ALL ProductName
FROM Products
WHERE TRUE;
2. منتجات كل طلباتها = 10 (نادراً ما ترجع نتائج):
SELECT ProductName
FROM Products
WHERE ProductID = ALL (
SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10
);
🧠 ملخص الفرق بين ANY و ALL:
| الخاصية | ANY | ALL |
|---|---|---|
| يتحقق الشرط إذا | قيمة واحدة فقط تطابق الشرط | جميع القيم تطابق الشرط |
| النتيجة | تشبه OR |
تشبه AND |
| مثال | Price > ANY (...) |
Price > ALL (...) |
تعليقات
إرسال تعليق