sql - محلوله - عمل استعلام أكثر من جدول
الفرق بين استعلام فرعي و استعلام فرعي مرتبط (5)
هل قطعة استعلام SQL التالية عبارة عن استعلام عادي أو استعلام فرعي مرتبط؟
SELECT UserID,
FirstName,
LastName,
DOB,
GFName,
GLName,
LoginName,
LoginEffectiveDate,
LoginExpiryDate,
Password,
Email,
ReportingTo,
Mobile,
CommunicationPreference,
IsActive
FROM (SELECT row_number() OVER (ORDER BY FirstName) AS Row,
UserID,
FirstName,
LastName,
DOB,
GFName,
GLName,
LoginName,
LoginEffectiveDate,
LoginExpiryDate,
Password,
Email,
ReportingTo,
Mobile,
CommunicationPreference,
IsActive
FROM DivakarUserRegistration) T
أيضا ، يمكن للشخص دولة الفرق بين الاثنين
أعتقد أن التفسير أدناه سوف يساعدك .. التمييز بين تلك: Correlated subquery
عبارة عن استعلام داخلي يشار إليه بواسطة الاستعلام الرئيسي (الاستعلام الخارجي) بحيث يعتبر الاستعلام الداخلي أنه تم استبعاده مرارًا وتكرارًا.
non-correlated subquery
هو non-correlated subquery
مستقل عن الاستعلام الخارجي ويمكن تنفيذه بمفرده دون الاعتماد على الاستعلام الخارجي الرئيسي.
plain subquery
لا يعتمد على الاستعلام الخارجي ،
استعلام فرعي Correlated Subquery هو استعلام فرعي يستخدم قيمًا من الاستعلام الخارجي. في هذه الحالة ، يجب تنفيذ الاستعلام الداخلي لكل صف من الاستعلام الخارجي.
انظر المثال هنا http://en.wikipedia.org/wiki/Correlated_subquery
لا يستخدم الاستعلام الفرعي البسيط قيمًا من الاستعلام الخارجي ويتم حسابه مرة واحدة فقط:
SELECT id, first_name
FROM student_details
WHERE id IN (SELECT student_id
FROM student_subjects
WHERE subject= 'Science');
مثال على استعلام فرعي CoRelated -
Query To Find جميع الموظفين الذين يكون راتبهم أعلى من المتوسط في قسمهم
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
المتطلبات الأساسية: يتم تقييم كل صف يتم معالجته بواسطة الاستعلام الرئيسي. تنفيذ الاستعلام Inner استناداً إلى القيمة التي تم إحضارها بواسطة الاستعلام الخارجي. يستمر حتى تتم مطابقة جميع القيم التي يتم إرجاعها بواسطة الاستعلام الرئيسي. يتم تشغيل استعلام INNER بواسطة استعلام OUTER
مثلا:
SELECT empno,fname,sal,deptid FROM emp e WHERE sal=(SELECT AVG(sal) FROM emp WHERE deptid=e.deptid)
استعلام فرعي Correlated يحسب AVG(sal)
على وجه التحديد لكل قسم.
SUBQUERY: يعمل أولاً ، يتم تنفيذه مرة واحدة ، ويعيد القيم التي سيتم استخدامها من خلال استعلام MAIN. يتم تشغيل استعلام OUTER بواسطة استعلام داخلي
المثال أعلاه ليس استعلام فرعي متعلق بالمشاركة. هو جدول مشتق / عرض مضمّن منذ أي استعلام فرعي ضمن جملة FROM.
يجب أن يشير استعلام Corelated Sub إلى جدول الأصل (استعلام رئيسي) فيه. على سبيل المثال ، راجع العثور على راتب Nth max بواسطة استعلام فرعي ذي صلة بالمشاركة:
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
المرتبطة ذات الصلة مقابل المتداخلة الفرعية.
الاختلاف الفني بين الاستعلام الفرعي العادي والاستعلامات الفرعية المرتبطة بـ:
1. الحلقات: حلقة الاستعلام الفرعي ذات الصلة ضمن الاستعلام الرئيسي ؛ بينما لا متداخلة ؛ لذلك يتم تنفيذ استعلام فرعي ذي صلة مشتركة على كل تكرار للاستعلام الرئيسي. بينما في حالة الاستعلام المتداخل ؛ ينفذ الاستعلام الفرعي أولاً ثم ينفذ الاستعلام الخارجي بعد ذلك. وبالتالي ، فإن الحد الأقصى لا. من التنفيذ هي NXM للاستعلام الفرعي المترابط و N + M للاستعلام الفرعي.
2. التبعية (من الداخلي إلى الخارجي مقابل الخارجي إلى الداخلي): في حالة الاستعلام الفرعي ذي الصلة المشترك ، يعتمد الاستعلام الداخلي على الاستعلام الخارجي للمعالجة بينما في الاستعلام الفرعي العادي ، يعتمد الاستعلام الخارجي على الاستعلام الداخلي.
3.الأداء: إنقاص استخدام أداء الاستعلام الفرعي ذي الصلة ، لأنه ينفذ تكرارات NXM بدلاً من تكرار N + M. ¨ تنفيذ الاستعلامات الفرعية ذات الصلة.
لمزيد من المعلومات مع الأمثلة:
في استعلام SQL ، إذا تم تنفيذ الاستعلام الداخلي لكل صف من الاستعلام الخارجي. إذا تم تنفيذ الاستعلام الداخلي لمرة واحدة وكانت النتيجة يتم استهلاكها بواسطة الاستعلام الخارجي ، فسيتم استدعاؤها باسم استعلام غير مرتبط.
تتوافق الاستعلامات الفرعية المرتبطة عادة مع استعلامات الصلة العادية ، أي استعلامات الانضمام التي لا تحتوي على استعلامات فرعية ، ويمكن التعبير عنها عادةً على هذا النحو. يوصى أحيانًا بترجمتها إلى استعلامات الصلة ، لأن معظم SQL DBMSs سوف تنفذها .....