شرح sql بالعربي – الاستعلامات الفرعية

الكاتب بتاريخ عدد التعليقات : 0
اخذنا في الدرس السابق دوال التحويل اليوم ان شاء الله سندخل في قسم جديد ضمن دروسنا شرح sql  بالعربي وهو موضوع الاستعلامات الفرعية .

الاستعلام الفرعي هو أي استعلام يتم تضمينه في إستعلام آخر .

شرح sql  بالعربي – الاستعلامات الفرعية


ملاحظات :
  1. يمكن للاستعلام الفرعي ان يحتوي استعلاما فرعيا اخر.
  2. ليس من الضروري ان تستخدم الاستعلامات الفرعية نفس الجداول التي تستخدمها الاستعلامات الرئيسة .
  3. لا تدعم قواعد بيانات MySQL الاستعلامات الفرعية بل تستخدم بدلا منها ما يسمى Join التي سنأتي على ذكرها لاحقاً .


تابع معي الان الاستعلامات الفرعية :

اولاً الاستعلامات الفرعية المرتبطة باستعلام رئيسي :

هي الاستعلامات الفرعية التي تعتمد في عملها على بيانات من استعلامات رئيسية حاوية لها.
في هذا النوع من الاستعلامات الفرعية، يتم تكرار عملية تنفيذ الاستعلام بعدد مرات مساوٍ لعدد السجلات التي يُعيدها
الاستعلام الرئيسي.

مثال:
إذا كان لدينا الجدول Customers الحاوي على معلومات الزبائن، والجدول Orders الحاوي على معلومات الطلبيات. لإظهار قائمة باسم كل زبون customerName وعدد الطلبيات لكل زبون نكتب الاستعلام :
Select customerName,(select count(*) from Orders
where Orders.customerID=Customers.customerID) from Customers;
نلاحظ في المثال السابق بأنه سيتم تكرار تنفيذ الاستعلام الفرعي (الظاهر باللون الأحمر) بعدد سجلات الزبائن وأن الاستعلام سيعيد عدد الطلبيات لكل زبون.

ثانياً الاستعلامات الفرعية المستقلة

وهي الاستعلامات الفرعية التي تكون مستقلة تمامًا عن الاستعلامات الرئيسية الحاوية لها،
أي أن الاستعلام الفرعي سيَُنفَّذ بشكل كامل ويُمرر القيمة أو مجموعة القيم الناتجة إلى الاستعلام الرئيسي.
مثال:
إذا كان لدينا جدول Students يحتوي أسماء الطلاب studentName وأرقامهم التسلسلية studentID وجدول آخر Grades يحتوي علامات الطلاب grade وأرقامهم التسلسلية studentID لإعادة لائحة بأسماء الطلاب الناجحين فقط نكتب الاستعلام:
Select studentName from Students where Students.studentID in (select
Grades.studentID from Grades where Grades.grade>=50);
اعتبرنا درجة النجاح انها 50 .
نلاحظ في الاستعلام السابق أنه سيتم تنفيذ الاستعلام الفرعي (باللون الأحمر) مرة واحدة فقط، وبصورة مستقلة عن عدد السجلات في الجدول Students .
انتبه:
تحتاج الاستعلامات الفرعية المرتبطة باستعلام رئيسي للكثير من الوقت والمعالجة بالمقارنة مع الاستعلامات غير
المرتبطة باستعلامها الرئيسي.
يتطلب العمل بالاستعلامات الفرعية أحيانًا استخدام حقول من أكثر من جدول، فاحرص على عدم استخدام أسماء حقول متشابهه بل استخدم الصيغة .Table_Name.Field_Name

استعمال الاستعلام الفرعي كعمود من أعمدة الاستعلام الرئيسي

يأخذ هذا الاستعلام الصيغة:
Select columnA, (subquery) as columnB from Table_Name;
في الصيغة السابقة سيتم تنفيذ الاستعلام Subquery على كل سجل يقوم الاستعلام الرئيسي بإعادته هذا النوع من الاستعلامات الفرعية يفيد في توليد علاقة بين جدول وآخر.
وبناءاً على هذه الصيغة يجب ألا يعيد الاستعلام الفرعي أكثر من قيمة واحدة لكل سجل في سجلات الاستعلام الرئيسي.

مثال:
لنفرض انه لدينا الجدول Accounts الذي يحتوي على الارقام التسلسلية للحسابات المصرفية accountID وقيم ارصدة هذه الحسابات accountBalance ولنفترض انه لدينا الجدول Clients الذي يحتوي على اسماء اصحاب تلك الحسابات المصرفية clientName ورقم الحساب لكل زبون accountID لكي نقوم بإظهار قائمة بأرقام الحسابات وارصدتها واسماء اصحابها نستخدم الصيغة التالية:
Select Accounts.accountID, (select clientName from Clients where
Clients.accountID = Accounts.accountID)as myClientName,
Accounts.accountBalance
from Accounts;
المثال السابق يعتبر عيّنه من الاستعلامات الفرعية المرتبطة بالاستعلام الرئيسي نظراً لكون الاستعلام الفرعي الظاهر باللون الاحمر لن يعمل وحيداً بل يحتاج الى معلومات من استعلام رئيسي وهي قيم .Accounts.accountID

انتبه:
لاحظ اننا استخدمنا في بعض الصيغ السابقة اسماء الجداول مع اسماء الحقول مفصولة بنقاط "." وذلك لمنع حدوث خلط في تحديد تبعية احد الحقول لأي من الجداول .
كذلك انتبة انه لكي تعمل الصيغة في المثال السابق دون اخطاء يشترط ان يعيد الاستعلام الفرعي قيمة واحدة لكل سجل من سجلات الاستعلام الرئيسي .

يعتبر استعمال الاستعلام الفرعي كعمود من اعمدة الاستعلام الرئيسي احد التركيبات المستخدمة بكثرة في الاستعلامات الفرعية .

نكتفي بهذا ونلتقي في الدرس القادم والذي سيكون بعنوان استعمال الاستعلامات الفرعية ضمن شرط Where

لا تنسى مشاركة هذا مع اصدقائك
كذلك ليصل اليك جديدنا قم بالاشتراك في المدونة او سجل اعجابك بصفحتنا على الفيس بوك
دمت بخير عزيزنا الزائر 

0 تعليق على موضوع "شرح sql بالعربي – الاستعلامات الفرعية "

لا تبخل علينا باقتراحك او قم بمشاركة الموضوع ليستفيد الاخرين ايضاً شكرا لزيارتك عزيزي الزائر
الإبتساماتإخفاء