دستور Delete در SQL – از کاربرد تا نحوه استفاده به زبان ساده

۲۸۳ بازدید
آخرین به‌روزرسانی: ۱۲ اسفند ۱۴۰۲
زمان مطالعه: ۷ دقیقه
دستور Delete در SQL – از کاربرد تا نحوه استفاده به زبان ساده

این مطلب از مجله فرادرس را به بررسی دستور Delete در SQL اختصاص خواهیم داد. در این مطلب اطلاعات نسبتا کاملی درباره این دستور و نحوه کوئری نویسی برای حذف یک یا چندین ردیف از یک یا چندین جدول را خواهیم آموخت. همچنین عبارت‌های DELETE  و TRUNCATE  را مقایسه خواهیم کرد زیرا در نگاه اول، این عبارت‌ها احتمالا طوری به نظر می‌رسند که هر دو وظیفه یکسانی را انجام می‌دهند، اما تفاوت‌های حساس و پنهانی با یکدیگر دارند.

برای اینکه بتوانیم در این مطلب از مجله فرادرس تا اندازه کاملی همه زوایای دستور DELETE را بررسی کنیم، باید در ابتدا شناختی درباره دستور Delete در SQL پیدا کنیم. سپس با سینتکس پایه و کلمات کلیدی این دستور آشنا می‌شویم تا بتوانیم با توجه به انواع سناریوهایی که با آن‌ها روبه‌رو خواهیم شد کوئری دستور را گسترش دهیم. بعد مثال‌هایی از پیاده‌سازی کوئری این دستور را بررسی خواهیم کرد. به تفاوت کوچک ولی مهم بین بین دستورات TRUNCATE و  DELETE در SQL خواهیم پرداخت و در آخر شیوه استفاده از دستور Delete را در محیط گرافیکی نشان می‌دهیم.

دستور DELETE در SQL چیست؟

در ابتدا باید تعریفی از دستور Delete در SQL ارائه دهیم و هدفی که از اجرای این دستور دنبال می‌شود را مشخص کنیم. DELETE  کوئری است که یک یا چندین رکورد را از جدول در SQL Server حذف می‌کند. حتی می‌توان همه داده‌ها یا داده‌های مشخص شده برحسب شرطی که توسط عبارت WHERE  تعیین شده است، به وسیله این عبارت حذف کرد. توصیه شده است که وقتی از دستور DELETE استفاده می‌کنید، حتما به صورت دقیق به کوئری که نوشته‌اید توجه کنید و هشیارانه این دستور را اجرا کنید، زیرا این دستور داده‌ها را به صورت دائمی حذف می‌کند.

سینتکس پایه کوئری DELETE

شکل پایه‌ای دستور Delete در SQL Server را به ساده‌ترین صورت در کد زیر نمایش داده‌ایم.

1DELETE FROM <table_name>
2WHERE <condition>;

به توضیح پارامترهایی که در کد بالا استفاده شده‌اند در ادامه توجه کنید.

  • table_name  نام جدولی که می‌خواهید سطرهای آن را حذف کنید. توجه کنید که، هر سطر یا ردیف معادل یک رکورد اطلاعات در پایگاه داده ما هستند.
  • condition  شرطی برای اینکه فقط داده‌های لازم به حذف شدن را واکشی کنیم و باقی داده‌ها فیلتر شوند.
مردی با ذره بین در حال بررسی ساختمان داده

استفاده از داده ها همزمان با حذف

اگر کوئری می‌خواهید که رکوردهایی که قرار است حذف شوند را برای آخرین نمایش یا استفاده به کاربر برگرداند، می‌توانید به‌صورت زیر از دستور Delete در SQL استفاده کنید.

1DELETE FROM <table_name>
2WHERE <condition>
3RETURNING *;

مثال هایی از عبارت SQL DELETE

در ادامه مثالی آورده‌ایم تا نحوه استفاده از دستور Delete در SQL را برای حذف ردیفی از جدول تمرین کنیم. تصور کنید که جدولی درباره تاریخ تولد افراد تشکیل داده‌اید. تقریبا در بقیه بخش‌های این مطلب از جدولی که در پایین می‌بینید، برای اجرای نمونه‌کوئری‌ها استفاده خواهیم کرد.

