recent
أخبار ساخنة

الإستعلامات الفرعية sub queries احادية الصف في قواعد البيانات SQL الدرس |11|

الصفحة الرئيسية

الإستعلامات الفرعية

هي عبارة عن إستعلامين او اكثر كل منهما مرتبط بالآخر او بمدلول الإستعلام الآخر مثل إيجاد راتب شخص معيّن و على اثر هذا الشخص يتم معرفة الموظفين الذين يستلمون نفس الراتب او اكبر او اصغر وكل ذلك يرجع إلى جملة الإستعلام التي سوف يتم تحديد المعامل.

الإستعلام الأول :
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.
 
 

google-playkhamsatmostaqltradent