ecosmak.ru

insert در sql چیست. دستور SQL INSERT INTO SELECT

با استفاده از SQL می توانید اطلاعات را از یک جدول به جدول دیگر کپی کنید.

دستور INSERT INTO SELECT داده ها را از یک جدول کپی می کند و آن را در جدول موجود وارد می کند.

دستور SQL INSERT INTO SELECT،

دستور INSERT INTO SELECT داده ها را از یک جدول انتخاب می کند و آن را در جدول موجود وارد می کند. هیچ یک از ردیف های موجود در جدول هدف تغییر نمی کند.

SQL INSERT INTO SELECT، Syntax

ما می توانیم تمام ستون ها را از یک جدول به جدول دیگر کپی کنیم:

درج کنید جدول 2
انتخاب * از میز 1؛

یا می‌توانیم فقط ستون‌هایی را که می‌خواهیم در جدول موجود دیگری کپی کنیم:

درج کنید جدول 2
(نام(های) ستونی)
انتخاب کنید نام(های) ستون
از جانب میز 1؛

نسخه آزمایشی پایگاه داده

در این آموزش از پایگاه داده معروف Northwind استفاده خواهیم کرد.

در زیر منتخبی از جدول "مشتریان" آمده است:

شناسه کاربرنام مشتریفرد تماسنشانیشهرکد پستییک کشور
1 آلفرد فوترکیست ماریا آندرس اوبره خ. 57 برلین 12209 آلمان
2 Ana Trujillo Emparedados y helados آنا تروخیلو آودا. de la Constitucion 2222 مکزیک D.F. 05021 مکزیک
3 آنتونیو مورنو تاکوریا آنتونیو مورنو ماتادروس 2312 مکزیک D.F. 05023 مکزیک

و انتخاب از جدول "تامین کنندگان":

SQL INSERT INTO SELECT، مثالها

کپی کردن تنها چند ستون از "تامین کنندگان" به "مشتریان":

کپی کردن فقط تامین کنندگان آلمانی به "مشتریان".

تیم ردیف هایی را به جدول اضافه می کندیا نمای جدول اصلی

دستور دستور Sql INSERT

درج دستور دستور


کلیدواژه ها و پارامترهای اصلی دستور INSERT
  • طرحواره- شناسه مجوز، معمولاً با نام برخی از کاربران مطابقت دارد
  • نمای جدول- نام جدولی که سطرها باید در آن درج شوند. اگر نما مشخص شده باشد، سطرها در جدول اصلی نما درج می شوند
  • subquery_1- یک پرس و جو فرعی که سرور به روشی مشابه یک view پردازش می کند
  • ستون- یک جدول یا ستون نمای که در آن مقدار عبارت برای هر ردیف درج شده وارد می شود ارزش هاییا فرعی؛ اگر یکی از ستون‌های جدول از این لیست حذف شود، مقدار ستون برای سطر درج شده، مقدار ستون پیش‌فرض است که هنگام ایجاد جدول تعریف شده است. اگر یک لیست ستون به طور کامل حذف شود، بند ارزش هاییا پرس و جو باید مقادیری را برای تمام ستون های جدول تعیین کند
  • ارزش های- رشته ای از مقادیر را تعریف می کند که در جدول یا view درج می شود. معنی باید در جمله تعریف شود ارزش هایبرای هر ستون در لیست ستون ها
  • subquery_2- یک پرسش فرعی که ردیف های درج شده در جدول را برمی گرداند. لیست انتخاب این سوال فرعی باید همان تعداد ستون را داشته باشد که لیست ستون بیانیه

