الفرق بين المراجعتين لصفحة: «SQL/update»
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}' |
ط خطأ مطبعي |
||
سطر 72: | سطر 72: | ||
|0162 | |0162 | ||
|} | |} | ||
ويُراد زيادة 10% لقيمة الراتب وتعديل طبيعة العمل لتصبح عبر شبكة | ويُراد زيادة 10% لقيمة الراتب وتعديل طبيعة العمل لتصبح عبر شبكة الإنترنت بدلًا من المركز، وذلك لكل موظف يسكن في أيّ من المدن (Aleppo, Cairo, Rabat) بالاستفادة من [[SQL/Interval Operators|المعامل]] <code>IN</code>، فسيكون الاستعلام المطلوب:<syntaxhighlight lang="sql"> | ||
UPDATE employees | UPDATE employees | ||
SET Salary = Salary * 1.1 , Work =’online’ | SET Salary = Salary * 1.1 , Work =’online’ |
مراجعة 03:40، 29 يناير 2018
يُستخدم هذا الاستعلام من أجل تحديث قيم البيانات المخزنة في سجلات الجداول.
البنية العامة للاستعلام:
UPDATE table_name
SET column_name = [|DEFAULT], column_name = value [|DEFAULT], …
WHERE condition
إذ من الممكن تحديث عدة قيم في عدة سجلات ضمن نفس الاستعلام، وعند استخدام الكلمة المفتاحية DEFAULT
ستصبح القيمة في الحقل هي القيمة الافتراضية لنوع البيانات فيه، أما إن كان الاستعلام بالشكل:
UPDATE table_name
SET column_name = value [|DEFAULT], column_name = value [|DEFAULT], …
فتنفيذه يؤدي لتعديل قيمة الحقل المحدد بكافة السجلات الموجودة في الجدول بسبب عدم وجود الشرط الذي يحدد السجلات التي ستُعدل.
مثال
إن كان الجدول التالي (employees
) موجودًا في قاعدة البيانات:
WeeklyHours | Work | City | Salary | Name | EmployeeID |
---|---|---|---|---|---|
25 | In centre | Beruit | 200 | Natalie Sinno | 0156 |
30 | In centre | Alexandria | 275 | Ahmad Rida | 0157 |
25 | In centre | Aleppo | 210 | Kareem al-Hamdan | 0158 |
28 | In centre | Rabat | 190 | Mahdi Thabit | 0159 |
36 | In centre | Jedda | 300 | Rabie al-Sadi | 0160 |
36 | In centre | Amman | 290 | Jaber Hammad | 0161 |
30 | In centre | Cairo | 210 | Rawda Hussien | 0162 |
ويُراد زيادة 10% لقيمة الراتب وتعديل طبيعة العمل لتصبح عبر شبكة الإنترنت بدلًا من المركز، وذلك لكل موظف يسكن في أيّ من المدن (Aleppo, Cairo, Rabat) بالاستفادة من المعامل IN
، فسيكون الاستعلام المطلوب:
UPDATE employees
SET Salary = Salary * 1.1 , Work =’online’
WHERE City IN (Aleppo, Cairo, Rabat);
وسيصبح الجدول بالقيم الجديدة كالآتي:
WeeklyHours | Work | City | Salary | Name | EmployeeID |
---|---|---|---|---|---|
25 | In centre | Beruit | 200 | Natalie Sinno | 0156 |
30 | In centre | Alexandria | 275 | Ahmad Rida | 0157 |
25 | online | Aleppo | 231 | Kareem al-Hamdan | 0158 |
28 | online | Rabat | 209 | Mahdi Thabit | 0159 |
36 | In centre | Jedda | 300 | Rabie al-Sadi | 0160 |
36 | In centre | Amman | 290 | Jaber Hammad | 0161 |
30 | online | Cairo | 231 | Rawda Hussien | 0162 |
تحديث قيمة عدد محدد من السجلات
يمكن تعيين عدد محدد من السجلات التي ستُحدّث قيمتها وذلك بالاعتماد على الكلمة المفتاحية TOP في محرك SQL Server والكلمة المفتاحية LIMIT
في محركات PostgreSQL و SQLite و MySQL والكلمة المفتاحية ROWNUM
في محرك Oracle وذلك بنفس الطريقة المستخدمة لتحديد عدد السجلات في استعلام SELECT
، واستعلام DELETE
.
لدى تنفيذ نفس الاستعلام السابق بإضافة TOP
بمحرك SQL Server يصبح بالشكل الآتي:
UPDATE TOP (2) employees
SET Salary = Salary * 1.1, Work =’online’
WHERE City IN (Aleppo, Cairo, Rabat);
وفي محركات PostgreSQL و SQLite و MySQL بالشكل:
UPDATE employees
SET Salary = Salary * 1.1, Work =’online’
WHERE City IN (Aleppo, Cairo, Rabat)
LIMIT 2;
وفي محرك Oracle بالشكل:
UPDATE employees
SET Salary = Salary * 1.1, Work =’online’
WHERE City IN (Aleppo, Cairo, Rabat) AND ROWNUM <= 2;
وعند تنفيذ الاستعلامات الثلاثة السابقة ستُحدَّث قيمة الراتب ومكان العمل في سجلين فقط دون تعديل الثالث، أي تصبح القيم بالجدول على النحو الآتي:
WeeklyHours | Work | City | Salary | Name | EmployeeID |
---|---|---|---|---|---|
25 | In centre | Beruit | 200 | Natalie Sinno | 0156 |
30 | In centre | Alexandria | 275 | Ahmad Rida | 0157 |
25 | online | Aleppo | 231 | Kareem al-Hamdan | 0158 |
28 | online | Rabat | 209 | Mahdi Thabit | 0159 |
36 | In centre | Jedda | 300 | Rabie al-Sadi | 0160 |
36 | In centre | Amman | 290 | Jaber Hammad | 0161 |
30 | In centre | Cairo | 210 | Rawda Hussien | 0162 |
تحديث القيم في السجلات اعتمادًا على قيم مخزنة في جدول آخر
ليكن الجدول الآتي باسم leaves
موجودًا في قاعدة البيانات السابقة التي تحوي جدول الموظفين (employees):
AnnualLeave | EmployeeID |
---|---|
10 | 0156 |
12 | 0157 |
10 | 0158 |
11 | 0159 |
15 | 0160 |
15 | 0161 |
12 | 0162 |
لإضافة يوميّ إجازة إضافيَّين للجدول leaves
اعتمادًا على عدد ساعات العمل المحددة في جدول employees
بحيث تكون ساعات عمل الموظف أكثر من 25 ساعة، سيُستخدم الاستعلام الآتي:
UPDATE leaves
SET AnnualLeave = AnnualLeave + 2
FROM (SELECT EmployeeID FROM employees WHERE WeeklyHours > 25 ) AS tempTable
WHERE leaves.EmployeeID = tempTable.EmployeeID;
إذ إنَّ هذا الاستعلام يعتمد على مفهوم الاستعلام الفرعي في عبارة FROM
والذي حَدَّد السجلات من الجدول employees
التي ساعات العمل فيها أكثر من 25، وسُمّي الجدول الناتج باسم tempTable
بالاستفادة من المعامل AS، وتحقق التقابل ما بين الجدولين ضمن عبارة WHERE
.
التوافقية
SQLServer | SQLite | Oracle | PostgreSQL | MySQL |
---|---|---|---|---|
نعم | نعم | نعم | نعم | نعم |