الإستعلامات الفرعية
هي عبارة عن إستعلامين او اكثر كل منهما مرتبط بالآخر او بمدلول الإستعلام الآخر مثل إيجاد راتب شخص معيّن و على اثر هذا الشخص يتم معرفة الموظفين الذين يستلمون نفس الراتب او اكبر او اصغر وكل ذلك يرجع إلى جملة الإستعلام التي سوف يتم تحديد المعامل.
الإستعلام الأول :
SQL > SELECT sal FROM emp WHERE ename = 'JONES' ;
الإستعلام الثاني :
SQL > SELECT ename
2 FROM emp
3 WHERE sal > 2975 ;
الإستعلام الفرعي :
SQL > SELECT ename
2 FROM emp
3 WHERE sal > (SELECT sal FROM emp WHERE ename = 'JONES' ) ;
بمعنى آخر هو مُداخلة إستعلامين فيما بينهم بحيث يكون الإستعلامين مرتبطين ببعض و يكون الإستعلام الخارجي رئيسي, و الإستعلام الداخلي فرعي و يٌنفَذ الإستعلام الداخلي (الفرعي) اولاً ثم الإستعلام الخارجي (الرئيسي).
إرشادات الإستعلامات الفرعية
1- يجب وضع الإستعلام الفرعي بين قوسين.
2- يجب وضع الإستعلام الفرعي يمين معامل المقارنة(= , < , > , <= , >= , <>).
3- يجب التأكد من إستخدام معاملات اُحادية الصف مع إستعلامات فرعية اُحادية الصف (Single-Row Subquery).
4- يجب التأكد من إستخدام معاملات متعددة الصفوف مع إستعلامات فرعية متعددة الصفوف (Multiple-Row Subquery).
انواع معاملات المقارنة المستخدمة في الإستعلامات الفرعية
1- معاملات احادية الصف مثل (= , < , > , <= , >= , <>) و تُستخدَم مع الإستعلامات الفرعية احادية الصف التي ترجع بصف واحد (اي بقيمة واحدة).
2- معاملات متعددة الصفوف (ALL , ANY , IN) و تُستخدَم مع الإستعلامات الفرعية متعددة الصفوف اي التي ترجع بأكثر من قيمة.
اماكن كتابة الإستعلامات الفرعية داخل جملة Select
(WHERE , HAVING , FROM)
انواع الإستعلامات الفرعية
1- الإستعلام في عمود واحد : هي الإستعلامات التي تكون نتيجتها صف واحد فقط و لذلك يستخدم معها معاملات اُحادية الصف (= , < , > , <= , >= , <>).2- الإستعلام في عدة اعمدة : هي الإستعلامات التي تكون نتيجتها اكثر من صف و لذلك تُستخدَم معها معاملات متعددة الصفوف (ALL , ANY , IN).
مثال 1
SQL> select ename , sal ,job ,deptno
2 from emp where deptno=(select deptno from emp where ename ='KING');
في هذا المثال قُمنا بعمل إستعلام يقوم بإيجاد رقم إدارة الموظف 'KING' و ذلك عبر الإستعلام الداخلي الفرعي ثم عرض أسماء و رواتب و أرقام إدارات الموظفين في الإدارة رقم 10 التي يوجد بها الموظف 'KING' و هذا هو المطلوب من الإستعلام.
مثال 2
SQL> select ename ,sal
2 from emp
3 where sal=(select min(sal) from emp);
في هذا المثال قُمنا بعرض أقل راتب من جدول الموظفين و على أثر هذا الراتب يتم عرض وظيفة صاحب هذا الراتب و إسمه و راتبه, لقد إستخدمنا الدالة التجميعية min في الإستعلام الفرعي فقط إذا أتت في الإستعلام الرئيسي فإن جملة الشرط التي تأتي معها تكون having.
مثال 3
إستخدام الدوال التجمعية في الإستعلامات الفرعية ذات الصف الواحد
SQL> SELECT deptno , MIN(sal)
2 FROM emp
3 GROUP BY deptno
4 HAVING MIN(sal) >( select MIN(sal) from emp where deptno = 20 ) ;
هذا المثال يقوم بعرض اقل راتب من الإدارة رقم 20 و في الإستعلام الآخر الرئيسي يقوم بعرض اقل راتب اعتماداً على رقم الإدارة بحيث يكون اكبر من اقل راتب, في الإدارة 20 نلاحظ أنه لم يعرض الإدارة 20 و تم إستخدام جملة الشرط having و ذلك بسبب إستخدام الدالة التجمعية min.
ليست هناك تعليقات:
إرسال تعليق