بیانیه با عبارت ارزش هاییک ردیف به جدول اضافه می کند. این خط حاوی مقادیر تعریف شده توسط عبارت است ارزش های.
بیانیه با استعلام فرعیبه جای یک عبارت ارزش هایتمام سطرهای برگردانده شده توسط subquery را به جدول اضافه می کند. سرور پردازش می کند استعلام فرعیو هر سطر برگشتی را در جدول درج می کند. اگر پرس و جوی فرعی هیچ ردیفی را انتخاب نکند، سرور هیچ ردیفی را در جدول وارد نمی کند.
استعلام فرعیمی تواند به هر جدول یا نما، از جمله جدول ادعای هدف دسترسی داشته باشد . سرور بر اساس موقعیت داخلی ستون‌ها در جدول و ترتیب مقادیر عبارت، مقادیری را به فیلدهای ردیف‌های جدید اختصاص می‌دهد. ارزش هاییا در لیست انتخاب پرس و جو. اگر ستون‌هایی از فهرست ستون‌ها وجود نداشته باشد، سرور مقادیر پیش‌فرض تعریف شده در زمان ایجاد جدول را به آن‌ها اختصاص می‌دهد. اگر هر یک از این ستون‌ها دارای محدودیت NOT NULL باشد، سرور خطایی نشان می‌دهد که محدودیت نقض شده است و عبارت INSERT را لغو می‌کند.
هنگامی که یک دستور INSERT صادر می شود، هر راه اندازی INSERT تعریف شده روی جدول فعال می شود.

در مثال 1 درج کنید

درج کنیدبخش ارزش های(50، "محصولات"، "سان فرانسیسکو")؛

درج کنیدمشتریان (شهر، cname، cnum) ارزش های('لندن'، 'هافمن'، 2001)؛

در مثال 2 وارد کنید
دستور زیر داده های کارکنان شرکتی را که کمیسیون آنها بیش از 25 درصد درآمد است را در جدول پاداش کپی می کند:

درج کنیدجایزه SELECT ename, job, sal, comm FROM emp WHERE comm > 0.25 * sal;

در مثال 3 درج کنید
اگر نیاز به درج دارید خالی-value، باید آن را به صورت یک مقدار عادی به صورت زیر مشخص کنید:

درج کنیدارزش فروشندگان (1001,'Peel',NULL,12);

در مثال 4 وارد کنید
از این دستور می توان برای بازیابی مقادیر از یک جدول و قرار دادن آنها در جدول دیگر با استفاده از پرس و جو استفاده کرد. برای این کار کافی است جمله را جایگزین کنید ارزش هایبه درخواست مربوطه:

درج کنید Londonstaff SELECT * FROM Salespeople WHERE city = 'London';

MySQL INSERT

برای درج ردیف‌های جدید در پایگاه داده MySQL، استفاده کنید دستور INSERT، مثال های دستوری در زیر آورده شده است:
در مثال 1 درج کنید.
درج یک ردیف جدید در جدول table_name.

درج کنید

در مثال 2 وارد کنید.
درج یک ردیف جدید در جدول table_name که نشان دهنده درج داده ها در ستون های مورد نیاز ما است.

درج کنید table_name VALUES('1','165','0','name');

در پایگاه داده MySQLدرج چندین خط جدید با استفاده از یک دستور امکان پذیر است.
در مثال 3 درج کنید.
درج چند ردیف در جدول table_name.

درج کنیدجدول_نام (tbl_id، chislo، chislotwo، نام) VALUES ('1','159','34','name1')، ('2','14','61','name2')، ('3 ','356','8','name3');

آخرین به روز رسانی: 1396/07/13

برای اضافه کردن داده ها، از دستور INSERT استفاده کنید که دستور رسمی زیر را دارد:

درج نام جدول [(فهرست_ستون)] VALUES (مقدار1، مقدار2، ... مقدارN)

ابتدا عبارت INSERT INTO می آید، سپس در داخل پرانتز می توانید لیستی از ستون های جدا شده با کاما را مشخص کنید که داده ها باید به آنها اضافه شوند و در پایان، پس از کلمه VALUES، مقادیری که برای ستون ها اضافه می شود در لیست قرار می گیرند. پرانتز.

به عنوان مثال، فرض کنید پایگاه داده زیر قبلا ایجاد شده است:

ایجاد پایگاه داده productsdb; GO USE productsdb; محصولات جدول ایجاد کنید (ID INT IDENTITY PRIMARY KEY، نام محصول NVARCHAR(30) NOT NULL، سازنده NVARCHAR(20) NOT NULL، ProductCount INT DEFAULT 0، Price MONEY NOT NULL)

