📚 فصل ۱۳ — وارد کردن دادهها در جداول (INSERT) در SQL Server
1️⃣ مقدمه — چرا باید درج دادهها را اصولی بلد باشیم؟
تا الان شما یاد گرفتید که:
- پایگاه داده چیست
- جداول چگونه ساخته میشوند
- کلید اصلی و خارجی چه نقشی دارند
حالا وقتش رسیده دادهها رو به این جداول اضافه کنیم.
درج داده یکی از پرکاربردترین عملیات در زندگی واقعی است، چون در هر سیستمی:
- مشتریها ثبتنام میکنند
- سفارشها اضافه میشن
- محصولات وارد انبار میشن
💡 جملۀ کلیدی:
اگر درج داده اصولی نباشه، پایگاه داده شما سریع نامعتبر، غیرقابل اعتماد و ناکارآمد میشه.
2️⃣ دستور پایه INSERT
— ساختار کلی
فرمت استاندارد INSERT
به این صورت است:
INSERT INTO TableName (Column1, Column2, Column3, ...)
VALUES (Value1, Value2, Value3, ...);
- TableName → اسم جدول هدف
- Column1, Column2, … → اسم ستونهایی که میخوای مقداردهی کنی
- VALUES → مقادیر به همان ترتیب ستونها
📌 نکته مهم:
ترتیب ستونها و مقادیر باید یکسان باشد.
3️⃣ وارد کردن دادهها در تمام ستونها
اگر بخواهیم مقدار همه ستونها (به جز ستونهایی که IDENTITY
خودکار مقدار میگیرند) را پر کنیم:
CREATE TABLE Customers (
CustomerID INT,
FullName NVARCHAR(100),
City NVARCHAR(50)
);
INSERT INTO Customers (CustomerID, FullName, City)
VALUES (1, N'علی محمدی', N'تهران');
📌 چرا از N
قبل از متن استفاده کردیم؟
چون ستون ما NVARCHAR است و داده فارسی داریم، باید مشخص کنیم که رشته Unicode است.
4️⃣ وارد کردن دادهها فقط در ستونهای خاص
اگر یک ستون مقدار پیشفرض دارد یا اجباری نیست، میتوانیم آن را در درج مقدار نیاوریم.
CREATE TABLE Products (
ProductID INT,
ProductName NVARCHAR(100),
Price DECIMAL(10,2) DEFAULT 0
);
INSERT INTO Products (ProductID, ProductName)
VALUES (101, N'کیبورد مکانیکی');
ستون Price
اینجا مقدار پیشفرض 0
میگیرد.
5️⃣ وارد کردن چندین رکورد در یک دستور
برای درج چند رکورد:
INSERT INTO Customers (CustomerID, FullName, City)
VALUES
(2, N'مریم احمدی', N'اصفهان'),
(3, N'رضا قاسمی', N'مشهد'),
(4, N'سمیه شریفی', N'شیراز');
📌 این روش سریعتر از اجرای چندین دستور جداگانه است.
6️⃣ درج دادهها بدون ذکر ستونها (خطرناک!)
INSERT INTO Customers
VALUES (5, N'حسین رستمی', N'تبریز');
📛 هشدار: اگر ترتیب یا تعداد ستونهای جدول تغییر کند، این دستور خطا میدهد یا داده اشتباه درج میشود. بهتر است همیشه نام ستونها را ذکر کنید.
7️⃣ درج با ترتیب متفاوت ستونها
اگر ترتیب ستونها را تغییر بدهید، VALUES
هم باید دقیقاً هماهنگ باشد:
INSERT INTO Customers (FullName, City, CustomerID)
VALUES (N'عاطفه نوری', N'یزد', 6);
این کار درست است چون ترتیب ستونها را خودمان مشخص کردیم.
8️⃣ نکات مهم هنگام درج دادهها
- استفاده از
N
پیش از رشتههای فارسی (N'متن'
) - همخوانی تعداد ستونها با تعداد مقادیر
- رعایت نوع داده (Data Type Match)
- توجه به ستونهای
IDENTITY
(خودکار مقدار میگیرند و نباید در INSERT بیایند، مگر باSET IDENTITY_INSERT ON
) - استفاده از
DEFAULT
برای مقادیر پیشفرض
9️⃣ خطاهای رایج و دلایل آنها
❌ مقدار NULL در ستون NOT NULL
:
INSERT INTO Customers (CustomerID, FullName) VALUES (7, NULL);
خطا: “Cannot insert the value NULL into column ‘FullName’…”
❌ مقدار ناهمخوان با Data Type:
INSERT INTO Customers (CustomerID, FullName) VALUES ('متن', N'سارا رفیعی');
خطا: چون ستون CustomerID
عددی است.
❌ نقض محدودیت کلید خارجی:
INSERT INTO Orders (OrderID, CustomerID) VALUES (1, 99);
اگر مشتری با ID=99 وجود نداشته باشد، درج انجام نمیشود.
🔟 درج مقادیر پیشفرض (DEFAULT
)
CREATE TABLE Sales (
SaleID INT,
SaleDate DATE DEFAULT GETDATE()
);
INSERT INTO Sales (SaleID) VALUES (1);
ستون SaleDate
اتومات با تاریخ امروز
پر میشود.
همچنین میتوانید استفاده کنید:
INSERT INTO Sales (SaleID, SaleDate) VALUES (2, DEFAULT);
1️⃣1️⃣ درج دادهها با استفاده از نتایج SELECT
(Insert-Select)
این روش برای کپی یا انتقال دادهها مفید است.
مثال:
CREATE TABLE ArchivedCustomers (
CustomerID INT,
FullName NVARCHAR(100),
City NVARCHAR(50)
);
INSERT INTO ArchivedCustomers (CustomerID, FullName, City)
SELECT CustomerID, FullName, City
FROM Customers
WHERE City = N'تهران';
📌 نتیجه: همه مشتریان تهران به جدول آرشیو منتقل میشوند.
1️⃣2️⃣ تمرین عملی
تمرین ۱: یک جدول Students
بسازید با ستونهای:
- StudentID (INT, Primary Key)
- FullName (NVARCHAR(100))
- BirthDate (DATE)
و 5 دانشجو وارد کنید.
تمرین ۲: از جدول Customers
، تمام مشتریان مشهد را به یک جدول جدید به نام MashhadCustomers
منتقل کنید.
1️⃣3️⃣ جمعبندی
در این فصل یاد گرفتیم:
- دستور پایه
INSERT
- روشهای مختلف درج داده
- مشکلات رایج و راهحلها
- استفاده از مقادیر پیشفرض
- کپی دادهها با
INSERT SELECT