datefirst_namelast_nameid
1976-09-28TomCrawford1
1990-10-05MiaChesterfield2
1987-10-10SallyColland3
1995-03-07PeterCromwell4
1986-04-23OliviaNutter5

برای اینکه از این جدول رکوردی حذف کنید، باید کوئری که در ادامه آورده‌ایم را اجرا کنید.

1DELETE FROM birthdays
2WHERE id=1;

بعد از اینکه کوئری بالا را اجرا کردید ردیفی که شماره id در آن برابر یک است از جدول حذف خواهد شد و در ادامه جدول به شکل زیر خواهد شد.

datefirst_namelast_nameid
1990-10-05MiaChesterfield2
1987-10-10SallyColland3
1995-03-07PeterCromwell4
1986-04-23OliviaNutter5

حذف فقط یک رکورد

می‌توانید فقط یک رکورد را با استفاده از دستور Delete در SQL با توجه به شرایط مشخص شده در عبارت WHERE  حذف کنید. بنابراین کوئری به شکل نوشته شده در پایین، خواهد بود.

1DELETE FROM birthdays
2WHERE id=4;

با اجرای این کوئری همانند اتفاقی که در بالا افتاد، رکوردی که id برابر با 4 داشته باشد از جدول Birthdays حذف خواهد شد.

حذف چندین رکورد

برای اینکه چندین سطر را از جدولی حذف کنید، می‌توانید از عملگر IN  استفاده کنید. برای نمونه به کد زیر دقت کنید.

1DELETE FROM birthdays
2WHERE id IN (1, 3, 5);

این کوئری همه سطرهایی را که id آن‌ها برابر با 1، 3 و 5 باشد را از جدول Birthdays حذف می‌کند. لطفا به سینتکسی که برای دستور Delete در SQL آمده در کد بالا توجه کنید، بعد از اینکه در خط اول مشخص کردیم در کدام جدول قصد اجرای عملیات حذف را داریم، در خط دوم، اول از همه عبارت WHERE  و بعد از آن نام ستون می‌آید id  سپس عملگر IN  و در آخر شماره یا مقدار سطرها در ستون id  داخل پرانتز می‌آیند، در حالی که با کاما از هم جدا شده‌اند.

چند همکار در حال کار با کامپیوتر در محیط کار

عملگرهای BETWEEN و AND

همچنین می‌توانید تعدادی از سطرها را به وسیله تعریف محدوده آن‌ها پاک کنید. این کار به کمک عملگرهای BETWEEN  و AND  انجام می‌شود. به عنوان مثال، درصورتی که بخواهید سطرهایی را حذف کنید که شماره id آن‌ها از 2 تا 5 باشد به صورت زیر اسکریپت خود را خواهید نوشت.

1DELETE FROM birthdays  
2WHERE id BETWEEN 2 AND 5

عملگر BETWEEN در بعضی از پایگاه‌های داده اعداد ابتدا و انتهای بازه را مشمول عملیات قبل از عملگر نمی‌کند، حتی در یک پایگاه داده بین نوع داده‌های مختلف می‌تواند رفتار متفاوتی داشته باشد. حتما قبل از نهایی کردن کوئری خود این موارد را بررسی کنید. از عملگر BETWEEN برای تعیین محدوده بین حروف الفبا و تاریخ و نوع داده‌های دیگری نیز می‌توانید استفاده کنید.

عملگرهای شرطی بزرگتر و کوچکتر

بجز عملگر BETWEEN گزینه‌های دیگری نیز هستند که می‌توان از آن‌ها برای حذف چندین رکورد استفاده کرد. از این عملگرها زمانی استفاده می‌شود که ابتدای محدوده مورد نظر برای حذف یا نگهداری داده‌ها مشخص است اما انتهای خاصی ندارند.برای مثال فرض کنید جدول تولد، دارای ستونی برای سن اشخاص هم باشد و می‌خواهیم افراد بالای ۲۵ سال یا به عبارتی رکوردهایی که مقدار ستون AGE آن‌ها بیشتر از 25 است را حذف کنیم. به عبارت زیر توجه کنید.

1DELETE FROM birthdays
2WHERE AGE > 25;

