في الجزء التالي سنحاول فهم لغة الأستعلامات الهيكلية بشكل عام كمفهوم وإستخدام , للحصول علي تفاصيل الأستخدام للأوامر والعبارات يرجي الرجوع إلي الصيغ بعد العودة ألي الفهرس أعلاه
لفهم لغة الأستعلامات الهيكلية أو ما يطلق عليه إختصارا SQL وجب التعرف علي مجموعة من المكونات والمفاهيم المرتبطة بلغة الإستعلامات الهيكلية وهذه المكونات هي :
في نظم قواعد البيانات العلائقية relational database systems (DBS) يتم استخدام كلمة جدول Table للدلالة علي البيانات , فالجدول في نظم قواعد البيانات العلائقية هو عبارة عن حيز معين له شكل معين ومكونات محددة قابله للزيادة أو النقصان تحوي في آخر الأمر بيانات .
يتكون الجدول من مجموعة من السطور ومجموعة من الأعمدة ويشكل تقاطع العمود والسطر ما يسمي بالحقل . والحقل هو الذي يحوي البيانات والسطر هو عبارة عن مجموعة من الحقول التي تصف جوانب مختلفة لشئ ما , مثل الموظف يمكن أن يحوي السطر الذي يسجل بياناته أسمه ووظيفته ومكان عمله , بينما يحوي العامود بيانات محددة عن كل الأشياء فمثلا عامود الوظيفة في جدول الموظفين يشمل بيانات كل الوظائف .
- Char
- Varchar2
- Date
- Number
لمزيد من المعلومات عن أنواع البيانات إذهب إلي أنوا البيانات
كل جدول له أسم واحد فقط ويحوي أعمدة لكل منها إسم خاص به ولا يمكن أن يوجد إسمان متشابهان لعمودين مختلفين في نفس الجدول ,
الإستعلام هو العملية التي يتم تطبيقها على البيانات بحيث تقوم بإدخال أو عرض أو تعديل أو حذف تلك البيانات , كما أن الاستعلام يمكن يستخدم لبناء وتعديل وحذف المكونات التي تحفظ وتدير البيانات
لاسترجاع بيانات فإننا نستخدم عبارة Select وهي عبارة تتكون من مجموعة من الكلمات كما هو موضح في الجزء التالي , الكلمة أو الكلمات المذكورة بين القوسين [ ] هي كلمات إختيارية
select [distinct] < column(s) >
from < table >
[ where ]
[ order by ]
الأعمدة المحددة Selecting Columns
الأعمدة المراد استعراضها يتم ذكرها بعد كلمة Select وهي تسمي projection , فمثلا عبارة Select name,dept from emp تكون الأعمدة المراد أظهارها هي عامود name وعامود dept
يمكن عند تنفيذ عبارة select أستعراض كل الأعمدة دون ذكر أسماء كل الأعمدة بإستخدام * , فمثلا لاستعراض كل أعمدة جدول emp يمكن كتابة الأمر Select * from emp
يمكن أن تحوي الأعمدة ناتج عمليات حسابية , فمثلا يمكن احتساب الراتب السنوي للموظفين بكتابة العبارة التالية , Select salary*12 from emp
الجدول Table
يمكن أن يكون الجدول مكون فعلي مثل أن يكون جدول أو view أو synonym , كما يمكن أن يكون ناتج عبارة select كما في المثال التالي :
Select name,dept from ( Select id,name,dept from emp) ;
يجب ان تكون الأعمدة المحددة في المستوي الأعلي , وهي في حالتنا name,dept موجودة في الحزء الثاني من الأستعلام , والجزء الثاني من الأستعلام يسمي الأستعلام الجزئي (Sub Query)
الشرط Condition
يمكن تحديد شرط متعلق بالبيانات المراد إسترجاعها أو شروط عامة لا علاقة لها بالبيانات , فمثلا يمكن أن تحدد استرجاع بيانات الموظف الذي يحمل الرقم 23 كما بالمثال التالي :
Select name from emp where id = 23;
كما يمكن كتابة جملة بحيث رواتب الموظفين فقط في حالة الأستعلام شريطة أن يتم الأستعلام في بداية الشهر كما بالمثال التالي
Select name,salary from emp where to_char(sysdate,'dd')='01';
الترتيب Order
يمكن عرض البيانات بناء علي القيم الموجودة في الأعمدة فمثلا يمكن ترتيب الموظفين حسب الأسماء كما بالمثال التالي
Select name from emp order by name;
تصاعديا وتنازليا
يمكن أن نلحق بعبارة order by كلمة asc للدلالة علي ترتيب البيانات تصاعديا , أي بداً بالقيم الأصغر فالأكبر , أو تنازليا بإستخدام كلمة desc . كما بالمثال التالي
Select name,salary from emp order by salary desc;
ستقوم هذه العبارة بعرض بيانات الموظفين مرتبه حسب الراتب تنازليا
في هذا الجزء سنتعرف علي المزيد من أدوات الأستعلام وهي
- Group By
- Having
- Sample
- Unique and Distinct
- start with and connect by
Group By
تستعمل عبارة group by في تجميع البيانات , فمثلا أن كان لديك جدول لموظفين من جنسيات مختلفة وترغب في معرفة عدد الموظفين من كل جنسية , فإنه يمكنك كتابة الأستعلام بالشكل التالي
Select Nationality,Count(id) from emp group by Nationality;
في المثال السابق نفرض أن لديك جدول للموظفين يحوي رقم الموظف (id) و جنسية الموظف (Nationality) ويشترط ليكون الاستعلام دقيق أن يتم يكون لكل موظف رقم
Having
تستخدم عبارة Having للقيام بعملية فلتره لناتج عبارة Group By , كما هو موضح بالرسم التالي
مخطط توضيحي لعمل عبارة Having
في المثال التالي بتجميع الموظفين للحصول علي عدد الموظفين من كل جنسية ومن ثم نعرض فقط الجنسيات التي تحوي أكثر من 10 موظفين , بمعني أننا نريد معرفة الجنسيات التي بها موظفون أكثر من 10
Select Nationality,Count(id) from emp group by Nationality having Count(id)>10;
Sample
تستخدم عبارة Sample لأخذ عينة من البيانات , فمثلا يمكن أخذ 10% من البيانات بواسطة العبارة التالية :
Select name,salary from emp sample(10);
Unique and Distinct
عند أستخدام كلمة Unique أو Distinct فإننا نحصل علي البيانات المفردة , فمثلا يمكنك بإستخدام أي من الكلمتين معرفة الجنسيات المتوفرة لديك بالجدول كما بالمثال التالي
Select distinct nationality from emp;
start with and connect by
تستخدم عبارتي start with و connect by للبحث لمعالجة بيانات ذات طبيعة هرمية كما بالشكل التالي الذي يوضح جانب من جدول الموظفين
رسم توضيحي لبيانات ذات طبيعة هرمية
للعرض البيانات الموضحة بالشكل أعلاه بشكل يوضح هرمية توزيع الموظفين بداً من المدير أعلي القائمة يمكننا كتابة الأستعلام التالي :
select name from emp start with id=55 connect by prior id=manager;
لعرض النتيجة السابقة بشكل يمكن فهمه بسهولة يمكنك أضافة عدد من الفراغات مساويه لمستوي كل موظف كما بالمثال التالي : select lpad(' ',2*(level-1)) || name from emp start with id=55 connect by prior id=manager;