بیایید با استفاده از دستور INSERT یک خط به آن اضافه کنیم:

مقادیر محصولات را درج کنید ("iPhone 7"، "Apple"، 5، 52000)

پس از اجرای موفقیت آمیز در SQL Server Management Studio، پیام "1 ردیف(های) تحت تاثیر قرار گرفت" باید در قسمت پیام ظاهر شود:

شایان ذکر است که مقادیر ستون های داخل پرانتز پس از کلمه کلیدی VALUES به ترتیبی که آنها اعلام شده اند ارسال می شوند. به عنوان مثال، در عبارت CREATE TABLE بالا، می بینید که ستون اول Id است. اما از آنجایی که ویژگی IDENTITY برای آن مشخص شده است، مقدار این ستون به طور خودکار تولید می شود و می توان آن را حذف کرد. ستون دوم نشان دهنده ProductName است، بنابراین اولین مقدار، رشته "iPhone 7" به آن ستون ارسال می شود. مقدار دوم - رشته "Apple" به ستون سوم سازنده و غیره منتقل می شود. یعنی مقادیر به صورت زیر به ستون ها منتقل می شوند:

    نام محصول: "iPhone 7"

    سازنده: "Apple"

همچنین، هنگام وارد کردن مقادیر، می‌توانید ستون‌های فوری که مقادیر به آن‌ها اضافه می‌شوند را مشخص کنید:

درج در محصولات (نام محصول، قیمت، سازنده) VALUES ("iPhone 6S"، 41000، "Apple")

در اینجا مقدار فقط برای سه ستون مشخص شده است. علاوه بر این، اکنون مقادیر به ترتیب ستون ها منتقل می شوند:

    نام محصول: "iPhone 6S"

    سازنده: "Apple"

برای ستون‌های نامشخص (در این مورد ProductCount)، اگر ویژگی DEFAULT مشخص شده باشد، یک مقدار پیش‌فرض اضافه می‌شود، یا یک مقدار NULL. با این حال، ستون های نامشخص باید nullable یا دارای ویژگی DEFAULT باشند.

همچنین می توانیم چندین خط را به طور همزمان اضافه کنیم:

درج در محصولات VALUES ("iPhone 6"، "Apple"، 3، 36000)، ("Galaxy S8"، "Samsung"، 2، 46000)، ("Galaxy S8 Plus"، "Samsung"، 1، 56000)

در این صورت سه ردیف به جدول اضافه می شود.

همچنین، هنگام اضافه کردن، می‌توانیم تعیین کنیم که ستون باید یک مقدار پیش‌فرض با استفاده از کلمه کلیدی DEFAULT یا یک مقدار NULL داشته باشد:

درج در محصولات (نام محصول، سازنده، تعداد محصول، قیمت) VALUES ("Mi6"، "Xiaomi"، پیش فرض، 28000)

در این حالت، از مقدار پیش‌فرض ستون ProductCount استفاده می‌شود (اگر تنظیم شده باشد، اگر تنظیم نشده باشد، NULL).

اگر همه ستون‌ها دارای یک ویژگی DEFAULT هستند که یک مقدار پیش‌فرض را مشخص می‌کند، یا nullable هستند، می‌توانید مقادیر پیش‌فرض را برای همه ستون‌ها درج کنید:

مقادیر پیش‌فرض را در محصولات درج کنید

اما اگر جدول Products را بگیریم، چنین دستوری با خطا مواجه می شود، زیرا چندین فیلد ویژگی DEFAULT را ندارند و در عین حال مقدار NULL را مجاز نمی دانند.

سلام به همه! این مقاله در مورد اینکه چگونه می توانید صحبت خواهد کرد داده ها را به جدول اضافه کنیددر مایکروسافت SQL Server، اگر قبلاً حداقل کمی با زبان T-SQL آشنا هستید، احتمالاً متوجه شده اید که اکنون در مورد عبارت INSERT و همچنین نحوه استفاده از آن برای افزودن داده به جدول صحبت خواهیم کرد.