میبینیم که با کمک عملگر شرطی >  توانستیم چندین رکورد را به شرط وجود داشتن حذف کنیم. استفاده از عملگرهای شرطی هم جزو روش‌های حذف چندین رکورد است.

حذف همه رکوردها از جدول

به‌منظور اینکه همه داده‌های جدولی را با کمک دستور Delete در SQL پاک کنیم، فقط نیاز دارید که بسیار ساده دستور DELETE  را اجرا کنید. سینتکس کوئری به این صورت است که دستور DELETE در ابتدا اسکریپت نوشته می‌شود سپس از کلمه FROM  استفاده می‌کنیم و در آخر نام جدولی را وارد می‌کنیم که میخواهیم همه اطلاعات آن را پاک کنیم. در این مورد خاص عبارت WHERE  جایگاهی برای استفاده ندارد.

1DELETE FROM birthdays

این کوئری همه رکوردهای جدول Birthdays را حذف می‌کند.

حذف کردن ردیف های مرتبط باهم از چندین جدول مختلف

ردیف‌های مرتبط باهم از جداول مختلف با استفاده از عملگر JOIN  حذف می‌شوند. در این بخش، مثالی برای نمونه از عملیات حذف با کمک عبارت INNER JOIN  را بازبینی خواهیم کرد. فرض کنید که قرار است ردیف‌های مربوط به هم را در دو جدول مختلف -جدول‌های تولدها و مرخصی‌ها- حذف کنید. می‌توانید با اجرا کردن کوئری DELETE  که در ادامه آمده است، این مسئله را حل کنید.

1DELETE b, v
2 FROM birthdays b
3 INNER JOIN vacations v
4   ON b.id = v.birthdays_id
5 WHERE b.date = 1976-09-28;

عبارت آورده شده در بالا تمام ردیف‌هایی را که با شرط b.date = 1976-09-28  همخوانی داشته باشند، از جدول‌های Vacations و Birthdays حذف می‌کند.

تفاوت بین دستور TRUNCATE و دستور DELETE در SQL چیست؟

استفاده از دستور DELETE  تنها راه حذف کردن داده‌ها در SQL نیست. عبارت TRUNCATE  نیز برای انجام همچین وظیفه‌ای، البته با کمی تفاوت در عملکرد، وجود دارد. هر دو این دستورها برای عمل حذف کردن داده از جدول استفاده می‌‌شوند اما هرکدام ریزه‌کاری‌های مخصوص به خود را دارند.

تلاش کردیم تفاوت‌های اساسی بین دو دستور DELETE و TRUNCATE را در جدول زیر نمایش دهیم تا درک بهتری بر اساس تصویر به‌دست آورید.

TRUNCATEDELETE
دستور «زبان تعریف داده‌ها» (DDL | Data Definition Language) است.دستور «زبان دستکاری داده‌ها» (DML | Data Manipulation Language) است.
همه داده‌ها را از جدول حذف می‌کند.تمام داده‌ها یا با استفاده از عبارت WHERE داده‌های خاص را حذف می‌کند.
همه داد‌ه‌ها را به صورت هم‌زمان حذف می‌کند.رکورد‌ها را به صورت یک به یک در یک زمان حذف می‌کند.
در هر جدول به مجوز ALTER نیاز دارد.در هر جدول به مجوز DELETE نیاز دارد.
کل جدول را برای عملیات حذف کردن، قفل می‌کند.هر سطر را در جدول قفل می‌کند تا حذف شود.
کمترین میزان ثبت لاگ‌ها را دارد. به همین دلیل از عملیات DELETE بسیار سریع‌تر اجرا می‌شود.برای هر رکوردی که حذف می‌شود، یک بار عملیات ثبت حذف را در لاگ تراکنش وارد می‌کند. بنابراین، از عملیات TRUNCATE سرعت کمتری دارد.
همه سطرهای حذف شده از جدول را برنمی‌گرداند.همه سطرهای حذف شده از جدول را برمی‌گرداند.
نمی‌تواند رکوردها را با محدودیت کلید خارجی حذف کند.می‌تواند رکوردها را با محدودیت کلید خارجی حذف کند.

در پایین سینتکس پایه دستور TRUNCATE  در SQL را قرار داده‌ایم.

