استعلامات الإلحاق

    Append Queries

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

 

 

 

استعلام الالحاق Append Queries

لاضافة سجلات من جدول أو أكثر الي جدول أو أكثر

 

 

 

استعلام الالحاق يقوم باضافة سجل أو أكثر من جدول أو أكثر.

 

فمثلا لو لديك جدول به  بيانات العاملين في احدي شركات مؤسسة و نسميه جدول ج1، و جاءتك قاعدة بيانات جديدة لشركة أخري من شركات المجموعة و بها جدول لبيانات العاملين و نسميه ج2 و تريد تكوين جدول واحد يجمع بيانات  العاملين فى الشركتين اي بين بيانات ج1 و ج2  . فهنا تحتاج الي استعلام الحاق .

 

و هذا يشمل أيضا الحاق بيانات تخضع لشروط معينة ، فمثلا يمكن الحاق بيانات الموظفين من ج1 الي ج2  الذين تزيد أعمارهم عن 35 فقط ، أو الذكور فقط ، أو أي شرط تريد .

 

أيضا يمكن الحاق جزء من البيانات و ليس كل البيانات ، فمثلا لو عدد الحقول 12 فى الجدول ج1  الذي سيتم الاضافة اليه و تريد اضافة 8 حقول فقط من الجدول الاخر ج2 الي جدول ج1  ، فيمكن عمل ذلك ،  ولكن  بشرط :

 

و هذا الشرط ألا تكون ال4 حقول البافية فى ج2 من النوع الذي مطلوب  ادخال بيانات فيه ( Required  ) .

 او أن تكون Required  و معين لها قيمة افتراضية . فيتم  اضافة القيم الافتراضية الي هذه الحقول الاربعة  تلقائيا فور اضافة ال 8 حقول الاخري الي السجلات فى جدول ج1 .

 

ايضا عند الحاق حقول من نوع ترقيم تلقائي auto-number فامامنا حلان :

 

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

 

و الثاني هو اننا نريد المحافظة علي قيم حقل الترقيم التلقائي فى ج1 عند اضافتها الي ج2 ،مثلا السجلات التي لها رقم 1 و 2 فى حقل الترقيم التلقائي فى جدول ج1 نريد أن تأخذ نفس رقم حقل الترقيم التلقائي 1 و 2 بعد الحاقها الي ج2 .

 

 و هنا نضيف حقل الترقيم التلقائي الي الاستعلام و لكن لايقبل الاكسس الحاق السجلات الي حقل الترقيم التلقائي فى  ج2 اذا  تكررت القيم المراد الحاقها  لهذا الحقل بين ج1 و ج2  و هذا اذا كان الحقل فى ج2 مفتاح أومفهرس و  لا يقبل التكرار.

اما ان لم تتكرر فلا تحث مشكلة .

 

أو بمعني آخر اذا كان قيمة حقل المفتاح الذي هو من نوع ترقيم تلقائي فى ج2 لا تحوي الارقام 1 و 2 و انما تبدأ من 3 بسبب حذف السجلات مسبقا مثلا ، فانه بادراج حقل الترقيم التلقائي فى استعلام الالحاق فان السجلات التي لها قيمة 1 و 2 فى حقل الترقيم التلقائي فى ج1 ستاخذ نفس أرقامها فى ج2  و لن تضاف فى نهاية الجدول.

أما إن وجدت سجلات لها رقم 1 و 2 فى حقل المفتاح ، فسيرفض الاكسس الاضافة .

 

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

 

 وستتضح الصورة أكثر مع المثال .

 

عمل استعلام الحاق

 

و مثلما كان الحال فى استعلام التحديث والحذف و فاننا سنبدأ بعمل استعلام تحديد Select query  ثم نحول نوعه الي استعلام الحاق

 

و لنبدأ التطبيق باختيار الجدول emp1 و نختار منه الحقول المراد ارسالها الي emp2 و هي هنا كل الحقول

و نلاحظ وجود حقل النفتاح في الجدولين من نوع ترقيم تلقائي

 

نفتح الآن استعلام تحديد و نختار كل حقول emp1  باختيار ال *

 

ثم نغير نوع الاستعلام الي استعلام الحاق

 

 

 

فتظهر شاشة تسأل عن الجدول المراد الالحاق اليه ، و كما اذا كان فى نفس القاعدة ام لا

و هنا نختار emp2

 

فتظهر لنا خانة اضافية و هي Append To

 

 

 و هي غالبا ما تأخذ قيمتها تلقائيا طمثيل لنفس اسم الحقل اذا كان متاحا فى الجدول الآخر  و ان لم يحدث فنغيرها كما نريد ثم نحفظ الاستعلام باسم q1

 

 

تنفيذ استعلام الالحاق

 

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

و ذلك :

 باختيار نوع الاستعلام من الايقونة   Select Query  و تشغيله  من زر التنفيذ 

 

 

 

 أو

 الطريقة الثانية :  نختار عرض  البيانات فى وضع العرض datasheet view و هي الاسهل

 

 و بعد استعراض البيانات نعود ثانية الي استعلام التحديث :

