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