استعلامات الاختيار( التحديد )  Select Queries

الجزء الأول

إعداد : محمد طاهر

 

الجزء الأول - محتوبات الموضوع :

الجزء الثاني :  من هنا

 

الي الأعلي

 

إنشاء استعلامات الاختيار( التحديد ) من وضع التصميم  Creating Select Queries From Design View

 

بالعودة الي الشاشة الرئيسية للاكسس و اختيار خيار الاستعلامات Queries  من مربع حوار قاعدة بيانات الاكسس سنجد امامنا خياران

الثاني  هو استعمال المعالح لانشاء استعلام ، و الأول  هو انشاء استعلام من وضع التصميم ، و هو الذي سنبدأ به

 

 

 

و سنختار الحيار الاول : وضع التصميم ، فتظهر لنا شاشة بها الجداول الموجودة فى قاعدة البيانات

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

 

 

 

 

فنختر الجدول الذي نريد و ذلك بالنقر المزدوج عليه أو باختياره ثم ضغط زر add

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

 

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

 

 و لنبدأ بالبداية السهلة ، و نختار جدول واحد فقط ، و ليكن جدول Products

 

ثم نضغط علي زر close

 

فنجد نفسنا فى وضع التصميم ، كما فى الشكل التالي :

 

 

 

و هنا نجد الجدول الذي اخترناه يظهر فى الجزء العلوي من الشاشة و لاختيار حل من الحقول اما ننقر عليه نقرا مزدوجا أو نسحبه الي الجزء السفلي بالفأرة

 

و اختيار الحقل همت يكون لاحد الاسباب الاتية ، أو لأكثر من سبب منها :

·        عرض الحقل ضمن الاستعلام : وهذا يتم تحديده بمربع الخيار امام الخانة Show  و القيمة الافتراضية عند اختيار حقل هي اظهاره ، و ان لم نرد عرضه ، و أردنا فقط استخدامه لاحد الاسباب التالية ، فلنزيل الاختيار

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

·        وضع معيار علي الحقل :  و ذلك من خانة Criteria   ، و من الامثلة البسيطة للمعايير ، أن نكتب فى حقل رقمي مثلا :

o       =5

o       >8

 أو في حقل نص

·        Is null  - لتعريف القيم الخالية

·        Like “m*” لتعريف القيم التي تبدأ بحرف m

 

و آخر خانة فى الحزء السفلي ، هي or  و تستخدم كجزء اضافي للمعيار لاضافة أكثر من شرط

 

 و لنبدأ فى تطبيق المثال علي الجدول المرفق فى المثال و المسمي Products

 

 أولا لنختار انشاء استعلام من وضع التصميم

ثم لنختار الجدول

ثم لنحدد اظهار الحقلين

ProductID , Product Name

 

ثم نحفظ الاستعلام بالاسم الافتراضي Query1

 

الي الأعلي

 

وضع عرض البيانات Datasheet View

 

 

و الان لننتقل من وضع التصميم الي وضع العرض datasheet view  و ذلك من الايوقنة المظللة بالرسم التالي  أو من قائمة View  نختار Datasheet view

 

 

 

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

و عددها فى المثال 77 حقل ، كما يظهر فى أسفل الرسم

 

 

 

و هنا تم تنفيذ الاستعلام من الواجهة الرسومية ، و لكن هذا ليس هو الاساس ، فالاساس لكي نستطيع التفاعل لاحقا مع الاستعلامات باحتراف هو جملة الSQL  التي أدت الي هذا الفعل

و من الان فصاعدا ، بعد تنفيذ أي فعل من الواجهة الرسومية سنتجه الي عرض ال  sql  لنري الجملة المناظرة

 

و للانتقال الي عرض ال  sql

 اما من قائمة  View  نختار  SQL view

أو من الايقون الموضح بالرسم

 

 

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

 

الا و هي

 

SELECT Products.ProductID, Products.ProductName

FROM Products;

 

و تبدأ بأضهر تعبيرات ال SQL و هي select   

و صيغة التعامل معها تكون

Select x ,y,z From Tablename;

 

حيث x,y,z أسماء الحقول

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

 

و تنتهي جدلة الاس كيو ال بفاصلة منقوطة

 

و لكن هنا يمكن حذف اسم الجدول و النقطة ، حيث لا يوجد تكرار

و سيؤدي ذلك الي نفس النتيجة

 

لتصبج جملة ال سي كيو ال كالتالي

 

SELECT ProductID,ProductName

FROM Products;

 و لكن بعد حفظ الاستعلام المعدل سيعيد الاكسس كابة اسم الجدول و النقطة

 

و الآن لنضيف حقل ثالث ، و لكن ليس من خلال تصميم الاستعلام و لكن من خلال جملة السي كيو ال

 

لنختار إنشاء استعلام جديد من وضع التصميم ، و لكن هذه المرة لا نختار الجدول و انما نغلق شاشة الاختيار دوت اختيار

ثم نذهب الي وضع ال سي كيو ال ، فنجد الجملة التالية

