يستخدم الاستعلام الفرعي المترابط داخل SELECT كثيرًا لعرض عدد السجلات التابعة لكل صف خارجي. إذا احتوى على COUNT(*) دون GROUP BY، فإنه يعيد صفًا واحدًا يحمل العدد، حتى عندما لا توجد سجلات مطابقة. في هذه الحالة تكون القيمة صفرًا.
هذا السلوك يختلف عن استعلام يختار عمودًا عاديًا ولا يجد أي صف، إذ تتحول نتيجته القياسية إلى NULL. سبب الفرق أن التجميع بلا مجموعات صريحة ينتج نتيجة إجمالية للمدخلات، بينما الاختيار العادي لا ينشئ صفًا عند غياب البيانات المطابقة.
مثال
WITH customers AS (
SELECT 1 AS id UNION ALL SELECT 2
), orders AS (
SELECT 1 AS customer_id
)
SELECT c.id,
(SELECT COUNT(*) FROM orders AS o
WHERE o.customer_id = c.id) AS order_count
FROM customers AS c
ORDER BY c.id;
إضافة GROUP BY داخل الاستعلام قد تغير حالة المدخلات الفارغة، لذلك يجب عدم تعميم نتيجة الصفر على جميع الاستعلامات التي تحتوي على COUNT دون النظر إلى بنيتها.
باختصار: يعيد COUNT(*) دون تجميع صريح صفرًا عند غياب المطابقات داخل الاستعلام الفرعي.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.