باختيار ايقونة نوع الاستعلام  و نختار الخيار الأخير Append  Query  فى الحالة الاولي

او نضغط علي زر التصميم  فى حالة الطريقة  الثانية  

 

ثم نختار تنفيذ الاستعلام من علامة التعجب الحمراء  فى الزر المجاور .  فتظهر رسالة تحذيرية بانه سيتم الحاق  البيانات ، و يممكنا اما الموافقة او التراجع و الغاء عملية الالحاق .

 

و يكون تعبير الاس كيو ال المناظر للستعلام كالتالي

 

INSERT INTO Emp2
SELECT Emp1.*
FROM Emp1;
 

 

 و هنا نلاحظ أن السجلان المجودان فى ج1 تم ادراجهما فى الجدول رقم 2 بنفس الترقيم التلقائي لهما فى ج1 ، و هذا لان هذا الترقيم كان متاحا ( الرقمين 1 و 2 )

و اذا حاولنا تكرار التجربة و تشغيل الاستعلام مرة ثانية بعد اول الحاق ـ، فسيرفض الاكسس لأن القيم 1 و 2 فى حقل الترقيم التلقائي ستصبح موجودة بالفعل فى ج2

 

فاذا أردنا ادراج البيانات ثانية ، فلابد من ان نحذف السجلان رقم 1 و 2 من ج2 ، أو ان نتنازل عن الرغبة فى الحفاظ علي رقمي السجلان ، و هذا بان نحذف حقل الترقيم التلقائي من استعلام الاضافة

و نلحق باقي الحقول و ليس ال *  ، و بذلك يتم الحاق بيانات  سجلات ج1 الي نهاية ج2 و تأخذ ترقيم تلفائي جديد

 

و هذا ما تم تنفيذه فى  الاستعلام رقم q2 و الي جملة الاس كيو ال به هي :

 

INSERT INTO Emp2 ( LastName, FirstName, BirthDate, City )
SELECT Emp1.LastName, Emp1.FirstName, Emp1.BirthDate, Emp1.City
FROM Emp1;
 

 

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

 

و الآن لنجرب وضع الشرط فى استعلام الالحاق

 

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

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

 

ببساطة نضع الشرط فى خانة المعايير فى الاستعلام ، بان نكتب تحت حقل الاسم الاخير فى خانة المعايير  Taher كما فى  q3 و سيضيف الاكسس تلقائيا ال "" لها لأنها نص ، و تكون جملة الاس كيو ال كالتالي

 

INSERT INTO Emp2 ( LastName, FirstName, BirthDate, City )
SELECT Emp1.LastName, Emp1.FirstName, Emp1.BirthDate, Emp1.City
FROM Emp1
WHERE (((Emp1.LastName)="Taher"));
 

 

و أخيرا يمكننا اضافة قيم خارجية  أو قيم محسوبة و ليس فقط قيم حقول  من جدول معين الي الاستعلام فى خانة Append To

 

 فمثلا لو أردنا اضافة سجل بشرط أن الاسم = طاهر و لكن نجعل الاسم الاول = "mmmmm"  حيث انه قيمة نصية

 

فنكتبها تلقائيا بدلا من حقل الاسم ، فيقوم الاكسس تلقائيا باضافة تعبير

Expr1: "mmmmm"

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

و نحفظ هذا الاستعلام باسم q4

 

و جملة الاس كيو ال به هي :

 

INSERT INTO Emp2 ( LastName, FirstName, BirthDate, City )
SELECT Emp1.LastName, "mmmmm" AS Expr1, Emp1.BirthDate, Emp1.City
FROM Emp1
WHERE (((Emp1.LastName)="Taher"));
 

 و لننفذه و نري ما يحدث

 

أو أن نضيف MR  الي بداية الاسم الاول قبل الالحاق مثلما فى q5   و التي جملة الاس كيو ال بها هي :

 

INSERT INTO Emp2 ( LastName, FirstName, BirthDate, City )
SELECT Emp1.LastName, "MR. " & [FirstName] AS Expr1, Emp1.BirthDate, Emp1.City
FROM Emp1
WHERE (((Emp1.LastName)="Taher"));
 

 

و بالمثل طبعا يمكن اجراء العمليات الحسابية علي الحقول الرقمية ، و هنا لدينا جدول age  و الذي به 3 سجلات  مسجلة و تصميم الجدول عبارة عن ID  ترقيم تلقائي ، و حقل رقمي به العمر

و مسجل به 3 سجلات كلها بها القيمة 31

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

 

 

 

و هذا ما لديك فى q6 و الذي جملة الاس كيو ال المناظرة له هي :

 

INSERT INTO Age ( Age )
SELECT [Age]+100 AS Expr1
FROM Age;
 

 

 

===========

تم

==========