جملة SQL UPDATE: دليلك الشامل لتحديث قيم الجداول بكفاءة وفعالية

دقائق القراءة: 4

فهم جملة SQL UPDATE: قلب تعديل البيانات

تُعد لغة الاستعلام الهيكلية (SQL)، التي تُنطق “سيكويل”، اختصارًا لـ Structured Query Language. ظهرت هذه اللغة القوية والمُحددة الأنواع لأول مرة في عام 1974، ولكن لم يتم إصدارها رسميًا حتى عام 1986. قد يظن البعض أن أداة “قديمة” كهذه قد ولّت أيام مجدها، لكن الواقع يثبت عكس ذلك تمامًا.

في عام 2019، أظهر استطلاع Scale Grid DeveloperWeek أن 60.5% من المشاركين استخدموا SQL، بينما استخدم 39.5% فقط NoSQL. وتضمنت فئة SQL قواعد بيانات مثل MySQL و PostgreSQL و SQL Server، في حين شملت فئة NoSQL قواعد بيانات مثل MongoDB و Cassandra. حتى في عام 2017، ووفقًا لاستطلاع Stack Overflow Developer's Survey، كانت SQL ثاني أكثر اللغات شيوعًا (بعد JavaScript)، حيث صرّح 50% من أصل 64,000 مشارك بأنهم ما زالوا يستخدمون SQL بشكل أو بآخر.

تعود شعبيتها، جزئيًا على الأقل، إلى بساطة اللغة، وتصميمها الأساسي للتعامل مع البيانات العلائقية، وإثباتها جدارتها وموثوقيتها في البحث عن البيانات وربطها وتصفيتها. باختصار، SQL ليست فقط حية وفعالة، بل مزدهرة بقوة ضمن مجتمع المطورين اليوم. والآن، دعنا نكتشف لماذا!

يُعد SQL Server هو النكهة المفضلة من SQL التي أستخدمها في أنشطتي اليومية في العمل، لذا ستتوافق الأمثلة أدناه مع معاييرها. أحد الأمور التي أجد نفسي أقوم بها كثيرًا هو تحديث سجلات متعددة داخل جدول. يمكنني القيام بذلك سجلًا تلو الآخر، ولكن SQL تمنحنا القدرة على تحديث سجلات متعددة (آلاف إن لم يكن عشرات الآلاف إذا لزم الأمر) دفعة واحدة من خلال جملة UPDATE.

يمكن استخدام جملة UPDATE لتحديث عمود واحد، أو مجموعة أكبر من السجلات (باستخدام الشروط)، و/أو الجدول بأكمله في قاعدة البيانات. يمكن أن تكون الشروط عبارة منطقية (boolean)، أو تحققًا من سلسلة نصية (string check)، أو تسلسلًا رياضيًا يؤدي إلى قيمة منطقية (أكبر من، أصغر من، إلخ). بينما قد يختلف الأمر قليلًا من نكهة SQL إلى أخرى، فإن الصيغة العامة هي كالتالي:

UPDATE table-name SET column-name = value[, column-name=value] [ WHERE condition ]

تشير الأقواس المعقوفة ([]) أعلاه إلى إضافات اختيارية للاستعلام.

  • ملاحظة هامة جدًا: بدون استخدام شرط WHERE، سيتم تحديث جميع السجلات في الجدول بمجرد تنفيذ الاستعلام. يجب توخي الحذر الشديد عند استخدام جملة UPDATE لتجنب فقدان البيانات أو تعديلها بشكل غير مقصود.

أمثلة عملية على استعلامات التحديث في SQL

كمجموعة بيانات لنا، سنستخدم هذا الجدول المسمى Work_Tickets:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustries.com 0.00 False 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 0.00 False 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 0.00 False 085569 17.5 0

تحديث بسيط بدون شروط: تعديل شامل للبيانات

إليك استعلام تحديث بسيط جدًا سيغير جميع حقول UnitCost إلى الرقم 131.6152:

UPDATE Work_Tickets SET UnitCost = 131.6152

لاحظ أنه لا يوجد شرط WHERE، لذلك سيتم تحديث كل سطر في الجدول، وستبدو مجموعة البيانات لدينا الآن كالتالي:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 False 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 False 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 131.6152 False 085569 17.5 0

تحديثات مشروطة: استهداف سجلات محددة

إليك استعلام بسيط مع جملة شرط واحدة:

UPDATE Work_Tickets SET Billed = true WHERE UnitCost <> 0.00

سيقوم هذا الاستعلام بتحديث حقل Billed ليصبح true في كل سطر يطابق الشرط الذي ينص على أن UnitCost لا يساوي 0.00. بعد تشغيل الاستعلام، ستبدو مجموعة البيانات كالتالي:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 True 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 True 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 131.6152 True 085569 17.5 0

