Select جمل الاستعلام

تعليم أوراكل للعرب

هذه العيار من الممكن اعتبارها كجملة استعلام كما يمكن اعتبراها كتقرير إخراج وكنموذج إدخال وأيضا مثل ماكرو يقوم بعمل عدة تعديلات و تحديثات على قاعدة البيانات ويمكن تداخل هذه الجمل مع بعضها البعض تداخل معقد بعض الشيء ولكن من السهل تعلمه وذلك لكي تقوم باستخراج بيانات محددة أو تمرير عملية معينة على بيانات معينة لكي يتم بالفعل إجراء تعديل على قاعدة البيانات كالإدخال مثلا وكتحديد العمال الذين يتقاضون رواتب معينة وهم من فئة معينة …. الخ 

سوف نبدء هنا بمثال بسيط لكي يتم التعرف على بنيه هذه الجملة

Select * From emp ;

في هذه الجملة قمنا بطلب جميع البيانات الموجودة في جدول الموظفين وهذه الجملة من الممكن صيغتها في عدة جمل أخرى للحصول على نفس النتيجة أو لكي يتم فلتره للجدول للبحث عن معلومات معينة 

مثال 1

Select ename , job , age , city From emp;

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

مثال 2

Select ename , age From emp Where job = ‘Manger’;

في هذا المثال قمنا بعملية جديدة وهي إدخال الشروط على جملة استعلام في هذا المثال قمنا بطلب الاسم والعمر للذين هم منصب المدير 

مثال 3

Select ename , age , job , city From emp where city = ‘ Riyadh’ and job = ‘Manager’ ;

في هذا المثال قمنا بعملية تضييق على البيانات لكي يتم الحصول على بيانات أكثر دقة وأقل شمولية في هذا المثال قمنا بطلب بيانات الموظفين الذين هم من مدينة الرياض ومنصبهم في منصب مدير وبذلك نرى إمكانية تداخل التعابير المنطقية في جملة الاستعلام مثل 

للحصول على أمثلة لكيفية التعامل مع كل من التعابير والمعاملات قم بالنقر على اسم الموضوع المحدد

المعاملات

قم بالنقر على أحد هذه المواضيع للشرح

AND , OR , NOT المعاملات المنطقية
* , / , + , - معاملات رياضية
= , < , > , <= , >= , <> معاملات المقارنة
|| معامل الدمج مثل يعمل كوظيفة & في فيجوال بيسك
Desc , Asce with ORDER BY معاملات الفرز التصاعدي والتنازلي
Like , Like ‘M%S%’ معاملات المقارنة المتقدمة
Is Null , Nvl معاملات الاختبارات
 Lower , Upper , Initcap دوال المحارف الأساسية
 Concat , Substr , Length , Instr , Lpad , Rpad دوال معالجة الأحرف
Round , Trunc , Mod ,Sin ,Cos ,Tan,Avg ,Max ,Min ,Sum ,Count , Stddev ,Variance دوال الأرقام
Months_Between , Add_Months , Next_Day , Last_Day , Round , Trunc دوال التواريخ
To_Char , To_Number , To_Date دوال تحويل البيانات
Decode الدالة الشرطية مثل عمل IF then else

الآن وبعد أن تعرفت على المعاملات الخاصة باللغة التعامل مع البيانات والتي تؤهلك الآن لتعرف كيف من الممكن أن تتعامل مع جمل الاستعلام المتداخلة والمتقدمة والتي تفيدك للحصول على أقوى أشكال الاستعلام والتي تفيدك في إكمال الدروس اللاحقة الخاصة بلغة التعامل مع البيانات كالإضافة والحذف والتعديل وغيرها من البيانات الأخرى


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

select أسماء الحقول From أسماء الجداول where شرط أو عدة شروط أو جملة استعلام ;

مثال

Select ename,job From emp where age =’ 33 ‘ ;

المثال السابق يقوم بالاستعلام من جدول وحيد ولكن كيف لو أردنا أن نقوم بالاستعلام من عدة جداول 

Select اسم الحقل.اسم الجدول , اسم الحقل.اسم الجدول From اسم الجدول 1 , اسم الجدول 2

مثال

select emp.ename , emp.job , dept.loc From emp , dept where emp.deptno = dept.deptno

في المثال السابق قمنا بالتعامل مع جدول الموظفين وجدول تعريف الدوائر وقمنا بطلب بيانات من الجدولين بعد تعريف مكان العلاقة بينهما بجملة الاستثناء حيث أن رقم الدائرة الخاص بالموظف في جدول الموظفين مربوط بجدول تعريف الدوائر عن طريق رقم الدائرة وعلى ذلك تبين لنا كيفية إمكانية الربط بين جدولين بينهما علاقة ربط وطلب بيانات من كلاهما