بیایید طبق معمول با کمی تئوری شروع کنیم.

عبارت INSERT در T-SQL

درج کنیدیک دستورالعمل T-SQL است که برای اضافه کردن داده ها به یک جدول طراحی شده است. ایجاد رکوردهای جدید از این دستورالعمل می توان هم برای افزودن یک ردیف به جدول و هم برای درج داده ها به صورت انبوه استفاده کرد. دستور INSERT برای درج داده نیاز به مجوز دارد ( درج کنید) به جدول هدف.

روش های مختلفی برای استفاده از عبارت INSERT روی داده ای که باید درج شود وجود دارد:

  • فهرست کردن مقادیر خاص برای درج؛
  • تعیین یک مجموعه داده به عنوان یک کوئری SELECT.
  • تعیین یک مجموعه داده در قالب فراخوانی رویه که داده های جدولی را برمی گرداند.

نحو ساده شده

درج [جدول] ( لیست ستون های ...) ارزش های ( فهرست ارزش ها ...) یا SELECT درخواست نمونهیا اجرا کنید روش

  • INSERT INTO دستوری برای افزودن داده به جدول است.
  • Table نام جدول هدفی است که می خواهید رکوردهای جدیدی را در آن وارد کنید.
  • لیست ستون لیستی از نام ستون های جدول است که داده ها در آن درج می شوند، که با کاما از هم جدا می شوند.
  • VALUES یک سازنده ارزش جدول است که با آن مقادیری را که در جدول وارد می کنیم مشخص می کنیم.
  • لیست مقادیر، مقادیری است که با کاما از هم جدا می شوند. آنها به ترتیبی که ستون ها در لیست ستون ها ظاهر می شوند فهرست می شوند.
  • SELECT یک پرس و جو برای انتخاب داده ها برای درج در جدول است. مجموعه نتایجی که پرس و جو برمی گرداند باید با لیست ستون ها مطابقت داشته باشد.
  • EXECUTE یک فراخوانی رویه برای به دست آوردن داده برای درج در جدول است. مجموعه نتیجه ای که رویه ذخیره شده برمی گرداند باید با لیست ستون ها مطابقت داشته باشد.

این تقریباً همان چیزی است که نحو ساده شده عبارت INSERT INTO به نظر می رسد؛ در بیشتر موارد، به این ترتیب رکوردهای جدید را به جداول اضافه می کنید.

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

همچنین باید به یاد داشته باشید که لیست ستون ها و لیست مقادیر به ترتیب باید شامل ستون های به اصطلاح مورد نیاز باشد؛ این ها ستون هایی هستند که نمی توانند حاوی مقدار NULL باشند. اگر آنها را مشخص نکنید و ستون دارای مقدار پیش فرض نباشد، خطایی رخ می دهد.

همچنین می خواهم توجه داشته باشم که نوع داده مقادیری که درج می کنید باید با نوع داده ستونی که این مقدار در آن درج می شود مطابقت داشته باشد یا حداقل از تبدیل ضمنی پشتیبانی کند. اما من به شما توصیه می کنم که نوع داده را کنترل کنید ( قالب) مقادیر، هم در لیست مقادیر و هم در کوئری SELECT.

تئوری بس است، بیایید به سراغ عمل برویم.

اطلاعات اولیه

برای افزودن داده به جدول، به خود جدول نیاز داریم، پس بیایید آن را ایجاد کنیم و سعی کنیم رکوردهایی به آن اضافه کنیم.

توجه داشته باشید! همه نمونه ها در Microsoft SQL Server 2016 Express اجرا خواهند شد.

CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, (100) NOT NULL, NOT NULL)

جدول تست ما حاوی لیستی از محصولات با قیمت خواهد بود.

همچنین در مثال‌ها از رویه‌ای استفاده می‌کنیم که یک مقدار جدول را برای افزودن داده به جدول برمی‌گرداند، بنابراین بیایید آن را نیز ایجاد کنیم.

ایجاد رویه TestProcedure در ابتدا نام محصول را انتخاب کنید، قیمت از انتهای TestTable

