بسم الله
الرحمن الرحيم
محاضرة
اليوم بعنوان
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