كيف أبحث عن العملاء الذين ليس لديهم طلبات باستخدام NOT EXISTS؟

سهلقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

تحتاج أحيانًا إلى اختيار صفوف لا توجد لها صفوف مرتبطة في جدول آخر، مثل العملاء الذين لم ينشئوا أي طلب. يناسب 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 من الأساسيات للاحتراف.

اختبر فهمك

في مخطط customers(id) وorders(id, customer_id)، أي شرط يختار العملاء الذين ليس لديهم أي طلب؟

SELECT c.id
FROM customers AS c
WHERE /* ضع الشرط هنا */;