ما هو الاستعلام الفرعي؟
استعلام داخل استعلام آخر — يُنفَّذ أولًا وتُستخدم نتيجته في الاستعلام الخارجي.
في WHERE
-- المستخدمون الأكبر من متوسط العمر
SELECT name, age FROM users
WHERE age > (SELECT AVG(age) FROM users);
مع IN
-- المستخدمون الذين لديهم طلبات
SELECT name FROM users
WHERE id IN (SELECT user_id FROM orders);
مع EXISTS
أسرع غالبًا — يتوقّف عند أول تطابق:
SELECT name FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);
استعلام فرعي في SELECT
SELECT
name,
(SELECT COUNT(*) FROM orders WHERE user_id = users.id) AS orders_count
FROM users;
استعلام فرعي في FROM
SELECT city, AVG(total) FROM (
SELECT u.city, o.total
FROM users u JOIN orders o ON u.id = o.user_id
) AS sub
GROUP BY city;
الاستعلام المرتبط (Correlated)
يشير إلى الاستعلام الخارجي ويُنفَّذ لكل صف — قوي لكنه أبطأ.
💡 كثير من الاستعلامات الفرعية يمكن كتابتها كـ JOIN بأداء أفضل — جرّب الاثنين.
🎯 التالي: دوال النصوص.