SQL Databases • المستوى الثالث • الدرس 4
العودة لفهرس المستوىالاستعلامات الفرعية والتجميع المتقاطع (Subqueries)
أهداف الدرس
- كتابة الاستعلامات الفرعية المدمجة (Subqueries / Nested Queries).
- استخدام
INوNOT INمع نتائج الاستعلامات الفرعية. - دمج
AVG()مع Subquery للفلترة حسب المتوسط العام. - استخراج بيانات شرطية معقدة عبر دمج المخرجات بين الجداول.
1. ما هي الاستعلامات الفرعية Subqueries؟
هي عبارة عن استعلام SQL داخلي يتم تضمينه بداخل عبارة WHERE أو FROM أو SELECT لاستخدام نتيجته كمدخل للشرط الرئيسي.
sql
-- Subquery في WHERE
SELECT name FROM users
WHERE id IN (
SELECT user_id FROM orders WHERE total_amount > 100
);
-- Subquery مع AVG
SELECT * FROM orders
WHERE total_amount > (SELECT AVG(total_amount) FROM orders);
-- Subquery في FROM (Derived Table)
SELECT sub.user_id, sub.total
FROM (
SELECT user_id, SUM(total_amount) AS total
FROM orders
GROUP BY user_id
) AS sub
WHERE sub.total > 500;2. أنواع Subqueries
Scalar Subquery
يُرجع قيمة واحدة (رقم أو نص).
WHERE x > (SELECT AVG(y) FROM t)
Row Subquery
يُرجع صفاً واحداً بعدة أعمدة.
WHERE (a, b) = (SELECT x, y FROM t)
Table Subquery
يُرجع جدولاً كاملاً (يُستخدم في FROM).
FROM (SELECT ... FROM t) AS sub
Correlated Subquery
يعتمد على الصف الخارجي (نادر ومهم للأداء).
WHERE x = (SELECT ... WHERE t.id = u.id)
3. IN vs EXISTS vs NOT IN
| الأداة | الوظيفة | مثال |
|---|---|---|
| IN | قيمة موجودة في قائمة | id IN (SELECT ...) |
| NOT IN | قيمة غير موجودة في قائمة | id NOT IN (SELECT ...) |
| EXISTS | هل يوجد صف مطابق؟ | WHERE EXISTS (SELECT 1 ...) |
ملاحظة: EXISTS أسرع عادةً من IN مع الجداول الكبيرة.
التطبيق العملي المباشر
تحدي الدرس الرابع: استعلامات فرعية متقدمة
قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:
- احتفظ بالاستعلام الأصلي (Subquery مع AVG).
- أضف استعلاماً يجلب المستخدمين الذين لديهم طلبات بـ
total_amount > 100فقط. - أضف استعلاماً يجلب الطلبات التي تتجاوز متوسط كل الطلبات (بدون Subquery للمستخدمين).
- أضف استعلاماً بـ
NOT INلجلب المستخدمين الذين ليس لديهم أي طلبات. - أضف استعلاماً بـ
GROUP BYمعSUM(total_amount)لمجموع طلبات كل مستخدم. - اضغط "تشغيل الكود" لرؤية نتائج آخر استعلام.
⏳ جارٍ تحميل المحرر التفاعلي...