الأحد، 8 سبتمبر 2013

المحاضره الاولى من Introduction to PL/SQL

 بسم الله الرحمن الرحيم

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

توفر وحدة ال PL/SQL الاتى :-
  • المتغيرات ,ثوابت,وانواع البيانات
  • هياكل المراقبه مثل الشرطية والحلقات
  • يمكن كتابتها مره وتنفيذها مرات عديدة
فوائد PL/SQL
  • دمج الوحدات البرمجيه مع SQL
  • تحسين الاداء
  • التكامل مع ادوات اوراكل
  • معالجة الاخطاء
مكونات الوحده البرمجيه PL/SQL
Declare(اختتيارى)

المتغيرات,المؤشرات,رسائل الخطا المصممة بواسطة المستخدم

Begin(اجبارى)

تعليمات SQL
تعليمات PL/SQL

Exception(اختيارى)

الاجرا المتخذ عند حدوث الخطأ

End;(اجبارى)
 انوع الوحدات البرمجية Block
لعمل Anonymous Block

 
فى الجزء Declare وضعنا متغير باسم v_fname ليحمل اسم الشخص المستعلم عنه ونوعه varchar2 و حجمه 20 حرف 
وداخل الجزء التنفيذة مابين Begin و End  تم وضع كود ال  SQL و PL/SQL  وهو عباره عن تعليمة Select  يليها اسم العمود ثم التعليمه INTO وهى تقوم بوضع قيمة العمود First_Name داخل المتغير v_Fname ثم From ويليها اسم الجدول وWhere ثم شرط الاستعلام
والان قمنا بتنفيذ الاستعلام ووضع خرج الاستعلام داخل متغير ولكن كيف سيظهر لنا القيمة التى يحملها المتغير v_Fname ؟
لعرض قيمة المتغير v_fname نستخدم وحده برمجيه Procedure اسمها Put_Line()داخل Package اسمها       dbms_output معرفين مسبقا من قبل اوراكل

الخميس، 5 سبتمبر 2013

المحاضره الاولى Retrieving Data Using the SQL SELECT Statement



بسم الله الرحمن الرحيم

محاضرة اليوم بعنوان

 Retrieving Data Using  the SQL SELECT Statement

استرجاع البيانات باستخدام تعليمة Select
وهى تعليمة من تعليمات لغة الاستعلام الهيكليه SQL او Structured Query Language
وهى لغة قياسية تستخدم للتعامل مع قواعد البيانات وهى موحده

وتعليمة Select  تتعامل مع البيانات تتعامل مع البيانات بثلاث طرق

الطريقه الاولى وهى Projection




حيث يتم استرجاع اعمده محدده لكل السجلات الموجوده فى جدول معين

الطريقة الثانية وهى Selection


حيث يتم استرجاع سجلات محدده من الجدول نتيجة لوضع شروط محدده للبيانات المستعلم عنها

الطريقة الثالثة وهى Join


حيث يتم ربط جدولين معا بواسطه شرط ربط متوفر فى الجدولين


طريقة استخدام التعليمه Select

تستخدم بالشكل التالى
 

 حيث يتم كتابة التعليمة Select  ثم يليها * فى حالة الرغبه فى استعادة كل الاعمده الموجوده بالجدول ثم نكتب From ثم اسم الجدول
او يمكن كتابة التعليمه Select  ثم يليها اسم الاعمده المراد استرجاعها من قاعدة البيانات وقد يكونعمود واحد او اكثر ويتم استرجاع الاعمدة بنفس الترتيب ويمكن وضع اسم مستعار لاى عمود من خلال Alias او منع تكرار السجلات من خلال Distinct ثم نكتب From ثم اسم الجدول
حيث ان Select تحدد الاعمده المطلوب من الجدول
و From تحدد الجدول المطلوب استرجاع البيانات منه

مثال :-

لاسترجاع كل الاعمده من جدول Departments

Select * From Departments

او يمكن كتابة نفس الاستعلام ولكن بالشكل التالى