به عنوان مثال، داده ها را از جدول TestTable تازه ایجاد شده برمی گرداند.

توجه داشته باشید!

همانطور که متوجه شدید، خواندن این مطالب به معنای داشتن دانش زبان T-SQL است، بنابراین اگر چیزی برای شما واضح نیست، توصیه می کنم با مطالب زیر آشنا شوید:

مثال 1 - افزودن یک رکورد جدید به جدول با استفاده از سازنده مقدار جدول

ابتدا بیایید یک رکورد اضافه کنیم و فوراً به نتیجه نگاه کنیم. بیایید یک درخواست برای نمونه بنویسیم.

INSERT INTO TestTable(ProductName, Price) VALUES ("Computer", 100) GO SELECT * FROM TestTable

می بینید که بعد از نام جدول، نام ستون هایی را که داده ها را به آنها اضافه خواهیم کرد، با کاما از هم جدا کردیم، سپس کلمه کلیدی را مشخص کردیم. ارزش هایو در داخل پرانتز نیز به همین ترتیب، با کاما از هم جدا شده اند، مقادیری را که می خواهیم درج کنیم، نوشتیم.

بعد از دستور INSERT یک دستور SELECT نوشتم و آنها را با یک دستور GO جدا کردم.

حالا بیایید تصور کنیم که باید چند خط اضافه کنیم. برای این کار درخواست زیر را می نویسیم.

درج در TestTable(ProductName, Price) VALUES ("رایانه"، 100)، ("Keyboard"، 20)، ("Monitor"، 50) GO SELECT * FROM TestTable


مثال 2 - افزودن ردیف های جدید به جدول با استفاده از پرس و جو SELECT

اغلب اوقات نیاز به اضافه کردن داده های زیادی به یک جدول وجود دارد، به عنوان مثال، بر اساس یک پرس و جو انتخاب شده، به عنوان مثال. انتخاب کنید. برای انجام این کار، به جای VALUES، فقط باید درخواست را مشخص کنیم.

INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price FROM TestTable WHERE ID >


در این مثال، ما یک کوئری SELECT نوشتیم که داده‌ها را از جدول TestTable برمی‌گرداند، اما نه همه آن‌ها، بلکه فقط آنهایی که شناسه بزرگ‌تر از 2 دارند. و نتیجه در همان جدول TestTable درج شد.

به عنوان مثالی از اینکه چگونه می‌توانید رکوردها را بدون تعیین فهرستی از ستون‌ها به یک جدول اضافه کنید، بیایید یک پرس‌وجوی درج داده دیگری بنویسیم که دقیقاً همان کاری را که عبارت بالا انجام می‌دهد انجام می‌دهد، فقط ستون‌هایی را که قرار است درج شود فهرست نمی‌کند.

درج در TestTable SELECT نام محصول، قیمت از TestTable WHERE ID > 2 GO SELECT * FROM TestTable


در این مورد، ما مطمئن هستیم که در جدول TestTable ستون اول ProductName و دومی Price است، بنابراین می توانیم آن را به این صورت بنویسیم. اما باز هم در عمل بهتر است لیستی از ستون ها را مشخص کنید.

اگر متوجه شدید، در تمام مثال‌ها ستون Id را مشخص نکردم، اما آن را داریم، هیچ خطایی رخ نداده است، از آنجایی که این ستون دارای خاصیت IDENTITY است، به طور خودکار شناسه‌ها را تولید می‌کند، بنابراین وارد کردن داده‌ها در چنین ستونی به سادگی انجام نمی‌شود.

مثال 3 - افزودن رکوردهای جدید به جدول با استفاده از رویه ذخیره شده

حالا بیایید داده ها را در جدولی که رویه ذخیره شده به ما باز می گرداند وارد کنیم. معنی در اینجا یکسان است، به جای VALUES و به جای درخواست، فراخوانی رویه را نشان می دهیم. اما همانطور که می‌دانید، ترتیب و تعداد ستون‌های برگردانده شده توسط رویه باید کاملاً با فهرست ستون‌هایی که قرار است درج شوند مطابقت داشته باشد. حتی اگر لیست ستون مشخص نشده باشد).

