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


در این مطلب از مجله فرادرس درباره دستور Insert در SQL صحبت میکنیم و روش استفاده از این دستور را برای وارد کردن ردیفهای جدید داده در جدول موجود بررسی خواهیم کرد. از سینتکس پایه برای استفاده از این دستور شروع میکنیم تا به مثالهایی از روشهای مختلف استفاده دستور Insert در SQL برسیم. از دستور Insert برای وارد کردن سطرهای جدیدی از دادهها به جدولی در پایگاه داده استفاده میشود. تقریبا همه سیستمهای مدیریت پایگاه داده رابطهای یا RDBMS-ها این کوئری SQL را برای اضافه کردن رکوردها به جدول فراهم کردهاند.
هر مقداری در رکوردهایی که به کمک این دستور به جدولها وارد میکنیم باید با نوع دادهی ستونی متناظر آن مقدار همخوانی داشته باشد و محدودیتهای ستون را -اگر وجود داشته باشند- مراعات کند. تعداد مقادیری که با استفاده از عبارت Insert به جدول ارسال شدهاند باید با تعداد ستونهای جدول یا ستونهایی که در کوئری ذکر شدهاند، همخوانی داشته باشند. اگر هر کدام از این شرایط تامین نشوند، این عبارت پیغام خطا تولید خواهد کرد.
معرفی دستور Insert در SQL
INSERT کوئریی در SQL است که برای وارد کردن داده در جدولها بهکار میرود. دستور Insert در SQL برای وارد کردن رکوردهای جدید، بهصورت اضافه کردن «سطرها»ی (Rows) جدید با مقادیر داده به انتهای جدول کار میکند. ردیف در جدول، معادل کلمه سطر است، هر ردیف یا سطر معادل یک رکورد در پایگاه داده است. در این مطلب از هردو حالت کلمه استفاده شده است.
SQL در درجه اول، «زبان منطق اطلاعات» (Information-Logical Language) است که برای تعریف، تغییر و واکشی دادههای ذخیره شده در پایگاههای دادهی رابطهای طراحی شده است. بهطور کلی، SQL به عنوان «زبان برنامهنویسی ناقص تورینگ» (Turing Incomplete Programming Language) در نظر گرفته میشود. زبان برنامهنویسی تورینگ کامل به زبانهایی گفته میشود که قابل برنامهریزی برای انجام هر وظیفهای باشند و از آنجا که زبان برنامهنویسی SQL قادر به برنامهنویسی برای انجام همه وظایف نیست و فقط برای مدیریت پایگاه داده قابل استفاده است به عنوان زبان برنامهنویسی ناقص در نظر گرفته میشود، اما همزمان استاندارد زبانی که توسط دستورالعمل SQL/PSM تعریف شده است، احتمال به وجود آمدن «افزونههای رویهای» (Procedural Extensions) را برای این زبان برنامهنویسی مختص به پایگاههای داده رابطهای، فراهم میکند.