ويمكن صياغة المثال السابق بطريقة أخرى وهي طريقة الوسيط أو الوصف Elias حيث أن الوسيط يوفر علينا من كتابة اسم الجدول عند كل حقل ويكفي أن نقوم بتعريف حرف خاص لكل جدول للاستعاضة عنه

مثال

Select e.ename , e.job , d.deptno from emp e ,dept d where e.deptno = d.deptno ;


الاستعلامات المتداخلة

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

مثال

select ename , job , city From emp where sal = (select max(sal) from emp) ;

والمثال السابق نتائجه هي نفس نتائج المثال التالي

select ename , job , city , max(sal) From emp;

ولكن تم كتابة المثال السابق لكي يتم تعريف كيفية استخدام الاستعلامات المتداخلة فيما بينها للحصول على جملة استعلام قوية ومحددة كما ويمكنك أن تقوم ببناء أكثر من جملتين استعلام متداخلتين فيما بينهما للحصول على معلومات أكثر ويجب الأخذ في الاعتبار في أن التنفيذ في هذه الحالة يتم في أقل جمل الاستعلام رتبة ثم يتم تنفيذ الأعلى في ترتيب تصاعدي

مثال

select (1)

    (Select (2)

        (Select (3))

 

بالمثال السابق سوف يتم تنفيذ رقم 3 ثم 2 ثم 1 بحيث أن نتائج 2 تعتمد على 3 ونتائج 1 تعتمد على 2

 

مثال

Select ename , sal , job From emp Where deptno =(Select deptno from emp where City=(select City From emp Where City = ‘Riyadh’));

 

المثال السابق غير عملي ولكنه يقوم ببيان المقصود من تداخل أكثر من جملة استعلام فيما بينهما

مثال

Select ename , job ,sal From emp Where Sal = (Select max(sal) from emp where job = ‘salesman’);

في المثال السابق قمنا بطلب بيانات أعلى راتب من رواتب ارلالموظفين والذي يعمل في قسم المبيعات


دالة التجميع

Group By & Having

تستخدم دالة التجميع هذه في حالات نحتاج بها إلى الحصول على معلومات مقسمة على أساس معين فمن الممكن استخدامها في الحصول على بيانات موظفين دائرة معينة كل على حدى وتستخدم في ذلك بعض الدالات الرياضية والتي نحتاجها للحصول على نتائج معينة من كل قسم مثل المتوسط الحسابي لأعمار الموظفين في كل دائرة

مثال

select deptno , Avg(age) From emp Group by deptno;

في المثال السابق قمنا بطلب متوسط حساب متوسط أعمار الموظفين الموجودين في كل دائرة على حدى

مثال

select deptno, Avg(age) from emp where city = ‘Riyadh’ Group by deptno ;

في هذا المثال قمنا باستخدام دالة التجميع مع تحديد شرط معين على نفس جملة الاستعلام فماذا لو أردنا أن نقوم بفرض شرط معين على نفس دالة المجموع

مثال

Select job , Avg(sal) from emp Group By job Having Avg(sal) > 12000;

قمنا بالمثال السابق بفرض شرط على دالة التجميع وهذا المثال يقوم بطلب المتوسط الحسابي لرواتب كل منصب من مناصب الموظفين بشرط أن يكون المتوسط أكثر أتثنى عشر ألف


 دالة الاتحاد

Union

تستخدم هذه الدالة لعمل استعلام متداخل على أكثر من جملة استعلام في نفس الوقت دون تداخل

مثال

Select ename ,sal,job,septno from emp where Sal in(Select sal from emp where ename = ‘Mohammed’ or ename = ‘Khalid’);

في المثال السابق قمنا بطلب بيانات الموظفين بحيث أن يكون راتبهم هو مثل راتب الموظف خالد والموظف محمد وهذه تعتبر أحد الدوال والتي يمكن تحديد عدد من القيم للحصول على مثلها وهي

In ( 1,2,3,4,5)

ولاستخدام جملة الاتحاد سوف نقوم بحل المثال السابق ولكن باستخدام دالة الاتحاد

مثال

Select ename ,sal,job,septno from emp where Sal in (select sal from emp where ename = ‘Mohammed’ Union select sal from emp where ename = ‘Khalid’);

وبهذا قمنا بعمل جملتي استعلام كل على حدى وقمنا بجعل الجملة الأصلية ببناء قيمتها على أحد القيم الناتجة من أحد جملتي الاستعلام الأخريين