INSERT INTO TestTable(ProductName, Price) EXEC TestProcedure GO SELECT * FROM TestTable


امیدوارم این مطالب به شما در درک دستورالعمل ها کمک کرده باشد. درج کنید، و این تمام چیزی است که در حال حاضر دارم!

پرس و جوی sql INSERT INTO زمانی منطقی می شود که یک جدول پایگاه داده ایجاد شده باشد. یعنی جدول وجود دارد، نام دارد، سطرها و ستون ها ایجاد شده است. جدول توسط عملگر ایجاد می شود: ، جدول توسط عملگر اصلاح می شود.

پرس و جو sql INSERT INTO - نحو پرس و جو

پرس و جوی sql INSERT INTO دارای نحو زیر است:

INSERT INTO table_name (در پرانتز، در صورت لزوم، فهرستی از ستون‌ها را درج کنید که می‌خواهید داده‌ها را درج کنید) VALUES داده‌های درج شده1، داده‌های درج شده2، داده‌های درج شده3.

می توانید گزینه IGNORE را بین INSERT و INTRO قرار دهید. الزامی نیست. برای محافظت از کلیدهای اصلی هنگام ویرایش جدول مورد نیاز است. در غیر این صورت، اگر در حین ویرایش تکراری از کلیدهای اصلی اتفاق بیفتد، هنگام درج گزینه IGNORE، ردیف اول با کلید اصلی در جدول در حال ویرایش باقی می ماند و سایر کلیدهای اصلی حذف می شوند. به طور پیش فرض این گزینه را حذف می کنیم.

گزینه های اختیاری LOW_PRIORITY و DELAYED وجود دارد. آنها اولویت ها را برای افزودن اطلاعات به پایگاه داده تعیین می کنند. اولی انتظار برای انتشار پایگاه داده را مشخص می کند، دومی به معنای بافر کردن اطلاعات است.

خط در پرس و جو: INSERT با عبارت VALUES به شما امکان می دهد یک ردیف را به جدول پایگاه داده اضافه کنید. عبارت VALUES حاوی مقادیر این داده ها است.

سوالات فرعی را می توان به جای عبارت VALUES مشخص کرد. INSERT با یک پرس و جوی فرعی، ردیف های برگردانده شده توسط پرسش فرعی را به جدول اضافه می کند. سرور پایگاه داده پرس و جو فرعی را پردازش می کند و تمام ردیف های برگشتی را در جدول درج می کند. سرور سطرها را وارد نمی کند مگر اینکه پرس و جو فرعی آنها را انتخاب کند.

  • subquery_1 - یک پرس و جو فرعی که سرور به همان روشی که view پردازش می کند
  • subquery_2 یک پرسش فرعی است که ردیف های درج شده در جدول را برمی گرداند. فهرست این پرسش فرعی باید به همان تعداد ستون در فهرست ستون INSERT باشد.

سوالات فرعی عملا در پایگاه داده MySQL استفاده نمی شود.

نمونه هایی از پرس و جوی sql INSERT INTO در پایگاه داده MySQL

با استفاده از دستور INSERT INTRO ردیف های جدیدی را در پایگاه داده MySQL وارد می کنیم.

مثال اول

ردیف های جدید را در جدول table_name درج کنید.

INSERT INTO table_name VALUES ('2','145','1','name');

این به این معنی است که می خواهیم مقادیر 2,145,1,name را در ستون های جدول table_name وارد کنیم. از آنجایی که ستون ها مشخص نشده اند، مقادیر در تمام ستون های جدول پر می شوند.

مثال دو

اطلاعات را در ستون های مورد نیاز (مشخص شده) جدول table_name وارد کنید.

INSERT INTO table_name (client_customer، client_subclient، client_mail) VALUES ('name1','subname1',' [ایمیل محافظت شده]")، ('name2','subname2',' [ایمیل محافظت شده]")، ('name3','subname3',(' [ایمیل محافظت شده]′);

ایگور سروف مخصوص سایت "".

بارگذاری...