Select Department_id,Department_Name,Manger_Id,Location_Id from Departments



استرجاع اعمدة محدده من الجدول
Select Location_Id,Department_id from Employees

كتابة تعليمات SQL

  •     غير حساسة لحالة الحروف (كبيره او صغيره)
  •     يمكن كتابتها فى صف واحد او عدة صفوف
  •     لايمكن كتابة التعليمه نفسها على اكثر من صف مثل
    

  •     كل تعليمة توضع فى سطر مستقل عادة مثل

  •    وتستخدم المسافات لتحسين امكانية القراءة
  •     يتم انهاء الاستعلام فى الSql Plus ب( ; ) ام فى Sql Developer  فهى اختياريه ولكن فى حالة وجود اكثر من استعلام لابد من وضعها

الوضع الافتراضى لاسماء الاعمده فى الSql Developer
  •     تكون المحاذاه جهة اليسار
  •     تكون باحرف كبيره
الوضع الافتراضى لاسماء الاعمده فى Sql Plus
  •     محاذاة اسماء الاعمدة التاريخ والحروف تكون لليسار
  •     الارقام تكون محاذاة الاعمده فيها لليمين
  •     اسماء الاعمده تكون بحروف كبيره

 تستطيع ترتيب الاعمدة من خلال تعليمة Select

Select Last_Name,Hire_Date,Salary from employees

التعامل مع العمليات الحسابيه والقيمه الغير معرفه Null فى التعليمة Select

Arithmetic Expressions
تستطيع اجراء العمليات الحسابيه على البيانات المستعلم عنها من الضرب والطرح والجمع والقسمة وتستطيع وضع هذه العمليات فى مكان داخل تعليمة Select الا فى الجزء From والاعمده التى تحتوى على تاريخ يمكنك اجراء عمليات الجمع والطرح عليها فقط

على سبيل المثال نريد اضافة مكافأه لكل الموظفين العاملين بالشركة قدرها 300 دولار كيف نقوم بذلك؟

Select Last_Name,Salary,Salary+300 from employees
نجد انه تم جمع قيمة حقل الراتب Salary الى قيمة المكافأه ال 300 دولار 
مع العلم ان العمليه الحسابيه تم تنفيذها على البيانات المعروضه فقط وليست المخزنه حيث ان وظيفة Select استرجاع وعرض البيانات المخزنه وليس التعديل فيها 

الاولويه فى تنفيذ العمليات الحسابيه 
Select Last_Name,Salary,12*Salary+100 from employees



نجد ان الاوراكل قامت بعملية الضرب اولا ثم عمليه الجمع اى انه تم ضرب 24000*12 ثم تم جمع 100 على الناتج لتصبح 288100
وذلك لان عملية الضرب لها الاولوية فى التنفيذ قبل عملية الجمع

وعند تنفيذ نفس الاستعلام باستخدام الاقواس كذلك
Select Last_Name,Salary,12*(Salary+100) from employees
 نجد ان عملية الجمع قبل عملية الضرب لان الاولويه فى التنفيذ لما داخل الاقواس اى انه تم جمع 24000+100 ثم ثم ضرب ناتج عملية الجمع فى 12

ومن هنا نستنتج اولويات العمليات الحسابيه فى اوراكل 

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

القيم الغير معروفه Null Value
هى قيمه لا تساوى صفر ولا تساوى مساحه فارغه Blank Space لان الصفر هوا رقم وال Blank Space  هى حرف
ولكن هى قيمه غير معروفه او غير معينه او غير متوفره


وللتعرف على ال Null value  جيداً نستطيع ان نستعلم عن عمود ال Commission_Pct من جول الموظفين Employees
لاننا سنجد بعض الموظفين لهم عمولة والباقى ليس له عموله فبالتالى قيمة حقل العموله للموظف الذى ليس له عموله ستكون Null بينما الموظف الذى يأخذ عمولة ستكون قيمة الحقل الخاص به تساوى نسبة عمولته
Select Last_Name,Job_Id,Salary,Commission_Pct from employees
ال Null Value فى العمليات الحسابيه 
ال Null  فى العمليات الحسابيه تسبب مشكله كبيره جداً لانها تجعل ناتج العمليه الحسابيه ب Null مباشرة اى كان نوع العمليه الحسابيه