سینتکس پایه برای دستور INSERT INTO TABLE در SQL
سینتکس عبارت INSERT در SQL، اضافه کردن ردیفها به جدول را به وسیله پرکردن آنها با مقادیر دادهای، ممکن میکند. در زمان استفاده از عبارت INSERT ، هم نام ستونها را باید وارد کنید و هم مقادیری که قرار است در آن ستونها وارد شوند.
سینتکس این عبارت بهصورت کلی شبیه مثال زیر خواهد بود.
1INSERT INTO TableName (Column1, Column2, Column3, ...)
2VALUES (ColumnValue1, ColumnValue2, ColumnValue3, ...);
سینتکس عبارت INSERT در SQL، شامل مثال بالا میشود اما فقط محدود به اینها نیست. در ادامه نگاه دقیقتری به انواع مختلف این کوئری خواهیم انداخت.
وارد کردن داده در ستون های مشخص شده
مواردی وجود دارند که میخواهید مقادیری را فقط در ستونهای مشخصی در جدول وارد کنید. برای انجام این کار، باید مقادیر مورد نظر را در کد خود مشخص کنید.
1INSERT INTO TableName (Column1, Column3)
2VALUES ('ColumnValue1', 'ColumnValue3');
عبارت SQL بالا رکورد جدیدی را در ردیف آخر به جدول اضافه خواهد کرد، اما فقط در ستونهای مشخص شده اطلاعات وارد میکند و باقی ستونها برای این رکورد خالی خواهند بود.
وارد کردن داده در همه ی ستون ها
اگر میخواهید در همه ستونهای جدول داده وارد کنید، نیازی به وارد کردن نام همه ستونها در کوئری SQL نیست. اگرچه ترتیب مقادیری که به کوئری میدهید بسیار مهم است. حتما مطمئن شوید که اطلاعات مورد نظرتان را درباره رکورد با همان ترتیبی که ستونها روی جدول SQL قرار دارند وارد کنید. همانطور که در زیر نمایش دادهایم از سینتکس دستور INSERT INTO استفاده کنید.
1INSERT INTO TableName
2VALUES (ColumnValue1, ColumnValue2, ColumnValue3, ...);
فرمان INSERT INTO در SQL با مقادیر پیش فرض
موضوع بعدی که در این مقاله از مجله فرادرس بررسی خواهیم کرد، ویژگی دیگری برای دستور Insert در SQL است. سینتکس این عبارت دستوری به شکل INSERT ... DEFAULT VALUES است. در این عبارت یک رکورد مجزا به جدولی وارد میشود با این نکته که فقط شامل مقادیر پیشفرضDEFAULT برای هر ستون است. این عبارت باعث میشود مقادیر خالی در ستونها با مقادیر پیش فرض جایگزین شوند زیرا این ستونها نباید خالی بمانند.
1INSERT INTO TableName
2DEFAULT VALUES;
سینتکس این عبارتINSERT ... DEFAULT VALUES برای رزرو ردیف در جدول پایگاه داده کاربرد دارد چراکه ممکن است در آینده، دادهای را در آنجا جایگذاری کنید. بعدا، به راحتی میتوانید با اجرای دستور UPDATE در همان تراکنش مقدار مورد نظر خود را در ردیف مورد نظرتان جایگزین کنید.

مثالهایی از فرمان INSERT INTO TABLE
در مثالی که در زیر آوردهایم، میخواهیم مقادیری که در ادامه میآیند را در جدول کارمندانEmployees وارد کنیم، ستونهای این جدول شامل نامName ، آدرسAddress ، شهرCity ، ZIP Code ، ایالتState و کشورCountry میشوند.
1INSERT INTO Employees (Name, Address, City, ZIP_Code, State, Country)
2VALUES ('Jordan Sanders', '2819 Lexington Way', 'Woodland', '95695', 'CA', 'USA');
در نتیجه میبینیم که ردیف دیگری به انتهای جدول کارمندانEmployeesاضافه شده است.

