استعلام INSERT

من موسوعة حسوب
< SQL
مراجعة 12:17، 30 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (تعديل الأمثلة)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

مهمة هذا الاستعلام هي إنشاء سجل جديد في الجدول، وله البنية العامة:

INSERT INTO tbl_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

إذ تجب مراعاة التوافقية ما بين اسم العمود والقيمة التي ستوضع فيه على التوالي وبالترتيب، وأن تكون متوافقةً مع نوع بيانات الحقل، أي أن التوافق يجب أن يكون بالترتيب والعدد والنوع. ولإسناد قيم إلى كافة الحقول في السجل يُمكن الاستغناء عن أسماء الأعمدة ليصبح الاستعلام بالشكل:

INSERT INTO tbl_name VALUES (value1, value2, value3, ...);

إذ تجب مراعاة ترتيب القيم وعددها ونوعها ليتوافق مع الأعمدة في الجدول. أما إن كان الاستعلام بالشكل:

INSERT INTO tbl DEFAULT VALUES;

فتنفيذه يؤدي إلى إنشاء سجل جديدٍ في الجدول يحتوي على القيم الافتراضية بحسب نوع البيانات المحدد لكل عمود على حدة. وكما أن محرك MySQL يدعم الصيغة الآتية لاستعلام INSERT:

INSERT INTO tbl_name
  SET assignment_list

إذ إن assignment_list هي عدد من عمليات إسناد القيم للحقول المناسبة لها.

مثال

إن كان الجدول students التالي موجودًا في قاعدة البيانات:

GPA Age Name StudentID
3.68 25 Mona 1024
3.57 24 Radi 1081
2.50 25 Leen 1012
4.00 26 Sarah 1085
1.96 22 Amin 1066
2.87 23 Yusuf 1056

لإضافة سجل طالب جديد رقمه التسلسلي 1075 واسمه Abed وعمره 21 سنة ومعدله 1.90 في هذا الجدول، يصبح الاستعلام بالشكل الآتي:

INSERT INTO students (StudentID, Name, Age, GPA)
VALUES (1075, Abed, 21, 1.90);

ويصبح الجدول بعد تنفيذ هذا الاستعلام:

GPA Age Name StudentID
3.68 25 Mona 1024
3.57 24 Radi 1081
2.50 25 Leen 1012
4.00 26 Sarah 1085
1.96 22 Amin 1066
2.87 23 Yusuf 1056
1.90 21 Abed 1075

إضافة سجل لا يحتوي على كافة بيانات الأعمدة

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

إن تنفيذ الاستعلام الآتي على الجدول الأساسي students:

INSERT INTO students (StudentID, Name, Age)
VALUES (NEWID(), Abed, 21);

سيؤدي لإضافة طالب اسمه Abed وعمره 21 وبمعدل 0.0 لأنها القيمة الافتراضية لعمود GPA أما رقمه التسلسلي فسيصبح 1086 لأن الدالة NEWID()‎ مسؤولة عن إعطاء الرقم التسلسلي التالي لآخر رقم تسلسلي مستخدم في الجدول، ويصبح الجدول كما يلي:

GPA Age Name StudentID
3.68 25 Mona 1024
3.57 24 Radi 1081
2.50 25 Leen 1012
4.00 26 Sarah 1085
1.96 22 Amin 1066
2.87 23 Yusuf 1056
0.0 21 Abed 1086

إضافة عدد من السجلات باستعلام واحد

من الممكن أن تُضاف عدة سجلات بآن واحد ضمن نفس الاستعلام INSERT وذلك بفصل السجلات عن بعضها بفاصلة كما في الاستعلام الآتي:

INSERT INTO students (StudentID, Name, Age, GPA)
VALUES (1075, Abed, 21, 1.90), (1076, Taimaa, 23, 2.75), (1077, Mohammad, 22, 1.85);

إذ تُضاف ثلاثة سجلات للجدول ليصبح كالآتي:

GPA Age Name StudentID
3.68 25 Mona 1024
3.57 24 Radi 1081
2.50 25 Leen 1012
4.00 26 Sarah 1085
1.96 22 Amin 1066
2.87 23 Yusuf 1056
1.90 21 Abed 1075
2.75 23 Taimaa 1076
1.85 22 Mohammad 1077

إضافة سجلات إلى الجدول من جدول آخر

تمكن إضافة سجلات للجدول من جدول آخر بالاعتماد على استعلام SELECT.

ليكن الجدول الآتي newStudents موجودًا في قاعدة البيانات التي تحوي الجدول students:

GPA Age Name StudentID
1.86 21 Maher 2027
3.57 23 Joud 2051
2.40 22 Kawthar 2082
3.68 25 Asmaa 2075

لدى تنفيذ الاستعلام الآتي:

INSERT INTO students (StudentID, Name, Age, GPA)
SELECT StudentID, Name, Age, GPA
FROM newStudents
WHERE GPA > 2.50;

ستضاف السجلات من الجدول newStudents والتي معدل الطالب فيها أكبر من 2.50 إلى الجدول students، ليصبح الجدول students بالشكل الآتي:

GPA Age Name StudentID
3.68 25 Mona 1024
3.57 24 Radi 1081
2.50 25 Leen 1012
4.00 26 Sarah 1085
1.96 22 Amin 1066
2.87 23 Yusuf 1056
3.57 23 Joud 2051
3.68 25 Asmaa 2075

التوافقية

SQLServer SQLite Oracle PostgreSQL MySQL
نعم نعم نعم نعم نعم

مصادر