فمثلا اذا اردنا ايجاد الراتب السنوى للموظفين بالعموله 
Select Last_Name,12*Salary*Commission_pct from employees


سنجد ان بعض الموظفين راتبهم السنوى يساوى Null  وذلك غير صحيح ولكن لان حقل العمول لدى هؤلاء الموظفين يساوى Null  فان ناتج العمليه ايضا سيكون Null
الاسم المستعار للاعمده Column Aliases
يمكنك وضع اسم مستعار لاى عمود تقوم باسترجاعه من قاعده البيانات وذلك مفيد جداً لان عادة ماتكون اسماء الاعمده مختصره ومفيد ايضا فى اسماء الاعمده التى تقوم ببعض العمليات الحسابية عليها 
ويتم وضع Alias او اسم مستعار للعمود اما بكتابته بعد اسم العمود مباشرة وحينها سيظهر بحروف كبيره او بوضع ال Alias  بين علامتى تنصيص مزدوجه "" او بكتابة اسم العمود ثم يليه As  ثم الاسم المستعار مع ملاحظه انه فى حالة وضع الاسم المستعار بين علامتى تنصيص سيظهر اسم العمود بنفس احالة الاحرف المكتوبه بها 
وعلامتى التنصيص مطلوبه فى حالة كان الاسم يحتوى على مسافه او اى من الحروف الخاص او كان حساس لحالة الاحرف
مثال
Select Last_Name name,Commission_Pct Comm from employees
 Select Last_Name "Name",salary*12 "Annual Salary" from employees
معامل الربط او اللصق Concatenation || 
وهى عملية تقوم بلصق او ربط محتويات حقلين معا باستخدام الحروف الخاصه ||
فمثلا اذا اردت عمل تقرير يكون عباره عن اسم الموظف ووظيفته ففى هذه الحاله نستخدم || للصق او ربط الحقلين معاً
Select Last_Name||Job_id As "Employees" from employees
تستطيع ايضا استخدامها فى لصق جزء نصى الى الحقول 
Select last_name||' is a '|| job_id as"Employees Details" from employees 
ويلاحظ فى الاستعلام السابق اننا استخدمنا علامات تنصيص فرديه وذلك لان اى نص يوضع بين علامتى تنصيص فرديه
لكن ماذا لو اردنا وضع محتوى نصى يحتوى على بعض الحروف الخاصه مثل it department's manager id :103
حينها نضع النص داخل q'[ ] ' بالشكل التالى
Select Department_name || 'Department' ||q'['s Manager ID :'] || as "Department and Manger" from departments
  ويمكن استخدام < > او { } او (  ) بدلا من [ ]

منع ظهور الحقول المكرر فى نفس السجلات Distinct
تستخدم هذه التعليمه لمنع تكرار السجلات التى تحمل نفس القيم 
مثلا 
Select Department_id from Employees 
نجد ان اكواد الاقسام الموجوده بجدول الموظفين مكرره وهذا منطقى لان القسم الواحد به اكثر من موظف
ولمنع ذلك يتم كتابة التعليمه Distinct بعد تعليمة Select وهذا يجعل الاوراكل يمنع تكرار السجلات 
وتكتب بالشكل التالى
Select Distinct Department_id from employees
select Distinct Department_id,job_id from employees

فى الاستعلام السابق نجد ان كود القسم مكرر مع استخدام التعليمه Distinct  وذلك لان التعليمه تمنع تكرار السجلات وليس الحقول فنجد ان السجل نعم متشابه فى كود القسم ولكنه مختلف فى كود الوظيفه وبتالى لا يعتبر مكرر


تعليمة وصف الجدول Describe
وتستخدم لمعرفة اسماء وانواع الاعمده التى يحتويها الجدول ويمكن اختصار ب desc
desc employees 
او 
describe employees