فاديا جميل نشر 15 أكتوبر 2021 أرسل تقرير نشر 15 أكتوبر 2021 هل أستطيع الحصول على استعلام أكثر كفائة باستعمال SEMI-JOIN؟ 2 اقتباس
1 Sam Ahw نشر 15 أكتوبر 2021 أرسل تقرير نشر 15 أكتوبر 2021 يتيح مفهوم semi-join تنفيذ عدّة عمليات أثناء الاستعلام أي في وقت تحضير البيانات ويمكنه تنفيذ عدّة استراتيجيات على البيانات والجداول مثل سحب البيانات المتعددة والمطابقة بين البيانات والتحقق وغيرها.. وبالتالي يحسّن من أداء استخدام الاستعلامات الفرعية من خلال تصفية مجموعة من صفوف البيانات rows بناءً على دمجها مع مجموعة صفوف أخرى. أو بمعنى آخر، في حال كنا نقوم بعملية مقارنة inner-join بين جدولين، هنا يعيد الاستعلام جميع البيانات طالما هنالك تقابل بين الجدولين، ولكن في بعض الاستعلامات يلزمنا فقط معرفة في حال كان هنالك تقابل ولا نرغب بمقارنة جميع الأسطر والحصول على عددها، وهنا يمكننا استخدام مفهوم semi-join وهي تعمل بشكل مشابه للاستعلام التالي في MySQL: SELECT * FROM A WHERE A.key IN (SELECT B.key FROM B) وبالتالي يمكننا اختصار بعد الاستعلامات الطويلة مثل الاستعلام الذي يعتمد على left outer join: SELECT DISTINCT c.id FROM customers c LEFT JOIN salaries s ON s.customer_id = c.id WHERE s.customer_id IS NOT NULL بحيث يصبح بالشكل التالي: SELECT c.id FROM customers c WHERE EXISTS (SELECT 1 FROM salaries s WHERE s.customer_id = c.id) 1 اقتباس
1 Ahmed Sharshar نشر 15 أكتوبر 2021 أرسل تقرير نشر 15 أكتوبر 2021 ببساطة فإن semi-join هي طريقة تصفية مجموعة صفوف بناءً على تضمين صفوفها في مجموعة صفوف أخرى وهي تعادل: SELECT * FROM A WHERE A.key IN (SELECT B.key FROM B) ويوجد لفظ semi وذلك لانك لا تقوم فعليا بدمج الجزء الأيمن والأيسر من الجدول كما تفعل join ، نحن فقط نختار الذي قد يتحتويه الصفوف من الجدولين دون مقارنة كل الصفوف ببعضها. المثال التالي يوضح الفكرة، تخيل هناك جدول للأستاذة كالتالي: ID Rank Salary 101 Assistant Professor 80,000 102 Associate Professor 90,000 103 Lecturer 70,000 وجدول للطلاب هكذا: ID RollNo Marks 103 2017 – 01 80 104 2017 – 02 90 105 2017 – 03 70 فإان اختيار Student Semi Join Teacher ينتج عنه هذا الجدول: ID RollNo Marks 103 2017 – 01 80 لاحظ أنه قام بإرجاع البيانات الخاصة بالطالب الذي توافق ال id الخاص به بالمعلم. اما اذا قمنا بعمل Teacher SEMI-JOIN Student فالجدول يصبح كالتالي: ID Rank Salary 103 Lecturer 70,000 لاحظ هنا أنه قام بإرجاع البيانات الخاصة بالمعلم الذي توافق ال id الخاص به بالطالب. 1 اقتباس
السؤال
فاديا جميل
هل أستطيع الحصول على استعلام أكثر كفائة باستعمال SEMI-JOIN؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.