أدناه استعلام نغير فيه قيمة ParentLineKey إلى السلسلة النصية '000134' حيث يتطابق كل من SalesOrderNum و WorkTicketNum مع السلاسل المعطاة.

UPDATE Work_Tickets SET ParentLineKey = '000134' WHERE SalesOrderNum = '00061358' and WorkTicketNum = '000933'

لذلك، سيتم استبدال 085569 في حقل ParentLineKey بـ 000134، وستبدو مجموعة البيانات لدينا الآن كالتالي:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 True 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 True 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 131.6152 True 000134 17.5 0

تحديث حقول متعددة في استعلام واحد

لنفترض أن لديك مجموعة بيانات أكبر بكثير من تلك التي نستخدمها حاليًا ولديك عدة حقول لتحديثها. سيكون من الممل والمجهد تحديثها باستخدام جمل UPDATE منفصلة. لحسن الحظ، من الممكن أيضًا تحديث عدة حقول دفعة واحدة باستخدام جملة UPDATE، طالما أننا نفصل أسماء الأعمدة بفاصلة:

UPDATE Work_Tickets SET UnitCost = 129.8511, Qty_Ordered = 72, Qty_Shipped = 72 WHERE SalesOrderNum = '00061358'

وهنا النتيجة مع الحقول المحدثة بعد تشغيل الاستعلام:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 True 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 True 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 129.8511 True 000134 72 72

استخدام جملة UPDATE مع الاستعلامات الفرعية (Subqueries)

الأمثلة المذكورة أعلاه مثالية إذا كنت تعمل مع مصدر بيانات واحد. ومع ذلك، فإن معظم بياناتك لن تكون مخزنة في جدول واحد. هنا يأتي دور استخدام UPDATE مع مصادر بيانات متعددة. تتغير صيغة تحديث عمود/جدول قليلًا إذا أردنا جلب بيانات من جدول آخر:

UPDATE table-name SET column-name = (SELECT column name(s) FROM table2-name WHERE condition(s)) [ WHERE condition ]

وهنا الجدولان اللذان سنستخدمهما لهذا الاستعلام – جدول Work_Tickets:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 True 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 True 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 129.8511 True 000134 72 72

وجدول Customer_Info:

Name Industry Code Address City Discount PhoneNumber Email
Wayne Enterprises Defense,weaponry,aerospace,enginerring NULL 1631 Dark Knight Way Gotham 19.75 5556614000 sales@wayneindustires.com
Stark Industries Defense,weaponry,protection 1251 5641 Iron Dr Undisclosed 19.73 9993126156 contact@starkindustries.com
Acme Corp Comedy,laughter,animation 1252 24569 Smiling St Toon Town 17.53 3216549877 animation@acmetoons.com

تبدو جملة UPDATE مع استعلام فرعي كالتالي:

UPDATE Customer_Info SET Code = (SELECT Customer_Code FROM Work_Tickets WHERE Work_Tickets.Customer_Contact = Customer_Info.Email) WHERE Code IS NULL

سيقوم هذا المثال بتحديث حقل Code في جدول Customer_Info حيث يتطابق عنوان البريد الإلكتروني من كلا الجدولين، وحيث يكون حقل Code فارغًا (NULL). وهذا ما سيبدو عليه جدول Customer_Info الخاص بنا الآن:

Name Industry Code Address City Discount PhoneNumber Email
Wayne Enterprises Defense,weaponry,aerospace,enginerring 1250 1631 Dark Knight Way Gotham 19.75 5556614000 sales@wayneindustires.com
Stark Industries Defense,weaponry,protection 1251 5641 Iron Dr Undisclosed 19.73 9993126156 contact@starkindustries.com
Acme Corp Comedy,laughter,animation 1252 24569 Smiling St Toon Town 17.53 3216549877 animation@acmetoons.com

الخلاصة التقنية

آمل أن يكون هذا المقال قد قدم لك فهمًا شاملًا لكيفية عمل جملة UPDATE في SQL. لقد أصبحت الآن جاهزًا لكتابة استعلامات SQL UPDATE الخاصة بك باحترافية. إن إتقان هذه الجملة أمر بالغ الأهمية لأي مطور يتعامل مع قواعد البيانات، حيث تتيح التحكم الدقيق في البيانات وتحديثها بكفاءة عالية، سواء كانت لتصحيح خطأ بسيط أو لتطبيق تغييرات واسعة النطاق عبر سجلات متعددة. تذكر دائمًا أهمية استخدام شرط WHERE بحذر لتجنب التحديثات غير المقصودة التي قد تؤثر على سلامة بياناتك. استمر في الممارسة والتجربة، وستجد أن SQL أداة لا غنى عنها في ترسانتك التقنية.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *