SQL نسخ البيانات في جدول آخر
- طريقة نسخ البيانات من جدول لآخر
- تجهيز قاعدة البيانات التي سنطبق عليها
- أمثلة حول نسخ البيانات من جدول و إضافتها في جدول آخر
طريقة نسخ البيانات من جدول لآخر
نسخ البيانات من جدول لآخر أمر سهل للغاية لأنه مجرد دمج للأمر SELECT الذي نستخدمه للحصول على البيانات من الجداول مع الأمر INSERT INTO الذي نستخدمه لإضافة البيانات في أي جدول.
لنسخ البيانات من جدول لآخر يجب أن يكون نوع الأعمدة التي سيتم النسخ منها متطابق مع نوع الأعمدة التي سيتم النسخ إليها.
عند نسخ البيانات من جدول لآخر تستطيع تحديد الأسطر و الحقول التي سيتم نسخها, أي لست مجبر على نسخ كل بيانات الجدول في جدول آخر.
بالإضافة إلى ذلك, فإن نسخ القيم من جدول لآخر لا يؤثر إطلاقاً على القيم الموجودة في الجدول الذي سيتم النسخ إليه.
نسخ البيانات قد يكون مفيد أيضاً حين تتعامل مع عدة جداول مترابطة و تريد دمجها مع بعضها في جدول جديد لعرضها بشكل مفهوم و مرتب.
لا تفكر بهذه النقطة بالتحديد الآن, لأن هذا الأمر سيمر معك في دروس لاحقة.
الشكل العام لتجميع الحقول
إذا كان الجدولين متطابقين في الشكل, شكل الإستعلام سيكون كالتالي.
إذا كان الجدولين غير متطابقين أو تريد تحديد الأعمدة التي سيتم النسخ منها و إليها, شكل الإستعلام سيكون كالتالي.
- مكان الكلمة
table1
نضع إسم الجدول الذي سننسخ البيانات منها. - مكان الكلمة
table2
نضع إسم الجدول الذي سننسخ البيانات فيه. - بعد الكلمة WHERE يمكننا وضع شروط لتحديد القيم التي سيتم نسخها من الجدول
table1
.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها التالي:
- جدول إسمه
table1
يحتوي على بيانات 5 أسطر. - جدول إسمه
table2
شكله مطابق تماماً للجدولtable1
و لكنه فارغ.
الإستعلام
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash
و إنشاء الجدولين table1
و table2
بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash
من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول table1
.
id | user | gender | country | salary |
---|---|---|---|---|
1 | rami | male | Lebanon | 700.00 |
2 | ahmad | male | Syria | 800.00 |
3 | hanan | female | KSA | 750.00 |
4 | saly | female | Lebanon | 650.00 |
5 | samir | male | Egypt | 600.00 |
شكل الجدول table2
الذي لا يحتوي على أي بيانات.
id | user | gender | country | salary |
---|---|---|---|---|
أمثلة حول نسخ البيانات من جدول و إضافتها في جدول آخر
المثال الأول
الإستعلام التالي يقوم بنسخ كل القيم الموجودة في الجدول table1
و يضيفها في الجدول table2
و من ثم يقوم بعرض البيانات التي وضعها في الجدول table2
.
الإستعلام
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
لاحظ أن الجدول table2
أصبح يحتوي على نفس البيانات الموجودة في الجدول table1
.
id | user | gender | country | salary |
---|---|---|---|---|
1 | rami | male | Lebanon | 700.00 |
2 | ahmad | male | Syria | 800.00 |
3 | hanan | female | KSA | 750.00 |
4 | saly | female | Lebanon | 650.00 |
5 | samir | male | Egypt | 600.00 |
إنتبه
بالنسبة للحقل id
فقد تم نسخ قيمه أيضاً لأن الجدول table2
لم يكن يتضمن أي قيمة مشابهة و لو كان يتضمن قيمة واحدة مشابهة لما تنفذ الإستعلام.
إذاً في حال حاولت تنفيذ الإستعلام السابق مجدداً بهدف إضافة كل قيم الجدول table1
من جديد في الجدول table2
سيظهر لك خطأ يخبرك بأنه لا يمكن تنفيذ الإستعلام لأنه من أول سطر حاولت إضافته إتضح لهم أن رقم التعرفة id
الذي تحاول إضافته في الجدول table2
هو رقم موجود في الأساس به.
إذا قمت بتنفيذ الإستعلام السابق من جديد سيظهر لك الخطأ Duplicate entry '1' for key 'PRIMARY' و الذي يعني ما قلناه بالضبط.
المثال الثاني
الإستعلام التالي يقوم بنسخ كل القيم الموجودة في الجدول table1
باستثناء القيم الموضوعة في العمود id
.
ما فعلناه هنا, هو ترك قاعدة البيانات تقوم بإعطاء أرقام تعرفة id
لوحدها بشكل تلقائي لكل سطر يتم إضافته لأن نوع العمود بالأساس هو AUTO_INCREMENT و هكذا سنتمكن من نسخ كل القيم من جديد في الجدول table2
بدون أي مشاكل.
الإستعلام
الإستعلام التالي هو ما يجب كتابته بالضبط للحصول على الإحصاء المطلوب.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
لاحظ أن الجدول table2
تم إضافة بيانات الجدول table1
فيه من جديد و لكن هذه المرة تم إعطاء رقم تعرفة id
مختلف لكل سطر بشكل تلقائي.
id | user | gender | country | salary |
---|---|---|---|---|
1 | rami | male | Lebanon | 700.00 |
2 | ahmad | male | Syria | 800.00 |
3 | hanan | female | KSA | 750.00 |
4 | saly | female | Lebanon | 650.00 |
5 | samir | male | Egypt | 600.00 |
6 | rami | male | Lebanon | 700.00 |
7 | ahmad | male | Syria | 800.00 |
8 | hanan | female | KSA | 750.00 |
9 | saly | female | Lebanon | 650.00 |
10 | samir | male | Egypt | 600.00 |
المثال الثالث
الإستعلام التالي يقوم بنسخ القيم الموجودة في العمودين username
و country
من الجدول table1
و يضيفها في الجدول table2
و من ثم يقوم بعرض البيانات التي أصبح يحتويها الجدول table2
.
الإستعلام
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
لاحظ أن الجدول table2
أضيف عليه بيانات الأعمدة التي تم تحديدها فقط من الجدول table1
و الأعمدة الأخرى يظهر فيها القيمة NULL.
id | user | gender | country | salary |
---|---|---|---|---|
1 | rami | male | Lebanon | 700.00 |
2 | ahmad | male | Syria | 800.00 |
3 | hanan | female | KSA | 750.00 |
4 | saly | female | Lebanon | 650.00 |
5 | samir | male | Egypt | 600.00 |
6 | rami | male | Lebanon | 700.00 |
7 | ahmad | male | Syria | 800.00 |
8 | hanan | female | KSA | 750.00 |
9 | saly | female | Lebanon | 650.00 |
10 | samir | male | Egypt | 600.00 |
11 | rami | NULL | Lebanon | NULL |
12 | ahmad | NULL | Syria | NULL |
13 | hanan | NULL | KSA | NULL |
14 | saly | NULL | Lebanon | NULL |
15 | samir | NULL | Egypt | NULL |