استفاده از عبارت INSERT برای وارد کردن یک رکورد
بهطور کلی، روش استفاده از دستور Insert در SQL، برای وارد کردن رکوردها به صورت مجزا و یک به یک در جدولهای پایگاه داده اختلاف ظاهری چندانی با مثالهایی که در بالا زدهایم ندارد.
موقعیتی را فرض کنید که میخواهید فقط یک رکورد را به جدولی اضافه کنید، فقط نیاز خواهید داشت مقادیری را که میخواهید تغییر کنند یا اضافه کنید، برای عبارت دستوری مشخص کنید. کوئری چیزی شبیه دستوری که در زیر نوشتهایم خواهد بود.
1INSERT INTO Employees (Column3)
2VALUES (ColumnValue3);
استفاده از عبارت INSERT برای وارد کردن چندین رکورد هم زمان
برای استفاده از دستور Insert در SQL به صورت گروهی، سینتکس SQL Server این امکان را میدهد که به صورت همزمان، دادهها را در چندین ردیف از جدول وارد کنید. اگرچه، در حالت همزمان، عبارتINSERT میتواند فقط روی یک جدول مجزا اجرا شود و نمیتوان از این دستور برای وارد کردن همزمان اطلاعات روی چندین جدول استفاده کرد. بنابراین، این امکان وجود ندارد که با این سینتکس، دادهها را به جداول مختلفی حتی درون یک پایگاه داده در حالت همزمان اضافه کنیم.
1INSERT INTO TableName (
2 RowName1,
3 RowName2,
4 RowName3
5)
6VALUES
7 (
8 'Value1_for_Row1',
9 'Value2_for_Row1',
10 'Value3_for_Row1'
11 ),
12 (
13 'Value1_for_Row2',
14 'Value2_for_Row2',
15 'Value3_for_Row2'
16 ),
17 (
18 'Value1_for_Row3',
19 'Value2_for_Row3',
20 'Value3_for_Row3'
21 );
در کوئری بالا، بهصورت همزمان درحال اضافه کردن ۳ ردیف که هرکدام ۳ ستون دارند، به جدول مجزایی هستیم. برای اجرای صحیح دستور، مقادیر هر ردیف را با پرانتز از هم جدا میکنیم.
استفاده از دستور SELECT در عبارت INSERT INTO
برای استفاده از دستور Insert در SQL با توجه به جایگاههای مختلف، روشهای مختلفی نیز وجود دارد. اگر بهدنبال کوئری SQL مناسبی برای وارد کردن همه ردیفها از جدولی به جدولی دیگر هستید، استفاده از عبارت دستوری INSERT INTO SELECT میتواند بسیار مفید واقع شود. این دستور بسیار ساده از دادهها در جدولی «رونوشت» (Copy) تهیه میکند و در جدولی دیگر «جایگذاری» (Paste) میکند. این کار بدون گذاشتن کوچکترین اثر مخربی روی دادههای موجود در جدول دوم صورت میگیرد.
نمونه کد از دستور INSERT INTO SELECT
در ادامه مثالی از اجرای این دستور و انتقال اطلاعات از یک جدول به جدول دیگر را خواهیم دید.
1INSERT INTO TableName2 (Column1, Column2, Column3, ...)
2SELECT Column1, Column2, Column3, ...
3FROM TableName1
4WHERE Condition;
درحقیقت کوئری چیزی شبیه به کد زیر خواهد بود که با اطلاعات مثال خود به این شکل پُر کردهایم.
1INSERT INTO Employees (Name, Address, City)
2SELECT Name, Address, City
3FROM Applicants
4WHERE Country='USA';
اگرچه، سینتکس این دستور نسبتا سرراست و بدون پیچیدگیهای اضافه است اما باید در نظر داشته باشید که نوع دادههای ستونهای جدولهای مبدا و مقصد باهم یکسان باشند.
از کجا می توانیم مطمئن شویم که رکوردی را به صورت تکراری وارد نمی کنیم؟
با استفاده از شرایط SQL EXISTS میتوانید مطمئن شوید که اطلاعات تکراری وارد جدول پایگاه داده نمیکنید. برای مثال اگر جدولی به نام clients داشته باشید با کلید اصلیclient_id میتوانید از عبارت SQL INSERT به صورتی که در ادامه آوردهایم استفاده کنید.
1INSERT INTO clients
2(client_id, client_name, client_type)
3SELECT supplier_id AS client_id, supplier_name AS client_name, 'advertising' AS client_type
4FROM suppliers
5WHERE NOT EXISTS (SELECT *
6 FROM clients
7 WHERE clients.client_id = suppliers.supplier_id);
این عبارت SQL INSERT چندین رکورد را به همراه یک «زیر انتخاب» (Subselect) وارد جدول میکند.
SubSelect: زیرانتخاب یا Subselect در SQL به معنای استفاده از «جستوجوی درونی» (Inner Query) درون «جستوجوی بیرونی» (Outer Query) است. با استفاده از Subselect، میتوانید نتایج جستوجو را به عنوان ورودی برای جستوجو دیگری استفاده کنید.
اگر میخواهید که فقط یک رکورد را وارد کنید و این دستور شرطی را برای بررسی تکراری نبودن استفاده کنید، میتوانید از عبارت دستوری SQL INSERT بهصورتی که در ادامه آوردهایم استفاده کنید.
1INSERT INTO clients
2(client_id, client_name, client_type)
3SELECT 10345, 'IBM', 'advertising'
4FROM dual
5WHERE NOT EXISTS (SELECT *
6 FROM clients
7 WHERE clients.client_id = 10345);
استفاده از کوئری INSERT INTO در نرمافزار dbForge Studio برای SQL Server
نرمافزار dbForge Studio برای SQL Server همه چیزهایی که برای نصب و آماده سازی محیط توسعه SQL نیاز دارید را در اختیارتان قرار میدهد.
مثالی برای کار با نرمافزار dbForge Studio
در ادامه مثالی از نحوه وارد کردن اطلاعات و استفاده از دستور Insert در SQL را در فضای گرافیکی نرمافزار dbForge Studio خواهید دید. به روند کار برای وارد کردن اطلاعات مشتریها توجه کنید.
در ابتدا در پنل سمت چپ محیط گرافیکی به نام Database Explorer، روی جدولی که میخواهید در آن کار کنید راست کلیک کنید و مسیر روبهرو را دنبال کنید. -Generate Script As > INSERT > To New SQL Window- محتوای اسکریپتی که به صورت خودکار تولید شده داخل ویرایشگر کد SQL باز میشود.
بعد از آن در سند SQL، دادهها را برای ستونهای مشخص شده (first_name ، last_name و email ) در بخش مربوط به مقادیر VALUES وارد کنید.
سپس در بخش «نوار ابزار استاندارد» (Standard Toolbar)، روی دکمه اجرای دستور یا Execute کلیک کنید. عبارت دستوری مقادیر مربوط به «نام» (First Name)، «نام خانوادگی» (Last Name) و «ایمیل» (Email) مشتری جدید را در پایینترین خط از جدول وارد میکند.
سوالات پر تکرار
در ادامه به بررسی پر تکرارترین سوالاتی که توسط افراد مختلف درباره دستور Insert در SQL پرسیده شده است پرداختهایم، زیرا شاید برای شما هم پیش بیایند.
چه می شود اگر تعداد مقادیر دستور INSERT با تعداد ستون ها هم خوانی نداشته باشد؟
همانطور که قبلا اشاره کردیم، وقتی که از دستور Insert در SQL استفاده میکنید، تعداد ستونهای جدول باید با تعداد مقادیری که توسط دستور INSERT استفاده میشوند برابر باشند. البته میتوان مقادیر کمتری از تعداد ستونها را به دستور INSERT داد تا در جدول وارد کند اما تعداد بیشتر مقادیر باعث برگشتن پیغام خطا میشود.
چه می شود اگر در زمان استفاده از دستور INSERT محدودیت های ستون ها را نادیده بگیریم؟
وقتی که جدولهای SQL را میسازید، میتوانید محدودیتهایی را برای هر ستون اضافه کنید که به عنوان قوانینی برای ستونها درنظر گرفته میشوند. نمیتوان این قوانین را نادیده گرفت. به عنوان مثال، اگر برای ستونی قانون NOT NULL در نظر گرفته شده باشد. خالی گذاشتن این ستون به هنگام اعمال دستور INSERT باعث برگشتن پیغام خطا به کاربر میشود.

جمع بندی
در این مطلب از مجله فرادرس سعی کردیم که با دستور Insert در SQL آشنا شویم و انواع روشهای استفاده ازین دستور را تا حد امکان با مثال بررسی کنیم. فهمیدیم که اگر بخواهیم به جدول SQL خود داده وارد کنیم، میتوانیم از عبارت INSERT استفاده کنیم. بسیار مهم است که تعداد مقادیری که توسط دستور INSERT به جدول وارد میکنیم با تعداد ستونها هماهنگی داشته باشد و به محدودیتهایی که برای ستونهای جدول تعریف شدهاند پایبند باشیم در غیر این صورت با پیغام خطا روبهرو خواهیم شد. همچنین میتوان از عبارتهایINSERT وSELECT در کنار هم برای واردکردن اطلاعات از جدولی به جدول دیگر استفاده کرد.
از نرمافزار ویرایشگر کد مخصوص SQL Server به نام dbForge Studio استفاده کردیم. از آنجا که این نرمافزار شامل بهترین و حیاتیترین قسمتهایی است که برای ادیت و مدیریت پایگاههای داده لازم است به عنوان یکی از مناسبترین گزینههای در دسترس توسعه دهندگان شناخته میشود.