درآمدی بر زبان SQL (بخش دوم)

درآمدی بر زبان SQL (بخش دوم)

در قسمت اول این سری مقالات تحت عنوان درآمدی بر زبان SQL (بخش اول)، با زبان SQL و یکی از مهمترین دستورات آن (SELECT) آشنا شدیم. حال در این پُست با دستوراتی که برای دستکاری داده‌ها در دیتابیس به کار می‌روند که اصطلاحاً به آن‌ها DML می‌گویند، آشنا خواهیم شد.

دستور INSERT INTO
برای ثبت رکوردی جدید در یک جدول، از دستور INSERT INTO به شکل زیر می‌توان استفاده نمود:

INSERT INTO table_name (column1, column2, column3, …) VALUES (value1, value2, value3, …);

و یا در صورتی که بخواهیم تمام فیلدهای جدول را مقداردهی کنیم، دیگر نیازی به ذکر نام تک‌تک ستون‌ها نبوده به طوری که در این صورت خواهیم داشت:

INSERT INTO table_name VALUES (value1, value2, value3, …);

به‌ عنوان مثال، برای اضافه کردن یک دانشجوی جدید در جدولی تحت عنوان students داریم:

INSERT INTO students VALUES (null, 'Parviz', 'Mashhad', '87597704', 28);

در توضیح کوئری فوق بایستی گفت از آنجایی‌ که فیلد id به صورت خودکار هنگام ایجاد یک رکورد جدید مقداردهی می‌شود، بنابراین در اینجا null (به معنی خالی یا تُهی) برایش در نظر گرفته‌ایم تا خودِ DBMS آن را مقداردهی کند (در آموزش‌های آتی دربارهٔ اینکه چه‌طور می‌توان یک فیلد را به صورت خودکار یا اصطلاحاً Auto Increment هنگام ایجاد یک رکورد جدید مقداردهی کرد، صحبت خواهیم نمود.)

دقت داشته باشید که در اینجا تمامی فیلدهای جدول students مقداردهی شده‌اند، بنابراین نیازی به ذکر نام فیلدها نیست ولی اگر بخواهیم فقط فیلدهای شمارهٔ آیدی، نام و سن را در رکورد جدید مقداردهی کنیم، باید اسامی فیلدها را به ترتیبی که در ادامه مشاهده می‌‌کنید، ذکر نماییم:

INSERT INTO students (id, name, age) VALUES (null, 'Saeid', 31);

دستور UPDATE
برای ویرایش مقادیر یک رکورد در جدول، از دستور UPDATE به شکل زیر استفاده می‌کنیم:

UPDATE table_name SET column1 = value1, column2 = value2, … WHERE condition;

به‌ عنوان مثال، در جدول students برای تغییر مقدار فیلد name تمامی رکوردهایی که سن آن‌ها برابر با ۲۵ است، می‌توان از کوئری زیر استفاده نمود:

UPDATE students SET name = 'Amir' WHERE age = 25;

در نظر داشته باشید با توجه به اینکه WHERE اصطلاحاً یک Clause (بَند) است که در اینجا مورد استفاده قرار گرفته است، لذا این احتمال وجود دارد که چندین رکورد دارای سن ۲۵ باشند که در این صورت مقدار فیلد name در چندین رکورد از جدول با همین یک دستور آپدیت می‌شود. همچنین توجه داشته باشیم که در صورت حذف WHERE از کوئری فوق، مقدار فیلد name در تمام رکوردهای جدول آپدیت خواهد شد.

همان‌طور که در مثال بالا مشاهده می‌کنید، به دلیل اینکه فیلد age در جدول students یونیک (منحصربه‌فرد) نیست، بنابراین ممکن است چندین رکورد که دارای مقدار ۲۵ در فیلد age خود هستند نامشان به Amir تغییر کند که این موضوع در مواردی که می‌خواهیم فقط یک رکورد خاص (مثلاً رکوردی که دارای نام Ali و شمارهٔ تلفن 33856972 است) را ویرایش کنیم، می‌تواند دردسرساز شود.

در اینجا بهترین راه‌حل می‌تواند استفاده از یک فیلدی باشد که دارای مقدار یونیک در هر رکورد از جدول است؛ بنابراین از یک فیلد یونیک که در اینجا فرض می‌کنیم فیلد id است، در کِلاز WHERE استفاده می‌کنیم (توجه کنید که در اکثر موارد مقدار فیلد id به‌ صورت خودکار توسط DBMS هنگام ایجاد یک رکورد جدید مقداردهی می‌شود و نیازی نیست تا دولوپر مقدار این فیلد را به‌ صورت دستی وارد کند.) حال با این توضیحات فرض کنید مقدار id رکورد مد نظر ما برای تغییر فیلد name، برابر با ۱ است که بدین ترتیب می‌توان کوئری به‌روزرسانی مد نظر خود را به‌ صورت زیر نوشت:

UPDATE students SET name = 'Amir' WHERE id = 1;

که در این صورت فیلد name اولین رکورد ثبت شده در دیتابیس مورد نظر آپدیت خواهد شد.

دستور DELETE
برای حذف یک رکورد هم به سادگی می‌توان از دستور DELETE به شکل زیر استفاده کرد:

DELETE FROM table_name WHERE condition;

همانند دستور UPDATE، در اینجا نیز می‌توان چندین رکورد و یا فقط یک رکورد را از جدول حذف کرد. به‌ عنوان مثال، برای حذف دیتای دانشجویی به نام Amir، باید از یک فیلد یونیک که در اینجا id است در بَند WHERE همانند کوئری زیر استفاده کرد:

DELETE FROM students WHERE id = 1;

توجه داشته باشید در صورتی که WHERE از این کوئری حذف گردد، تمام رکوردهای جدول پاک خواهند شد! اما در عین حال اِسکما (ساختار) کلی جدول شامل اَتریبیوت‌ها، ایندکس‌ها و دیتاتایپ هر فیلد بدون هیچ‌گونه تغییری در دیتابیس باقی خواهد ماند.