أمر DELETE في SQL: دليل شامل لحذف الصفوف من الجداول مع أمثلة عملية
لطالما كان العمل مع لغة الاستعلام الهيكلية (SQL) مصدر متعة لي، سواء في مشاريعي المهنية أو الشخصية. إن بساطتها ووضوحها يجعلانها جذابة للغاية، خاصةً فيما يتعلق بحدودها الواضحة والدقيقة حول ما تسمح به اللغة وما لا تسمح به من ناحية بناء الجملة. تم تصميم SQL بطريقة واضحة وموجزة، حيث يحدد إدخال المستخدم البيانات التي يتم إرجاعها. وعلى الرغم من احتفالي بمرونتها وقدرتها على الصمود (تم إنشاء SQL في عام 1974 وإصدارها الأولي في عام 1986) داخل مجتمع المطورين، إلا أنني أدرك أن التعامل مع البيانات يمكن أن يكون مرهقًا ومخيفًا، حتى فيما يتعلق بالأساسيات. أنا هنا لإلقاء الضوء على أحد هذه الأساسيات في التعامل مع البيانات: حذف صف كامل من البيانات. لن نتطرق إلى عملية إنشاء جدول في SQL أو تعبئته بالبيانات/تحديثها في هذا المقال، ولكن يمكنك الرجوع إلى مقالاتنا الأخرى لمزيد من التفاصيل أو للتذكير. الآن، لننتقل إلى الجزء الممتع – دعنا نبدأ في حذف البيانات من الجداول!
نظرة عامة على أمر DELETE في SQL
سنستخدم الجدول التالي، الذي يحمل اسم Cute_Doggos، كمثال لنا لبدء إزالة البيانات منه:
الاسم (Name) |
اللون (Color) |
السلالة (Breed) |
العمر (Age) |
الوزن (Weight) |
الطول (Height) |
الطعام المفضل (Fav_Food) |
اللعبة المفضلة (Fav_Toy) |
ما لا يحبه (Dislikes) |
الحساسية (Allergies) |
|---|---|---|---|---|---|---|---|---|---|
ديزي (daisy) |
أحمر (red) |
داشهند قياسي (standard dachshund) |
سنة واحدة (1 yr) |
14 | 6 | طعام جاف بنكهة السلمون (salmon flavored kibble) |
كرة صرير (squeeky ball) |
الطيور التي تحلق فوق الفناء، القطط، الحمامات، النظافة (birds flying over the yard cats, baths, cleanliness) |
لا يوجد (none known) |
وينستون (winston) |
أسود/تان (black/tan) |
روتويلر (rottweiler) |
3 سنوات (3 yrs) |
41 | 17 | أي شيء حرفياً (literally anything) |
حبل شد (rope tug) |
البقاء بعيداً عن الأريكة، الاستماع، التصرف بلباقة، عدم سيلان اللعاب على كل شيء (staying off the couch listening, behaving, not slobbering on everything) |
لا يوجد (none known) |
سامي (sammie) |
عسلي فاتح (light honey) |
جولدن ريتريفر (golden retriever) |
9 سنوات (9 yrs) |
46 | 19 | طعام جاف بنكهة اللحم البقري (beef flavored kibble) |
سريره (her bed) |
الجراء المشاكسة (rambutcious puppies) |
لا يوجد (none known) |
بينيلوبي (penelope) |
رمادي وأبيض (gray and white) |
هاسكي (husky) |
9 أشهر (9 months) |
16 | 12 | أحذية قديمة (old shoes) |
خارج القفص (outside kennel) |
لا يوجد (none known) |
لا يوجد (none known) |
كما خمنت، هذه بيانات وهمية من جدول قمت بإنشائه من العدم 🙂 ومع ذلك، آمل أن توضح البيانات بشكل كافٍ لأغراضنا. وكما هو الحال مع معظم الجوانب التقنية، لا يضر أبدًا التحقق من الوثائق الرسمية. إذا كنت ترغب في ذلك، فإن مايكروسوفت لديها معلومات متعمقة رائعة حول بيان SQL Delete.
ننتقل الآن إلى جوهر هذا المقال – حذف البيانات. هذا الإجراء بسيط بقدر بساطة اسمه، وإليك بناء الجملة الأساسي:
DELETE FROM name_of_table
باستخدام بناء الجملة هذا، ستقوم بحذف جميع صفوف البيانات داخل الجدول بأكمله. لذا، بالنسبة لجدول الأمثلة أعلاه، سيبدو الاستعلام كما يلي:
DELETE FROM Cute_Doggos
قد يكون هذا هو الغرض المقصود منك، وكلما كتبت SQL لفترة أطول، ستجد المزيد من الحالات لاستخدام بيان الحذف بهذه الطريقة. لقد استخدمت هذا البيان عدة مرات لمسح جدول بعد تعبئته ببيانات الاختبار. يتيح لنا هذا النهج الاحتفاظ بأسماء الأعمدة وأنواع البيانات والفهارس وهيكل الجدول العام سليمًا دون حذف الجدول الفعلي.
كملاحظة جانبية، إذا كان الغرض المقصود منك هو حذف جميع الصفوف داخل جدول، فإن النهج الأسرع هو استخدام بيان TRUNCATE TABLE لأنه يستخدم موارد نظام أقل بكثير.
أمثلة على استعلامات الحذف (DELETE Queries)
في الغالبية العظمى من الأوقات، عندما تستخدم وظيفة الحذف، سترغب في أن تكون أكثر استهدافًا في نهجك. لذلك، سنضيف شرطًا، وسيبدو بناء الجملة كما يلي:
DELETE FROM name_of_table WHERE conditions_exist
باستخدام جدول الكلاب أعلاه، سيبدو استعلامنا هكذا:
DELETE FROM Cute_Doggos WHERE dbo.Cute_Doggos.Height > 18
سيؤدي هذا إلى إزالة جميع الإدخالات من جدولنا التي تطابق شرط أن يكون الطول (Height) أكبر من 18. وإذا كنت تستخدم Microsoft SQL Server Management Studio، فستحصل على رسالة إرجاع مثل هذه:
(1 row affected)
إذا كنت ترغب في رؤية صفوف البيانات التي تم حذفها (لأغراض التسجيل، والمؤشرات المرئية للمستخدمين، وما إلى ذلك)، يمكننا استخدام بيان OUTPUT للقيام بذلك. بعد تطبيق الاستعلام أعلاه، سيبدو جدولنا الآن هكذا (مع افتراض أن sammie كانت هي التي تم حذفها لأن طولها 19):
الاسم (Name) |
اللون (Color) |
السلالة (Breed) |
العمر (Age) |
الوزن (Weight) |
الطول (Height) |
الطعام المفضل (Fav_Food) |
اللعبة المفضلة (Fav_Toy) |
ما لا يحبه (Dislikes) |
الحساسية (Allergies) |
|---|---|---|---|---|---|---|---|---|---|
ديزي (daisy) |
أحمر (red) |
داشهند قياسي (standard dachshund) |
سنة واحدة (1 yr) |
14 | 6 | طعام جاف بنكهة السلمون (salmon flavored kibble) |
كرة صرير (squeeky ball) |
الطيور التي تحلق فوق الفناء، القطط، الحمامات، النظافة (birds flying over the yard cats, baths, cleanliness) |
لا يوجد (none known) |
وينستون (winston) |
أسود/تان (black/tan) |
روتويلر (rottweiler) |
3 سنوات (3 yrs) |
41 | 17 | أي شيء حرفياً (literally anything) |
حبل شد (rope tug) |
البقاء بعيداً عن الأريكة، الاستماع، التصرف بلباقة، عدم سيلان اللعاب على كل شيء (staying off the couch listening, behaving, not slobbering on everything) |
لا يوجد (none known) |
بينيلوبي (penelope) |
رمادي وأبيض (gray and white) |
هاسكي (husky) |
9 أشهر (9 months) |
16 | 12 | أحذية قديمة (old shoes) |
خارج القفص (outside kennel) |
لا يوجد (none known) |
لا يوجد (none known) |
الشرط الذي نحدده هو اختيارنا بالكامل، وإذا كان ذلك ضيقًا جدًا لاحتياجاتك، فهناك خيارات أخرى. لنفترض أنك لا تهتم بالسجلات المحددة التي تزيلها، بل تحتاج فقط إلى إزالة عدد معين من السجلات في الجدول:
DELETE TOP 2 FROM Cute_Doggos
قد تعتقد أن هذا الاستعلام سيؤدي إلى إزالة أول سجلين في جدولك – وأنت لست بعيدًا جدًا عن الحقيقة. المشكلة الوحيدة هي أنه نظرًا لأن SQL يخزن السجلات بترتيب عشوائي، فإن بناء الجملة هذا سيؤدي إلى إزالة سجلين عشوائيين (2 RANDOM records) من الجدول.
إذا كنت تبحث عن إزالة نسبة مئوية من السجلات، يمكن لـ SQL القيام بذلك أيضًا:
DELETE TOP 25 PERCENT FROM Cute_Doggos
مرة أخرى، سيؤدي هذا الاستعلام إلى حذف سجلات عشوائية (RANDOM records). في مثالنا، بما أن لدينا 4 سجلات، فإن هذا الاستعلام سيحذف سجلًا عشوائيًا واحدًا (4 * 0.25 = 1).
كملاحظة جانبية أخيرة، عند استخدام الكلمة المفتاحية TOP، لا يمكننا استخدام عبارة ORDER BY بسبب عشوائية تخزين السجلات.
خاتمة
الآن بعد أن رأيت بيان DELETE قيد التنفيذ، أصبحت جاهزًا للانطلاق وحذف جميع البيانات من جميع الجداول! ربما لا تفعل ذلك، فقد يؤدي ذلك إلى عطلة نهاية أسبوع طويلة من الاستعادة من النسخ الاحتياطية 🙂 على أي حال، أنت الآن جاهز لبدء استخدامه بشكل جيد.
إذا وجدت هذا المقال مفيدًا، فلا تتردد في استكشاف المزيد من المحتوى التقني على منصة قيد.
الخلاصة التقنية
يُعد أمر DELETE في SQL أداة قوية وضرورية لإدارة البيانات، ولكنه يتطلب فهمًا دقيقًا وحذرًا في الاستخدام. بينما يوفر المرونة اللازمة لإزالة صفوف محددة بناءً على شروط معقدة باستخدام عبارة WHERE، يجب الانتباه إلى أن استخدامه بدون شروط سيؤدي إلى مسح الجدول بالكامل. البديل الأسرع لمسح جدول كامل هو TRUNCATE TABLE الذي يستهلك موارد أقل. كما أن استخدام TOP مع DELETE يوفر خيارات لحذف عدد أو نسبة مئوية من السجلات، ولكن يجب إدراك أن هذه العملية تتم بشكل عشوائي ولا يمكن التحكم بترتيب الحذف باستخدام ORDER BY. الفهم العميق لهذه الفروقات يضمن سلامة البيانات وكفاءة عمليات إدارة قواعد البيانات.