Select;

 

 فلنعدلها الي

 

Select Productname, Unitprice From Products;

 

 

و نحفظ الاستعلام باسم Query2

 

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

 

و هكذا نكون نفذنا أولي الخطوات و هي العرض ، و الجملة المناظرة هي

 

Select x ,y,z From Tablename;

 

الي الأعلي

ترتيب السجلات Sorting Records

 

 و الان لنفتح الاستعلام الأخير Query2 فى وضع التصميم ، ثم لنختار الترتيب التنازلي بحقل السعر

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

ثم لنفتحه فى وضع ال SQL  لنشاهد الجملة

 

و هي :

 

SELECT Products.ProductName, Products.UnitPrice

FROM Products

ORDER BY Products.UnitPrice DESC;

 

 

و اذا جعلنا الترتيب تصاعدي

 

SELECT Products.ProductName, Products.UnitPrice

FROM Products

ORDER BY Products.UnitPrice;

 

و نفهم من ذلك أن التعبير الثاني فى جمل ال  سي كيو ال ، و الذي نستخدمه للترتيب هو Order By

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

 

و القيمة الافتراضية للترتيب هي التصاعدي ، و اذا أردنا الترتيب التنازلي فلنضيف كلمة Desc بعد اسم الحقل

 

و الآن ماذا لو أردنا الترتيب بأكثر من حقل و جعل ترتيب أحدها تصاعدي و الآخر تنازلي

 

لنعرف ذلك لنضيف ترتيب تنازلي بالاسم فى وضع التصميم الي الترتيب التصاعدي السابق بالقيمة

فتصبح الجملة :

 

 

SELECT Products.ProductName, Products.UnitPrice

FROM Products

ORDER BY Products.ProductName DESC , Products.UnitPrice;

 

أي أن الفاصلة كالعادة هلي الفاصل بين أكثر من وحدة

 

 

 

و بذلك نطزن نعرفنا علي كيفية إنشاء الاستعلام الذي يعرض  و يرتب ، و عرفنا كيفية كتابة جملة ال  sql المناظرة

 

الي الأعلي

 

وضع الشروط Conditions

 

و الآن لنضع أول الشروط

لنفتح الاستعلام الاخير

و نحفظه باسم Query3

 

ثم لنفتحه فى وضه التصميم ، و نضع فى خانة المعيار لحقل ال UnitPrice التعبير التالي

>100

ثم نحفظ الاستعلام

 

و الآن لنفتح الاستعلام فى وضع العرض

نجد أن السجلات المعروضة هي فقط تلك التي تحقق شرط أن القيمة أكبر من 100

 

و عددها اثنان ، بدلا من 77

 

و بعد ذلك لنفتح وضع السي كيو ال ، لنتعرف علي كيفية كتابة الشرط

سنجد الجملة كالتالي :

 

SELECT Products.ProductName, Products.UnitPrice

FROM Products

WHERE (((Products.UnitPrice)>100))

ORDER BY Products.ProductName DESC , Products.UnitPrice;

 

 

 

اول مت نلاحظه أن جملة الشرط كتبت قبل جملة الترتيب

و أن جملة الشرط هي عبارة عن كلمة Where  و يليها الشرط الذي كتبناه

 

و الأن لنحفظ الاستعلام

ثم ننشيء استعلام جديد خالي مثلما سبق

 

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

 

SELECT Products.ProductName, Products.UnitPrice

FROM Products

WHERE (((Products.ProductName) Like "m*”))

ORDER BY Products.ProductName DESC , Products.UnitPrice;

 

 و لنحفظه باسم Query4

 

الي الأعلي

 

 

القيم المستنتجة  و اجراء الحسابات

 

فى المثال القادم سنقوم بالحصول علي السعر مضافا اليه 25% ، و اطلاق اسم حديد عليه و عرض السجلات علي هذا الاساس

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

" mm": [UnitPrice]*1.25

و معناه اظهار حقل جديد غير موجود فى الجدول اسمه mm و القيمة التي تظهر فيه هي عبارة عن السعر مضافا اليه 25%

 

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

 

 

او نكتب الاسم ، ثم نختار معالج النساعدة المظلل باللون الاصفر اعلي الشاشة ( المعالج السحري ) للمساعدة فى بناء الجملة أو التعبير المطلوب

 

ثم كالعادة لنذهب الي وضع ال SQL لنري كيف تم تسجيل ذلك :

 

SELECT Products.ProductName, Products.UnitPrice, [UnitPrice]*1.25 AS [“mm”]

FROM Products

ORDER BY Products.ProductName DESC;

 

 و الجديد هنا هو تعبير AS الذي استخدم لتعريف الاسم الجديد

و يمكن استخدامه لقيمة مستنتجة أو لمحرد تغيير الاسم

 

و لنحفظ الاستعلام باسم  Query5

 

الي الأعلي

 

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

 

لنحفظ نسخة أخري باسم Query6 لنضيف عليها حقل مستنتج آخر اسمه nn   لكي يحتفظ بأول حرف من اسم المنتج عن طريق استخدام احدي دوال الاكسس الجاهزة وهي الدالة Left

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

 

لنفتح الاستعلام الجديد فى وضع التصميم ثم نضيف فى النهاية كلمة nn ثم : ثم نضغط علي المعالج السحري

و نختار الدوال

Functions

Built-in Functions

Text

و نختار الدالة

Left

 و ننقر عليها مرتين

فنجد التعبير التالي قد كتب

 

nn: «Expr» Left («stringexpr»; «n» )

 

 و المطلوب فقط هو اضافة التعبيرات المطلوبة  مكان الكلمات التي هي محاطة ب « »

 

nn: = Left ( [Products]![ProductName]  ; 1(

 

أي استبدلنا اول « »  ب =

و الاخيرة ب 1  : أي حرف واحد فقط من الشمال

و الوسطي نعلم  عليها ثم نختار من الجزء الاسفل

Tables

Products

 و نختار حقل Product name

 ننقر عليه مرتين لكي يدرج فى التعبير

 

و بذلك يصبح الحقل الجديد nn  عبارة عن اول حرف من اسم المنتج

 

 و طبعا يمكن لمن لديه بعض الخبرة مع الدوال ، كتابة التعبير مباشرة دون استخدام المعالج

nn: = Left ( [Products]![ProductName]  ; 1(

 

الي الأعلي

 

 

 تجميع أو تلخيص  البيانات Grouping Records

 

و الآن الي تجميع البيانات – أو بمعني آخر تلخيصها

 

لنفتح الاستعلام الأخير Query6

 و لنحفظه باسم Query7

 أو لنستخدم النسخ و اللصق مباشرة من اطار قاعدة البيانات ، لانشاء نسخة أخري باسم Query7

 

ثم لنفتحه فى وضع التصميم ، و لنضغط علي علامة التجميع ( أو سيجما )  المظللة فى الصورة القادمة

و بذلك يتحول الاستعلام من استعلام  عادي الي استعلام نجميع

و تظهر خانة اضافية فى الجزء السفلي ، و هي Totals

 

 

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

لنحذف ProductName من الحقول المخترة

و نختار قيم الحقول الاخري فى خانة Totals  كما فى الصورة :

Nn:  للتجميع به

و الحقلان الآخران نحصل منهما علي المجموع

 

أي أننا هنا نحصل علي مجموع الفئات و مجموع الفئات بعد اضافة 25% لكل المنتجات التي تبدأ بحرف معين

 

و كالعادة سنذهب الي وضع السي كيو ال

فنجد الآتي :

 

SELECT Sum(Products.UnitPrice) AS SumOfUnitPrice, Sum([UnitPrice]*1.25) AS [" mm"], Left([Products]![ProductName],1) AS nn

FROM Products

GROUP BY Left([Products]![ProductName],1);

 

و طبعا الزائر الجديد لنا هو Group By أي الحقل الذي نقوم بالتجميع به

 

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

و طبعا كان من الممكن عمل ذلك علي خطوتين ، الاستنتاج فى استعلام ، ثم عمل التجميع فى استعلام جديد مينب علي الاستعلام الأول .

 

 

 

و يبقي لنا التعرف علي ترتيب ال Group BY   فى حالة وجود شرط أو ترتيب

لذلك سنحفظ نسخة أخري من Query7  باسم  Query8 لنضيف اليها شرط و ترتيب

 

ليصبح الاستعلام الشامل كالتالي :

 

SELECT Sum(Products.UnitPrice) AS SumOfUnitPrice, Sum([UnitPrice]*1.25) AS [" mm"], Left([Products]![ProductName],1) AS nn

FROM Products

GROUP BY Left([Products]![ProductName],1)

HAVING (((Sum([UnitPrice]*1.25))>50))

ORDER BY Left([Products]![ProductName],1);

 

و نلاحظ أنه في حالة التجميع تحول تعبير الشرط من Where  الي  Having

 

و أن الترتيب بعد الاختيار هو

·        Group

·        Having

·        Order By

 

 و بدون التجميع

·        Where

·        Order By

 

 

و أن Select  دائما فى المقدمة

 

 

 

و هكذا نكون تعرفنا علي  كلمات السي كيو ال التي تستخدم فى استعلام الاختيار ، و أيضا علي كيفية التعامل مع استعلامات الاختيار من خلال الواجهة الرسومية للاكسس  و من خلال كتابة و تعديل جمل ال سي كيو ال.

 

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

و كل ما تم تخزينه فى قاعدة البيانت هي الثمانية  جمل اس كيو ال السابقة ، و التي تمثل الثمانية   استعلامات

 

أي أنه لم يتم تكرار الجدول ، و انما تم تخزين هذه الجمل فقط ليتم إسترجاع البيانات بناء عليها من الجدول الأصلي

 

الي الأعلي

 

الجزء الثاني :  من هنا

 

----