شرح صفوف ومحتوى الفقرة
عندما يرجع الاستعلام الداخلي عموداً واحداً يحتوي على عدة صفوف، فإنه يشكّل قائمة قيم. ولا يجوز مقارنة القائمة بمعامل المساواة المجرد =، بل نستخدم معها المعامل IN:
- فحص الانتماء للقائمة: تختبر الصيغة
WHERE user_id IN (SELECT ...)ما إذا كانت قيمة العمود الخارجي مطابقة لأي قيمة ضمن مخرجات الاستعلام الفرعي. - فخ
NOT INمعNULL: إذا احتوت مخرجات الاستعلام الفرعي على قيمةNULLواحدة فقط، فإن الشرطNOT IN (SELECT ...)يُقيّم إلى غير معروفUNKNOWNويرجع صفراً من الصفوف! لذلك أضف دائماًWHERE col IS NOT NULLداخل استعلامNOT IN.
SQL
-- Find customers who placed at least one high-value order in 2026
SELECT
user_id,
full_name,
email
FROM users
WHERE user_id IN (
SELECT user_id
FROM orders
WHERE total_amount >= 500.00
AND user_id IS NOT NULL
);