المدير
Admin
العمر : 37
تاريخ التسجيل : 11/10/2008
عدد الرسائل : 1089
الموقع : منتديات الاحصائيون العرب
|
موضوع: شرح مبسط للأوراكل- الاستعلام بـ (لغة SQL) الجزء الثاني الأحد 12 أكتوبر - 14:11 |
|
|
تحدثنا في الموضوع السابق عن : نقاط معينه تخص لغة الـ sql منها...
الاستعلام وقواعد البينات استخدامات الـSQL اساسيات جملة الـSQL تغير اسماء الاعمدة في جملة الـSQL استخدامات التعابير الرياضه في جملة الـ SQL اولويه استخدام العمليات الحسابيه داخل جملة الـSQL استخدام معامل الضم في جملة الـ SQL استخدام حروف نصية مع معامل الضم عرض صفوف محددة بأستخدام امر الـWhere معاملات مقارنة اخرى مع امر Where استخدام اكثر من شرط في وقت واحد.
ا للرجوع له .. 7 7
اضغط هنا
وسنتحدث الان عن : (( الدوال- SQL Functions)) بشكل عام ..
ولكن قبل البدء في الدوال دعونا نتحدث بشكل سريع عن الترتيب في هذه اللغه ...
الترتيب: كما هو معروف اما تصاعدياً او تنازلياً في عمليه الترتيب نستخدم الامر((order by)) نكتب هذا الامر بعد اسم العمود وهنا يعطينا ترتيباً تصاعدياً( اي يفرز البيانات تصاعدياً) اما في حالة الفرز التنازلي يضاف امر يسمى الـ (DESC) بعد الامر (order by) ( كما يمكننا في حالة الفرز التصاعدي اضافه الامر (ASC) بعد الامر (order by)
وللتوضيح لنأخذ الامثله التالية :
مثال -1- ( للترتيب التنازلي ) اكتب بلغة الـ SQL استعلام لعرض اسم الموظف والراتب مرتبة البيانات تنازليا حسب الراتب؟
الحل : select ename,sal from emp order by sal DESC;l
توضيح الحل : emp-----> كما اوضحنا سابقاً اسم العمود ( عمود الموظفين ) ename-----> اسماء الموظفين sal---------> الراتب order by sal DESC;l----> نوع الترتيب ( وتخصيصه- الراتب ) اذن.... طلبنا الاستعلام عن اسماء الموظفين + رواتبهم من جدول الموظفين مرتبه ترتيباً تنازلياً حسب الراتب ;
مثال -2- ( للترتيب التصاعدي ) اكتب استعلام بلغة الـ SQL لعرض اسم الموظف والراتب مرتبة البيانات تصاعديا حسب الراتب؟
الحل :
select ename,sal from emp order by sal;l
توضيح الحل : emp-----> كما اوضحنا سابقاً اسم العمود ( عمود الموظفين ) ename-----> اسماء الموظفين sal---------> الراتب order by sal ;l----> نوع الترتيب ( وتخصيصه- الراتب ) اذن.... طلبنا الاستعلام عن اسماء الموظفين + رواتبهم من جدول الموظفين مرتبه ترتيباًتصاعدياً حسب الراتب;
اضاف الاخ Hish@m مشكور لامر الـGroup وشرحه كان كالتالي :
اقتباس:
كاتب النص الاصلي : Hish@m الامر group :
فائدته :
في حال اراد مستخدم قواعد البيانات ان يستعلم عن الاقسام مثلا في المؤسسة و من فيها من موظفين
يمعنى انه يريد ان يرى من في الاقسام كلها من موظفين مرتبة حسب القسم
يستخدم الامر group
مثال :
استعلم لي عن رقم مشروع و اسم المشروع و عدد من يعمل في هذه المشاريع مرتبة حسب رقم و اسم المشروع ؟
الحل :
SELECT PNUMBER,PNAME,COUNT FROM PROJECT,WORKS_ON WHERE PNUMBER = PNO GROUP BY PNUMBER,PNAME;l
حيث ان: PNUMBER هو رقم المشروع في الجدول PROJECT و PNAME هو اسم المشروع في نفس الجدول و PROJECT و WORKS_ON هي جداول في قاعدة البيانات
هنا في المثال
النتائج من هذا الاستعلام ستكون كالتالي
رقم المشروع اسم المشروع عدد الموظفين فيه
و مشكوورة على وقتك
هشام
واضاف لنا الامر :HAVING وشرحه كان كالتالي :
اقتباس:
كاتب النص الاصلي : HiSh@m
الامر HAVING
وظيفته :
ياتي غالبا او دائما مع GROUP و هو لكي ناخذ من القروب جزء معين
مثلا : نريد ان نستعل عن الاقسام اللي عدد موظفيها فوق 20 موظف مرتبة في مجموعات ..
نستخدم HAVING
مثال لكل مشروع يعمل به اكثر من 5 موظفين , اعرض لي رقم المشروع و اسمه و عدد موظفينه الذين يعملون فيه
الحل :
SELECT pnumber,pname,count(*)l FROM project,works_on WHERE pnumber=pno GROUP BY pnumber,pname HAVING count(*) > 5 ;l
هنا نفس السابق حيث انه في السؤال طلب الاستعلام عن رقم المشروع و اسمه و عدد الموظفين ووضعناها في الجملة SELECT و اختارنها من الجداول اللتي هي موجودة فيها project,works_on و ربطنا الجدولين بالامر pnumber=pno و وضعنها في مجموعات باستخدما الامر GROUP BY و استبعدنا اي مشروع عدد موظفينه اقل من 5 باستخدم الامر
اخ هشام ..تشكر على اهتمامك .. ومشاركتك الي بالفعل اثلجة صدري .. اما بالنسبه للامر ((order by )) فأنا شرحته في نسختي الثانيه.. ولا انكر ان شرحك كان رائع فيه لكن حبيت ان الموضوع يكون متكامل بدون تكرار .. تحياتي لك ،،،
والان لندخل بالدوال ((FUNCTIONS))
بصورة عامه الدالة هي : هي داله لها اسم وتقوم بوظيفة معينة على البيانات الموجودة ثم تعود لنا بالنتيجة. ملاحظة ... الداله تاخذ وسيط او اكثر ولكن النتيجة تكون قيمه واحدة فقط!
الدوال العددية .. لناخذ اهمها وهي : 1-Round-------> وظيفتها تقريب الاعداد الكسريه الى اي قيمه عشرية تحدد للدالة 2-Trunc-------> وظيفتها قطع اي جزء عشري من الاعداد الكسرية بدون تقريب . 3- Mod--------> وظيفتها ايجاد باقي قسمة الاعداد الصحيحة.
امثلة عليها :
للداله (Round) : Round(46.977.1)l
الناتج يكون : 46.98
للداله ( Trunc) Trunc(46.977.1)l
الناتج يكون : 46.97
الداله (Mod) Mod(1600.300)l
الناتج يكون : 1000
مثال اخر للتوضيح بشكل سريع : اكتب استعلام لعرض اسماء ورواتب وعمولة الموظفين وباقي قسمة الرواتب والعمولات للموظفين الذين وظيفتهم 'salesman'؟
الحل :
select ename,sal,comm,mod(sal,com)l from emp where job= 'salesman';l
توضيح الحل : 1- اسماء الموظفين ونرمز لهم بالرمز ------->ename 2- رواتب الموظفين ونرمز له بالرمز --------> sal 3- عموله الموظفين ونرمز لها بالرمز -------> comm 4- باقي قسمة الرواتب والعمولات -----------> mod(sal,com)l 5- من جدول الموظفين ونرمز له بالرمز -----> emp 6- بشرط ! وهو ان نوجد باقي قسمة الرواتب والعمولات للمظفين الذين وظيفتهم 'salesman'; فقط !
|
|