SQLالإستعلامات المتداخلة
- مفهوم الإستعلامات المتدخلة
- أولوية تنفيذ الإستعلامات المتداخلة
- تجهيز قاعدة البيانات التي سنطبق عليها
- أمثلة شاملة على كتابة إستعلامات متداخلة
مفهوم الإستعلامات المتدخلة
الإستعلام العادي الذي لا يحتوي على أوامر متداخلة يقال له Query فقط.
بينما الإستعلام الذي يحتوي على أوامر متداخلة مثل أمر SELECT بداخله أمر SELECT فهنا يقال لهذا الإستعلام Sub Query أو Nested Query أو Inner Query.
الإستعلامات المتداخلة مهمة جداً و هي منطق في العمل نطبقه عند الحاجة لإجراء إحصاءات محددة على أساسسها نقوم بجلب القيم, تعديلها, أو حذفها.
في هذا الدرس لن تتعلم أوامر جديدة في SQL بل ستتعلم المنطق الذي نتبعه لكتابة إستعلامات متداخلة خطوة خطوة.
كتابة إستعلامات متداخلة يعتبر أصعب شيء قد تتعلمه في قواعد البيانات و قد تحتاج وقت حتى تعتاد عليه و تفهم كيف تفعله بنفسك.
لذا حاول متابعة الدرس بهدوء و تركيز تام و شاهد الفيديوهات الموضوعة ضمن الأمثلة لأنها ستساعدك كثيراً في فهم الطريقة التي تم فيها كتابة الإستعلامات.
أولوية تنفيذ الإستعلامات المتداخلة
عند وضع الإستعلامات بداخل بعضها البعض, يتم تنفيذ الإستعلامات الداخلية و من ثم الإستعلامات الخارجية.
كمثال بسيط, تخيل أن الإستعلام مكتوب على هذا النحو.
هنا سيتم حساب ناتج الإستعلام الداخلي و يتم وضع جوابه مكانه.
فمثلاً في حال كان ناتج الإستعلام الداخلي هو 1500
فإن الإستعلام سيصبح كأنه كالتالي بالضبط.
الآن بعد أن أصبح الإستعلام لا يحتوي على أي أوامر متداخلة, سيتم إعطاءك الجواب النهائي.
أي إستعلام داخلي يجب أن تضعه بين قوسين ( )
لأن أولية التنفيذ تقررها قاعدة البيانات نسبةً للأقواس. و بالطبع في حال كان يوجد أكثر من إستعلام داخلي، سيتم تنفيذ أعمق إستعلام بينهم في البداية رجوعاً للإستعلام الأساسي الذي ينتظر نتائج كل نتائج الإستعلام الموضوعة فيه حتى يتنفذ كما في المثال السابق.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها جدول إسمه scientists
يحتوي على بيانات 10 علماء.
الإستعلام
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash
و إنشاء الجدول scientists
بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash
من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول scientists
.
id | name | salary | country | continent |
---|---|---|---|---|
1 | Ahmad | 4200.00 | KSA | Asia |
2 | Rami | 2750.00 | Egypt | Africa |
3 | Said | 3900.00 | Lebanon | Asia |
4 | Noura | 3150.00 | Algeria | Africa |
5 | Amani | 2950.00 | Morocco | Africa |
6 | Mhamad | 3700.00 | Lebanon | Asia |
7 | Wissam | 3550.00 | Oman | Asia |
8 | Mostafa | 4120.00 | Qatar | Asia |
9 | Houssam | 6800.00 | Germany | Europe |
10 | Jana | 7500.00 | Canada | North America |
أمثلة شاملة على كتابة إستعلامات متداخلة
المثال الأول
الإستعلام التالي يعرض جميع معلومات الموظف الذي ينال أعلى أجر.
هنا يجب معرفة أكبر راتب يتم إعطاؤه للموظفين, بعد معرفته يمكننا إحضار معلومات كل موظف يملك نفس هذا الراتب.
الإستعلام
الفيديو التالي يشرح كود الإستعلام بدقة و يشرح كيف حصلنا على النتيجة.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
id | name | salary | country | continent |
---|---|---|---|---|
10 | Jana | 7500.00 | Canada | North America |
المثال الثاني
الإستعلام التالي يعرض أسماء و رواتب العلماء الذين ينالون راتب لا يتجاوز متوسط الرواتب التي يتم إعطاءها للموظفين.
هنا يجب معرفة متوسط الرواتب التي يتم إعطاءها للموظفين, بعد معرفته يمكننا إحضار أسماء و رواتب العلماء الذين يملكون راتب أقل منه.
الإستعلام
الفيديو التالي يشرح كود الإستعلام بدقة و يشرح كيف حصلنا على النتيجة.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
name | salary |
---|---|
Ahmad | 4200.00 |
Rami | 2750.00 |
Said | 3900.00 |
Noura | 3150.00 |
Amani | 2950.00 |
Mhamad | 3700.00 |
Wissam | 3550.00 |
Mostafa | 4120.00 |
المثال الثالث
الإستعلام التالي يعرض إسم أكثر قارة تم إحضار علماء منها.
هنا يجب معرفة عدد العلماء الموجودين في كل قارة.
بعدها يجب معرفة أكبر عدد علماء تم إيجاده في قارة.
بعدها يجب طباعة إسم و عدد علماء كل قارة عدد علمائها يساوي عدد العلماء الأكبر الذي عرفناه.
الإستعلام
الطريقة التالية تعمل مع جميع قواعد البيانات.
الفيديو التالي يشرح كود الإستعلام بدقة و يشرح كيف حصلنا على النتيجة.
إذا كنت تستخدم قواعد بيانات MySQL يمكنك كتابة الإستعلام نفسه كالتالي.
إذا كنت تستخدم قواعد بيانات SQL Server / Access يمكنك كتابة الإستعلام نفسه كالتالي.
إذا كنت تستخدم قواعد بيانات Oracle يمكنك كتابة الإستعلام نفسه كالتالي.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
continent | total |
---|---|
Asia | 5 |