1TRUNCATE TABLE <table_name> 

تنها پارامتر این سینتکس عبارت از table_name است. این پارامتر محل قرارگیری نام جدولی که قرار است سطرها از آن پاک شوند را نشان می‌دهد.

استفاده از کوئری DELETE در محیط گرافیکی برای SQL Server

باید روش اجرای دستور Delete در SQL را در محیط‌های گرافیکی نیز بررسی کنیم. در واقع، این ابزارها معمولا ۳ روش جایگزین برای استفاده از این عبارت برای حذف داده‌ها از جدولی در پایگاه داده ارائه می‌دهند.

  • روش اول: استفاده از ویژگی «تکمیل کد» (Code Completion)
  • روش دوم: استفاده از قابلیت عملیاتی «قطعه کدها» (Code Snippet)
  • روش سوم: استفاده از گزینه «تولید اسکریپت» (Generate Script)

استفاده از ویژگی Code Completion

در روش استفاده از ویژگی تکمیل کد تلاش می‌کنیم که کدهای مربوط به کوئری را به‌صورت از پیش آماده شده استفاده کنیم.

  • مرحله اول: در ادیتور SQL شروع به نوشتن کلمه DELETE کنید. منو «کرکره‌ای» (Drop-Down) ظاهر خواهد شد.
  • مرحله دوم: روی گزینه DELETE دابل کلیک کنید.
انجام دستور Delete در SQL در محیط گرافیکی به روش اول
«برای مشاهده تصویر در اندازه اصلی، روی آن کلیک کنید»
  • مرحله سوم: کوئری را پر کنید و سپس بر روی دکمه Execute در «نوار ابزار استاندارد» (Standard Toolbar)، کلیک کنید.

استفاده از قابلیت عملیاتی Code Snippet

در روش استفاده از قابلیت عملیاتی قطعه کدها، با نوشتن هر کلمه کلیدی در ادیتور امکانات مربوط به آن کلمه‌کلیدی ظاهر می‌شود. به‌صورت زیر این مرحله را طی می‌کنیم.

  • مرحله اول: در ادیتور SQL شروع به نوشتن کلمه DELETE کنید. منو «کرکره‌ای» (Drop-Down) ظاهر خواهد شد.
  • مرحله دوم: روی گزینه DeleteFrom دابل کلیک کنید.
انجام دستور Delete در SQL در محیط گرافیکی به روش دوم
«برای مشاهده تصویر در اندازه اصلی، روی آن کلیک کنید»
  • مرحله سوم: فقط باید کوئری را برای همساز شدن با نیازمندی‌های خود اصلاح کنید و سپس بر روی دکمه Execute در نوار ابزار استاندارد، کلیک کنید.

استفاده از گزینه Generate Script

این روش به آپشنی خاص اشاره دارد. این آپشن برای هر دستوری در SQL از گزینه تولید خودکار اسکریپت استفاده می‌کند.

  • در مرورگر پایگاه داده SQL، روی جدول مورد نظر راست-کلیک کنید و طبق مسیر روبه‌رو پیش بروید.

Generate Script As > DELETE > To New SQL Window

انجام دستور Delete در SQL در محیط گرافیکی به روش سوم
«برای مشاهده تصویر در اندازه اصلی، روی آن کلیک کنید»
  • در سند SQL که باز شده است، کوئری را تنظیم کنید و سپس بر روی دکمه Execute در نوار ابزار استاندارد، کلیک کنید.

جمع بندی

حذف کردن رکوردها از جدول‌ها و پایگاه داده‌ها قسمت مهمی از مدیریت پایگاه‌های داده است. بعضی وقت‌ها داده‌های اشتباهی در جداول پایگاه داده وارد می‌کنیم یا داده‌های ما از تاریخ مصرف خود عبور می‌کنند و نیاز به اصلاح یا تغییردادن پیدا می‌کنند و شرایط دیگری همانند این‌ها، همه نیاز به استفاده از دستور Delete در SQL دارند. در این مطلب از مجله فرادرس تلاش کردیم که تا حد ممکن دستور Delete در SQL را تشریح کنیم و انواع موارد استفاده به همراه انواع روش‌های استفاده از آن را شرح دهیم.

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
devartSimplilearntutorialspoint
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *