29- كورس شرح قواعد البيانات MYSQL – MySQL EXISTS

MySQL EXISTS: شرح مفصل مع أمثلة متعددة

تعتبر MySQL واحدة من [شركة برمجة مصرية] أشهر أنظمة إدارة قواعد البيانات العلائقية، وتوفر مجموعة متنوعة من الأدوات والعمليات لتسهيل التعامل مع البيانات. من بين هذه الأدوات، نجد الوجود (EXISTS) وهي عبارة عن دالة تُستخدم في استعلامات SQL للتحقق من وجود سجلات معينة في نتيجة استعلام فرعي (subquery). في هذا المقال، سنقوم بشرح كيفية استخدام EXISTS في MySQL مع تقديم أمثلة متعددة لتوضيح كيفية عملها.

مفهوم EXISTS في MySQL

تعمل دالة EXISTS على اختبار ما إذا كان الاستعلام الفرعي يعيد أي سجلات. إذا أعاد الاستعلام الفرعي سجلاً واحداً أو أكثر، فإن EXISTS ترجع TRUE، وإلا فإنها ترجع FALSE. يتم استخدام EXISTS عادة لإجراء عمليات تحقق أو شروط إضافية في استعلامات SELECT أو DELETE أو UPDATE.

بناء الجملة لـ EXISTS

SELECT column1, column2, ...
FROM table_name
WHERE EXISTS (subquery);

هنا، يتم تنفيذ `subquery` كاستعلام فرعي، ويتم التحقق من وجود أي سجلات. إذا كان هناك سجلات، يتم تنفيذ الاستعلام الرئيسي.

أمثلة على استخدام EXISTS

المثال الأول: التحقق من وجود سجلات مرتبطة

لنفترض أن لدينا جدولين: `customers` و`orders`. نريد الحصول على قائمة بجميع العملاء الذين لديهم طلبات في جدول `orders`.

SELECT customer_name
FROM customers
WHERE EXISTS (
    SELECT 1
    FROM orders
    WHERE customers.customer_id = orders.customer_id
);

في هذا المثال، نقوم بالتحقق مما إذا كان هناك طلب مرتبط بكل عميل عن طريق الاستعلام الفرعي داخل EXISTS. إذا وُجد طلب، فإن العميل يُدرج في النتائج.

المثال الثاني: حذف السجلات غير المرتبطة

لنفترض الآن أننا نريد حذف جميع العملاء الذين ليس لديهم أي طلبات في جدول `orders`.

DELETE FROM customers
WHERE NOT EXISTS (
    SELECT 1
    FROM orders
    WHERE customers.customer_id = orders.customer_id
);

هنا، قمنا باستخدام NOT EXISTS لحذف العملاء الذين ليس [شركة برمجة مصرية] لديهم سجلات في جدول `orders`.

المثال الثالث: التحديث بناءً على شرط

نفترض أننا نريد تحديث حالة الطلبات إلى “مكتملة” لجميع العملاء الذين لديهم طلبات مؤخرة جداً (تاريخ الطلب قبل عام 2020) في جدول `orders`.

UPDATE orders
SET status = 'Completed'
WHERE EXISTS (
    SELECT 1
    FROM customers
    WHERE customers.customer_id = orders.customer_id
    AND orders.order_date < '2020-01-01'
);

في هذا المثال، يتم استخدام EXISTS للتحقق من وجود طلبات لكل عميل قبل تاريخ محدد، ومن ثم يتم تحديث حالة تلك الطلبات إلى “مكتملة”.

خاتمة

تعتبر دالة EXISTS أداة قوية وفعالة في MySQL للقيام بعمليات تحقق معقدة وإدارة البيانات بطريقة مرنة. من خلال الأمثلة المذكورة، يمكننا أن نرى كيف يمكن استخدام EXISTS في سياقات مختلفة مثل التحقق من وجود سجلات، حذف السجلات غير المرتبطة، وتحديث المعلومات بناءً على شروط محددة. باستخدام EXISTS بشكل صحيح، يمكن تحسين أداء الاستعلامات وجعلها أكثر كفاءة ودقة.