الاختلافات بين EXISTS و IN في SQL

مؤلف: Peter Berry
تاريخ الخلق: 12 أغسطس 2021
تاريخ التحديث: 12 قد 2024
Anonim
SQL: Difference Between IN and EXISTS Operator
فيديو: SQL: Difference Between IN and EXISTS Operator

المحتوى

التحدي المستمر في استخدام SQL هو تحديد الاستخدام السليم لمشغلي EXISTS و IN. يمكن للمشغلين إنتاج نفس النتائج ، ولكن ليس دائمًا. بالإضافة إلى ذلك ، هناك جدل كبير حول كيفية تحسين كل مشغل للسرعة. يجب على المستخدمين فهم الخصائص المختلفة لكل مشغل وتجربة الاثنين لتحديد الاستخدام المناسب.


النظر في أهداف SQL الخاصة بك عند اختيار EXISTS أو IN (كوكب المشتري / Photos.com / غيتي إيماجز)

في المشغل

يُرجع عامل التشغيل IN صفًا إذا كانت قيمة حقل الجدول تفي بشرط WHERE في قائمة قيم IN. عادةً ما يتم استخدامه كجزء من استعلام رئيسي أو بالاقتران مع استعلام فرعي.

مثال 1: WHERE table.field IN ('a'، 'b'، 'c') مثال 2: WHERE table.field IN (استعلام فرعي يعيد مجموعة)

المشغل EXISTS

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

مثال: WHIS EXISTS (استعلام فرعي يُرجع مجموعة)

فرق

لا يمكن لمشغل IN تقييم القيم الخالية (NULL) ، لذلك ستكون هذه الخطوط خاطئة دائمًا ، ولن يتم إرجاعها ، على عكس عامل التشغيل EXISTS ، الذي يقوم بتقييم وإرجاع الخطوط ذات القيم الخالية.


أوجه التشابه

يدعم كل من EXISTS و IN الاستعلامات الفرعية المرتبطة وغير المرتبطة ، ويمكن أن ينتج كلاهما نتائج مماثلة. عند الارتباط ، فإنها ترضي حقل استعلام رئيسي لحقل استعلام فرعي (على سبيل المثال: principal.id = subquery.id). يقيم الاستعلام الفرعي صفًا تلو الآخر ، لكل حدث تم العثور عليه. في هذه الحالة ، سيعود IN و EXISTS نفس الأسطر بناءً على شروط "id" مماثلة. عند عدم الارتباط ، يقوم المشغلان بمعالجة استعلاماتهما الفرعية ثم يجمعان نتائج الاستعلام الرئيسي.

أداء

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