Part 11: Managing tables using DML Statements
في السابق شرحنا مواضيع مختلفة واحدة منها ال Select Statement الي من خلالها نعمل retrieve للمعلومات من ال database , هي جزء من DML ...
الآن نُكمل ال SQL statements التابعة لل DML و هي:
1. Insert Statement.
2. Update Statement.
3. Delete Statement.
4. Truncate Statement.
في السابق شرحنا مواضيع مختلفة واحدة منها ال Select Statement الي من خلالها نعمل retrieve للمعلومات من ال database , هي جزء من DML ...
الآن نُكمل ال SQL statements التابعة لل DML و هي:
1. Insert Statement.
2. Update Statement.
3. Delete Statement.
4. Truncate Statement.
1. Insert Statement
ال Insert Statement تمكننا من أضافة بيانات جديدة الى Table معين.
طبعا عدنا نوعين من Insert Statement:
1.1 Insert Into Statement.
1.2 Insert Into SELECT Statement.
ال Insert Statement تمكننا من أضافة بيانات جديدة الى Table معين.
طبعا عدنا نوعين من Insert Statement:
1.1 Insert Into Statement.
1.2 Insert Into SELECT Statement.
1.1 SQL INSERT INTO Statement.
هذا النوع من Insert SQL Statement ممكن استخدامه بالصيغتين المذكورتين في الصورة أعلاه A and B .
كلاهما يستخدمان لأضافة row/ record واحد فقط في كل مرة لعدد من الأعمدة, لكن الفرق بينهم هو التالي:
- في A نحدد الأعمدة columns الي نريد نضيف لها بيانات و الترتيب يكون حسب ترتيب الأعمدة في عبارة Insert.
- في B نضيف بيانات لكل الأعمدة columns بالجدول لسجل واحد بدون ذكر أسماء الأعمدة, و هنا ترتيب القيم في عبارة Insert يكون حسب ترتيب الأعمدة في Table.
هذا النوع من Insert SQL Statement ممكن استخدامه بالصيغتين المذكورتين في الصورة أعلاه A and B .
كلاهما يستخدمان لأضافة row/ record واحد فقط في كل مرة لعدد من الأعمدة, لكن الفرق بينهم هو التالي:
- في A نحدد الأعمدة columns الي نريد نضيف لها بيانات و الترتيب يكون حسب ترتيب الأعمدة في عبارة Insert.
- في B نضيف بيانات لكل الأعمدة columns بالجدول لسجل واحد بدون ذكر أسماء الأعمدة, و هنا ترتيب القيم في عبارة Insert يكون حسب ترتيب الأعمدة في Table.
Notes:
1. في A يجب أن يكون عدد ال columns المذكورة في insert statement مساوي لعدد ال values و بنفس النوع البياني data type و بنفس الترتيب order.
( يعني مثلا كتبت 5 أعمدة columns في عبارة ال insert فلازم أضيف 5 قيم values, و ال value1 هي القيمة الي سندخلها في ال column1 و هكذا, و اذا كان النوع البياني مثلاً لل column 3 هو Number فلازم القيمة value الي رح نضيفها لهاذ العمود column هي number وهكذا).
********************************************************
2. في B يجب أن يكون ترتيب ال values المضافة هو نفس ترتيب الأعمدة columns بالجدول و بنفس النوع البياني كما ذكر سابقا.
********************************************************
3. عند أخال قيم التاريخ Dates و النصوص Strings يجب أن تكون بين single quotation علامتي تنصيص فردية ' ' .
********************************************************
4. يجب الأنتباه لل constraints عند أدخال قيم values.
موضوع ال Constraints المفروض نشرحه فيما بعد عندما نشرح عن ال create table. و ال Constraints تستخدم لتحديد أو تعيين بعض القواعد على الأعمدة columns في Table.
( كل ال constraint توضع أو تحدد وقت أنشاء الجدول لكن هنا رح نتناول نبذه مختصرة عنهم حتى لازم نخليهم في بالنا عندما نضيف بيانات لل table.
أوراكل تجهزنا بعدد من ال Constraints, الشائع استخدامها هي التالي:
1- NOT NULL
يتأكد بأن العمود لا يتقبل قيمة ال Null. (هذه الخاصية تعطى عند اشاء ال Table رح نوضحه فيما بعد). المهم اذا كنت مخليين قيد Not Null على عمود معين فلازم ننتبه عند أعطاء القيم في جملة Insert بأن هذا العمود لا يتقبل أي قيمة Null)
2- UNIQUE
يتأكد بأن العمود column لا يتقبل قيم مكررة ضمن table.
مثلا في جدول ال Departments أسماء الإدارات ميصير تتكرر.
3- PRIMARY KEY
هو مزيج بين Unique and Not Null. يُعرّف كل صف row في الجدول بشكل فريد. فرقه عن ال unique بأنه لا يتقبل قيمة Null.
4- FOREIGN KEY
يبين بأن هذا العمود مرتبط مع جدول/جداول أخرى.
مثلا جدول ال Employees يتضمن column أسمه Department_id وهو foreign key لجدول ال Departments (يعني ال Department_id يستخدم للربط بين هذين الجدوليين) فعند أضافة بيانات لموظف بجدول ال Employees لازم ننتبه لعمود Department_id تكون قيمتة نفس القيم الموجوده بجدول ال Departments.
5- CHECK
يتأكد بأن القيمة value المدخلة لهذا العمود column تحقق شرط معين.
مثلا لو كان عندي جدول موظفين فيه عمود العمر age لكل موظف, لو فرضنا أقل عمر للموظفين ممكن يقبله النظام هو 18 فما فوق, فإذا مُدخل البيانات قام بأدخال قيمة للعمر فرضا 10 فهذا خطأ لأن منطقياً ميصير ( فهنا اخلي شرط وقت أنشاء ال table بأن عمود العمر لازم ميتقبل عمر أقل من 18(رح نوضحه بعدين)).. الفكره أنو أنتبه للعمود الي علية قيد ال check وقت أدخال البيانات.
6- DEFAULT
تعيين قيمة أفتراضيه للعمود column في حال لم نعطي قيمة وقت ال insert. هذا القيد ميأثر على insert.
7- CREATE INDEX
يستخدم لإنشاء واسترجاع البيانات من قاعدة البيانات بسرعة كبيرة.
أذن قبل أضافه اي بيانات لأي جدول لازم ننتبه للتالي:
1- لأسماء الأعمدة.
2- و للنوع البياني للأعمدة.
3- و لطول القيمه الي ممكن يتقبلها العمود.
4- و آخر شي لازم نعرف ال constraints و خصوصاً ال Not Null .
و أحنه سابقاً شرحنا command الي من خلاله ممكن أعرف الي تم ذكره بالنقاط الثلاثة أضافة لل Not Null constaint وهو ال Desc or Describe .
1. في A يجب أن يكون عدد ال columns المذكورة في insert statement مساوي لعدد ال values و بنفس النوع البياني data type و بنفس الترتيب order.
( يعني مثلا كتبت 5 أعمدة columns في عبارة ال insert فلازم أضيف 5 قيم values, و ال value1 هي القيمة الي سندخلها في ال column1 و هكذا, و اذا كان النوع البياني مثلاً لل column 3 هو Number فلازم القيمة value الي رح نضيفها لهاذ العمود column هي number وهكذا).
********************************************************
2. في B يجب أن يكون ترتيب ال values المضافة هو نفس ترتيب الأعمدة columns بالجدول و بنفس النوع البياني كما ذكر سابقا.
********************************************************
3. عند أخال قيم التاريخ Dates و النصوص Strings يجب أن تكون بين single quotation علامتي تنصيص فردية ' ' .
********************************************************
4. يجب الأنتباه لل constraints عند أدخال قيم values.
موضوع ال Constraints المفروض نشرحه فيما بعد عندما نشرح عن ال create table. و ال Constraints تستخدم لتحديد أو تعيين بعض القواعد على الأعمدة columns في Table.
( كل ال constraint توضع أو تحدد وقت أنشاء الجدول لكن هنا رح نتناول نبذه مختصرة عنهم حتى لازم نخليهم في بالنا عندما نضيف بيانات لل table.
أوراكل تجهزنا بعدد من ال Constraints, الشائع استخدامها هي التالي:
1- NOT NULL
يتأكد بأن العمود لا يتقبل قيمة ال Null. (هذه الخاصية تعطى عند اشاء ال Table رح نوضحه فيما بعد). المهم اذا كنت مخليين قيد Not Null على عمود معين فلازم ننتبه عند أعطاء القيم في جملة Insert بأن هذا العمود لا يتقبل أي قيمة Null)
2- UNIQUE
يتأكد بأن العمود column لا يتقبل قيم مكررة ضمن table.
مثلا في جدول ال Departments أسماء الإدارات ميصير تتكرر.
3- PRIMARY KEY
هو مزيج بين Unique and Not Null. يُعرّف كل صف row في الجدول بشكل فريد. فرقه عن ال unique بأنه لا يتقبل قيمة Null.
4- FOREIGN KEY
يبين بأن هذا العمود مرتبط مع جدول/جداول أخرى.
مثلا جدول ال Employees يتضمن column أسمه Department_id وهو foreign key لجدول ال Departments (يعني ال Department_id يستخدم للربط بين هذين الجدوليين) فعند أضافة بيانات لموظف بجدول ال Employees لازم ننتبه لعمود Department_id تكون قيمتة نفس القيم الموجوده بجدول ال Departments.
5- CHECK
يتأكد بأن القيمة value المدخلة لهذا العمود column تحقق شرط معين.
مثلا لو كان عندي جدول موظفين فيه عمود العمر age لكل موظف, لو فرضنا أقل عمر للموظفين ممكن يقبله النظام هو 18 فما فوق, فإذا مُدخل البيانات قام بأدخال قيمة للعمر فرضا 10 فهذا خطأ لأن منطقياً ميصير ( فهنا اخلي شرط وقت أنشاء ال table بأن عمود العمر لازم ميتقبل عمر أقل من 18(رح نوضحه بعدين)).. الفكره أنو أنتبه للعمود الي علية قيد ال check وقت أدخال البيانات.
6- DEFAULT
تعيين قيمة أفتراضيه للعمود column في حال لم نعطي قيمة وقت ال insert. هذا القيد ميأثر على insert.
7- CREATE INDEX
يستخدم لإنشاء واسترجاع البيانات من قاعدة البيانات بسرعة كبيرة.
أذن قبل أضافه اي بيانات لأي جدول لازم ننتبه للتالي:
1- لأسماء الأعمدة.
2- و للنوع البياني للأعمدة.
3- و لطول القيمه الي ممكن يتقبلها العمود.
4- و آخر شي لازم نعرف ال constraints و خصوصاً ال Not Null .
و أحنه سابقاً شرحنا command الي من خلاله ممكن أعرف الي تم ذكره بالنقاط الثلاثة أضافة لل Not Null constaint وهو ال Desc or Describe .
Insert Null Values
اذا تذكرون قبل خطوتين من سوينا Describe للجدول Departments نلاحظ آخر عمودين ال manager_id and Location_id ممكن يتقبلون قيمة Null, فإذا ردنا نضيف قيمة Null كيف رح تكون الطريقة؟
تتم أضافة قيم ال Null بطريقتين:
1- عدم كتابة الأعمدة columns الي نريد نجعل فيها قيمة Null في Insert Statement.( لاحظ الجزء A من الصورة أعلاه)
2- أن نكتب الأعمدة columns في Insert Statement و نكتب قيمتها ال Null داخل الجزء values. ( لاحظ الجزء B من الصورة أعلاه)
أذن أضافة قيم فارغة Null تكون مقبولة فقط للأعمدة بالجدول الي مامخلين عليها قيد ال Not Null او primary key.
اذا تذكرون قبل خطوتين من سوينا Describe للجدول Departments نلاحظ آخر عمودين ال manager_id and Location_id ممكن يتقبلون قيمة Null, فإذا ردنا نضيف قيمة Null كيف رح تكون الطريقة؟
تتم أضافة قيم ال Null بطريقتين:
1- عدم كتابة الأعمدة columns الي نريد نجعل فيها قيمة Null في Insert Statement.( لاحظ الجزء A من الصورة أعلاه)
2- أن نكتب الأعمدة columns في Insert Statement و نكتب قيمتها ال Null داخل الجزء values. ( لاحظ الجزء B من الصورة أعلاه)
أذن أضافة قيم فارغة Null تكون مقبولة فقط للأعمدة بالجدول الي مامخلين عليها قيد ال Not Null او primary key.
Insert Special Values
-أضافة Special values
واحدة من ال special values هي ال date...
مثلا أريد أضيف موظف جديد في جدول ال employees, واحدة من القيم الي المفروض أضيفها هي تاريخ تعيين هذا الموظف..
فمثلا ممكن أستخدم ال SysDate و هي حتجيبلي التاريخ من الحاسوب مالتي... (لاحظ جزء A من الصورة أدناه).
أو ممكن أعطي تاريخ بصيغة معينة و أستخدم ال function الخاصة بال date... (لاحظ جزء B من الصورة أدناه).
-أضافة Special values
واحدة من ال special values هي ال date...
مثلا أريد أضيف موظف جديد في جدول ال employees, واحدة من القيم الي المفروض أضيفها هي تاريخ تعيين هذا الموظف..
فمثلا ممكن أستخدم ال SysDate و هي حتجيبلي التاريخ من الحاسوب مالتي... (لاحظ جزء A من الصورة أدناه).
أو ممكن أعطي تاريخ بصيغة معينة و أستخدم ال function الخاصة بال date... (لاحظ جزء B من الصورة أدناه).
- Insert Values By using Substitution Variables
ممكن أضافة values بطريقة غير مباشرة بأستخدام ال substitution variables الي تم شرحها سابقا.
لاحظ الصورة أدناه.
ممكن أضافة values بطريقة غير مباشرة بأستخدام ال substitution variables الي تم شرحها سابقا.
لاحظ الصورة أدناه.
1.2 Insert Into Select Statement
تعلمنا سابقا كيف نضيف بيانات، و في كل مره يتم اضافة row/record واحد فقط..
الآن هنالك طريقه أخرى لإضافة البيانات للجدول تسمى Insert Into Select (تكون بأستخدام ال sub query) , بهذه الحالة البيانات تجلب من جدول آخر و تضاف للجدول الحالي..
ال syntax العام الها موضح بالصوره أدناه.
Note:
من خلال ال syntax أتضح ممكن اضيف كل البيانات من جدول ثاني أو جزء منها. لكن يجب أن ننتبه بأن الأنواع البيانية Data types للأعمدة columns من الجدول الي نجلب منه البيانات و الي نسميه source تكون مشابهه للأنواع البيانية لأعمدة columns بالجدول التي سيضاف له البيانات و الذي يسمى ب target.
تعلمنا سابقا كيف نضيف بيانات، و في كل مره يتم اضافة row/record واحد فقط..
الآن هنالك طريقه أخرى لإضافة البيانات للجدول تسمى Insert Into Select (تكون بأستخدام ال sub query) , بهذه الحالة البيانات تجلب من جدول آخر و تضاف للجدول الحالي..
ال syntax العام الها موضح بالصوره أدناه.
Note:
من خلال ال syntax أتضح ممكن اضيف كل البيانات من جدول ثاني أو جزء منها. لكن يجب أن ننتبه بأن الأنواع البيانية Data types للأعمدة columns من الجدول الي نجلب منه البيانات و الي نسميه source تكون مشابهه للأنواع البيانية لأعمدة columns بالجدول التي سيضاف له البيانات و الذي يسمى ب target.
لتطبيق ما ذكر سابقاً عدنا جدولين كما في الصورة أدناه
الأول أسمه Customers و يتكون من مجموعة من ال columns التالية:
1.CustomerID
2.CustomerName
3.ContactName
4.Address
5.City
6.PostalCode
7.Country
و الجدول الثاني أسمه Suppliers و يتكون من الأعمدة التالية:
1.SupplierID
2.SupplierName
3.ContactName
4.Address
5.City
6.PostalCode
7.Country
8.Phone
الأول أسمه Customers و يتكون من مجموعة من ال columns التالية:
1.CustomerID
2.CustomerName
3.ContactName
4.Address
5.City
6.PostalCode
7.Country
و الجدول الثاني أسمه Suppliers و يتكون من الأعمدة التالية:
1.SupplierID
2.SupplierName
3.ContactName
4.Address
5.City
6.PostalCode
7.Country
8.Phone
المثال الأول: تمليء كل أعمدة جدول ال Customers لكن هنا منكدر نستخدم طريقة ال * الي وضحت سابقا ( لأن عمود ال phone موجود بجدول ال suppliers و غير موجود بجدول ال Customers ) لذلك أستخدمنا هذه الطريقه.
المثال الثاني: أخذنا فقط بيانات لثلاث Columns من جدول ال suppliers و ضفناها لجدول ال Customers.
المثال الثالث: نفس الطريقة الثانيه لكن أستخدام ال condition (where) لأضافة المجهزين الألمان فقط.
المثال الثاني: أخذنا فقط بيانات لثلاث Columns من جدول ال suppliers و ضفناها لجدول ال Customers.
المثال الثالث: نفس الطريقة الثانيه لكن أستخدام ال condition (where) لأضافة المجهزين الألمان فقط.
2. Update Statement
ال Update statement تمكننا من التعديل على بيانات موجودة في table معين. و التعديل يكون على بيانات سجل record/row واحد أو على مجموعة من records و أيضا على عمود column واحد أو مجموعة من columns.
ال Syntax العام ل Update Statement موضح في الصورة أدناه.
ال Update statement تمكننا من التعديل على بيانات موجودة في table معين. و التعديل يكون على بيانات سجل record/row واحد أو على مجموعة من records و أيضا على عمود column واحد أو مجموعة من columns.
ال Syntax العام ل Update Statement موضح في الصورة أدناه.